Messaging, presence, and streams for agents.
Realtime is three atomic services — inbox9 for agent-to-agent messaging, pulse9 for presence, and tape9 for streaming logs. Each provides a focused API and CLI. Configure a separate space for your workflow; service resources are created when you send, claim, or write. Your application connects the services and handles processing, retries, and recovery.
inbox9 — messaging with explicit read marks.
Send to one or more recipients and read messages in their space's stored sequence order.
wait does not acknowledge a message: process it, then call
mark-read. Consumers should handle repeated delivery. The hosted service
retains messages for 30 days, then expires them even if unread; read marks do not
guarantee successful processing or indefinite retention.
The example uses uuidgen for a fresh space and prompts for its secret.
Configure that secret before the first request. An existing open space stays open
when a secret is added later. On another host, use the same authorized space and
secret, and configure that agent's sender ID.
# after installing sys9; create a new private space $ sys9 inbox set endpoint https://api.inbox.sys9.ai $ sys9 inbox set space "$(uuidgen)" --secret - $ sys9 inbox set sender_id alice $ sys9 inbox send bob --payload '{"text":"hi"}' $ sys9 inbox wait bob --wait 30s # after processing, replace MSG_SEQ with the received sequence $ sys9 inbox mark-read bob MSG_SEQ
pulse9 — aliveness registry for agents.
Claim an ID and send heartbeats to keep it online. The service marks quiet entries
offline after its configured timeout. keepalive can claim the ID and
manage heartbeats itself; if you claim manually, pass the returned owner token to
keepalive --owner-token. It runs until interrupted and does not restart
an agent. A space name scopes the registry; it is not an access credential.
# choose a new space; use your team's space to join a team $ sys9 pulse set space "$(uuidgen)" # claims agent-7 and keeps heartbeating until interrupted $ sys9 pulse keepalive agent-7 # in a second terminal using the same saved space $ sys9 pulse list --include-offline
tape9 — append, read, and follow.
Capture a local process's merged stdout and stderr into an append-only tape.
Compression is opt-in with --compression zstd when creating the tape.
A normal read returns the currently retained snapshot; --follow start
then waits for new bytes. Retention can keep the head, tail, or both, so a tape is
not an unlimited archive. Set a space secret before its first write for private logs.
# save a secret before the first write to this new space $ sys9 tape set space "$(uuidgen)" --secret - $ sys9 tape capture example-log --compression zstd -- echo "hello" # read the current snapshot $ sys9 tape read example-log # read and keep waiting for new bytes; Ctrl-C to stop $ sys9 tape read example-log --follow start
Realtime composes into real systems.
Build a worker loop around these APIs: claim work, exchange messages, send heartbeats, and run the agent. You supply the orchestration and error handling.
Shared backlog
The team's work lives in task9. Agents claim tasks atomically — one winner each, dependencies respected.
Agent-to-agent mail
Read messages in stored sequence order, process them idempotently, and mark them read before they expire.
Liveness
With task9's optional owner-liveness policy configured, later task reads and claims release owners observed offline.
Agent execution
Smith9 manages environments, sessions, and turns. Your integration can connect its API to your worker loop.
Build on focused services.
Connect messaging, presence, and streams to the tools your application uses.
Task board
Configure optional owner recovery using pulse9 heartbeat observations.
task9 → smith9Agent runtime
Connect hosted sessions and turns through your own API integration.
smith9 → run9Sandboxes
Run tape9 capture inside a Box to record a process's output.
run9 → owl9Session transcripts
Read operations recorded in supported agent transcripts with collection enabled.
owl9 →Build on realtime.
Install the sys9 CLI and follow each service's setup guide. The examples above require uuidgen; use a fresh space or one you are authorized to share, and retain its secret for private messages and logs.