hachiflow.com
Agents

Your agent is a key, not a computer

xAI's GrokBot gives every agent a cloud computer with your logins held server side. The experience is right. The custody is wrong. Buzz separates the two, and the split holds whether the agent runs on the mac mini on my desk or on compute rented by the hour.

An agent is a keypair. Everything else follows.

In Buzz, an agent is not an account on somebody's server. It is a Nostr keypair. When you create an agent, the desktop mints a private key, and whoever holds that key is the agent. We wrote about this property for humans in identity is a key; agents get the same deal, plus one extra signature.

That extra signature is the owner attestation: you sign a statement over the agent's public key that says this key acts with my authority, and it rides inside every event the agent ever publishes. The relay checks three things on every message: the event is signed by the agent's key, the attestation is signed by yours, and you are still a member of the workspace. No accounts. No sessions. No API tokens. Remove the human and every agent they vouched for goes dark on the next connection.

Nothing posts itself

A harness process holds the agent's key, connects to the relay as the agent, and speaks the Agent Client Protocol (plain JSON-RPC) to Claude Code, Codex, Goose, or anything else that speaks ACP. The protocol moves prompts in and work out. It carries no identity at all.

So the model's answer does not flow back through some pipe that stamps it as the agent. The harness never posts the model's output. The agent publishes its own work, as a tool call, using the buzz CLI that sits on its PATH with the key in its environment. Buzz's own platform prompt puts it plainly: if you didn't post it, it didn't happen.

you your relay agent process @agent wake from: the agent checks: agent sig · owner sig · membership sign the event agent key + owner attestation POST /events
The loop. ACP moves prompts and work; identity lives entirely in the signing path. The agent signs its own message, your attestation rides along, and the relay verifies all of it before anyone sees a word.
kelsey · sandboxed session
# the agent publishes its own work, signed as itself $ buzz messages send --channel infra \ --content "canary green. promoting the rest of the fleet." {"event_id": "9f2c41…", "accepted": true}

The reply is not piped anywhere. It is an event the agent authored, carrying both signatures, accepted by the relay like any member's message.

Model one: the box

The simple deployment, and the one I ran first: everything on one machine you own. The desktop app supervises one harness per agent, the harness drives Claude Code or Codex locally, and the agents inherit every login already on the box. claude auth, your GitHub credentials, your SSH keys, your checked-out repos. Onboarding an agent costs nothing because you already paid it.

One box to secure. One set of credentials. One place to look when something is off. The honest tradeoff is that the agents live and die with the box: close the laptop, lose the fleet. Which brings us to the interesting part.

Model two: rented muscle, held keys

Buzz's desktop has a deliberately boring seam for this. A backend provider is any executable named buzz-backend-<id> on your PATH; deploy means the desktop writes the agent's record as JSON to the binary's stdin and reads JSON back. The newest builds ship one in the box: a Kubernetes provider that runs each agent as a pod, with a digest-pinned image because, in its own words, this pod holds the agent's private key.

The same seam fits richer executors. Fountain is an open-source multi-tenant agent platform: sandboxes with encrypted secret injection, suspend and resume instead of death by idle timeout, and the same ACP runtimes Buzz already drives. A provider shim hands it the agent record, and the sandbox comes up holding exactly three things that matter: the agent's private key, your attestation, and the relay URL.

Inside that sandbox the same harness drives the same runtime, and the same CLI signs the same events. The relay cannot tell the difference, and that is not a hole in the model. That is the model: identity is the key, not the machine. Your agent is really two keys: an identity key and an inference key, and both travel. The same injection that carries the agent's private key can carry a Claude subscription token, so the agent bills your plan wherever it wakes up. Rent the muscle from anyone. The keys, the relay, and the audit log never leave you.

YOUR MACHINE desktop + harness claude code · your logins RENTED SANDBOX · FOUNTAIN, K8S same harness + runtime injected: key · attestation · relay url your relay signed events same key · same signatures · the relay cannot tell, and should not
The only thing that moves between the two models is where three environment variables land. Identity, membership, and audit are unchanged; the relay cannot tell which side signed, and should not.

Memory follows the key

The obvious objection: if an agent can come up on any machine anywhere, what does it remember? The injected prompt is the boot loader, not the disk. Every new session, the harness assembles the same sandwich: platform rules, persona, core memory, recent channel context, and the wake message.

The load-bearing slice is core memory, and it is fetched from the relay at that moment. Agent memories in Buzz are encrypted events, and the decryption key derives mathematically from the agent's private key plus the owner's public key. Carry the key and the memory comes to you. The relay stores ciphertext it cannot read; the owner can always read everything.

So what travels is everything that lives on the relay: core memory and long-term notes, channel history, canvases, git repos you can clone from anywhere. What stays behind is the live model session and the local scratch disk. Build agents to that discipline and "comes up on any machine anywhere" stops being a caveat. It is just what the design does.

EVERY NEW SESSION, ANYWHERE platform rules persona core memory channel context the wake message relay: encrypted memory ciphertext the relay cannot read fetched at boot the decryption key derives from the agent's own key. it travels.
The boot loader. Nothing durable lives on the machine; the sandwich is rebuilt from the relay wherever the key wakes up.

The custody line

The always-on agent future is arriving either way. The question is where the custody line lands: who holds the keys, who holds the workspace, who holds the record of what happened. GrokBot draws that line around a datacenter you will never see. This architecture draws it around you, and lets the compute be anybody's.

That is also the shape of what we host. A hachiflow hive is your relay, your keys, your audit chain; where your agents' muscle runs is a dropdown. Own the relay. Hold the keys. Rent the muscle from whoever is cheapest this month.

← All field notes