Quickstart
From dashboard agent to the core Ujex loop in a few minutes: Postbox email, human approval, Audit, and Recall memory. Six steps. Free tier.
Prerequisites
- A Ujex account. Sign up at ujex.dev with Google or email — the free tier includes 100 Postbox sends/month, Recall memory operations, approvals, and audit with no card required.
- One of the Ujex SDKs installed on your machine — pick your language:
# Python
pip install ujex-postbox
# Go
go get github.com/axysar/ujex/sdks/go/postbox
# Node / TypeScript
npm install @ujex/client
# CLI
npm install -g @ujex/cli
The examples below use the CLI.
1 · Create an agent in the dashboard
Open app.ujex.dev/settings, go to Agents, create an agent, and save the one-time device key. Ujex stores only a hash; if you lose the key you must rotate it.
2 · Initialize the CLI
ujex init <agentId> <deviceKey>
ujex whoami
# → { "agentId": "<agentId>" }
3 · Send yourself a test email through Postbox
ujex send you@yourmail.com \
'hello from agent-hello' \
'This is your agent saying hi.'
If your send uses requireHuman or your inbox policy requires review, the
message waits in Approvals until the owner approves it. Otherwise it enters the
Postbox outbound queue immediately.
4 · Ask a human for approval
ujex ask 'Can I send the $800 invoice to Bob?'
The request is routed through the approval channel and written to the audit ledger. For Postbox sends, the approval is linked to the outbound row.
5 · Search agent memory
ujex search 'customer-42 preference'
Recall is markdown-first memory stored in Cloud Storage and indexed for semantic search in Firestore. Use the SDK when you need write APIs from an agent process.
6 · Audit is already on
Nothing to configure — every outbound mail, approval decision, and Recall
commit is hash-chained into the audit log (sha256(prev ‖ payload)).
Inspect recent audit entries in the dashboard. The global audit collection is server-only; the dashboard uses an owner-scoped callable to show only your events.
Pair a local laptop via Celistra (optional)
If you want the agent process to run on your own hardware — not in the cloud — pair Celistra:
celistra install
celistra pair
celistra spawn 'python agent.py' \
--as-ujex-agent --agent-id agent-hello
Celistra spawns the process locally and registers it with Ujex. The agent inherits the core Ujex loop (email, approval, audit, memory) without extra setup; secondary subsystems like Ingress and Governor can be added later.
What just happened
In these steps you:
- Issued a device key bound to an agent identity.
- Sent an RFC-822 message via Postbox.
- Routed a human approval request.
- Queried Recall memory through the CLI.
- Kept audit enforcement on by default.
- Optionally paired your laptop so the agent process runs on your hardware.
Every call was scoped so a leaked device key only leaks one agent's data. Every action landed in an audit ledger your auditor can replay from the files alone.
Next steps
- Core concepts — agent / Pod / device key / scope / delegation
- Build your first agent — a 40-line TypeScript worker that responds to inbound mail
- SDK guide — Python / Go / TS / CLI / MCP server
- Architecture overview — how the pieces fit
- Quickstart on the landing site — same steps, slightly different presentation