Quickstart Crew CLI
The smallestai agent-crew CLI is built for rapid iteration. Test your crew locally with a single command, then deploy to the cloud when ready. No configuration files, no Docker, no infrastructure management.
Local-first development: Run and test your agent entirely on your machine. Deploy only when you’re satisfied.
Installation
The CLI comes bundled with the SDK:
Expected boot output on smallestai>=5.0.0. Startup includes a validation routine that exercises your setup_handler against a placeholder WebSocket to surface init-time errors. This dry-run reaches await session.start() before any client has connected and logs:
The server proceeds past this point — Application startup complete. follows, Uvicorn binds on :8080, and real client connections handshake normally.
A different error at the same point in startup — for example OpenAIError: Missing credentials — indicates a real configuration issue. Set OPENAI_API_KEY (or configure Electron, below) before booting.
Verify the installation:
You’ll need a Smallest API key (from app.smallest.ai/dashboard/api-keys) for the CLI and SDK helpers. Export it:
Plus an LLM for the example below. The Atoms Crews SDK ships an OpenAIClient that accepts any OpenAI-compatible endpoint — pick one:
Electron (Smallest)
OpenAI
Smallest’s voice-optimized SLM. Reuses SMALLEST_API_KEY — no separate LLM key required.
The Atoms Crews OpenAIClient is async — call sites use await llm.chat(messages=[...]) inside a crew node’s generate_response() method (which already runs in an event loop). It does not expose the OpenAI-Python-SDK shape llm.chat.completions.create(...); the call surface is await llm.chat(messages, stream=False, tools=None, ...) returning a ChatResponse with .content and .tool_calls.
Test connectivity outside a crew
For a one-off sanity check (verify your key works, the endpoint responds), use the standard openai Python SDK — Electron is OpenAI-compatible, so the official client works as a drop-in by overriding base_url:
Same code works against OpenAI itself by dropping base_url and swapping model to gpt-4o-mini (and using OPENAI_API_KEY). Use this pattern for backend scripts or smoke tests that aren’t inside a crew node.
Create Your First Agent Crew
Before the CLI has anything to connect to, you need a Python file that defines a crew and starts a WebSocket server. Pick one of the two patterns below and pull the example folder straight from the cookbook — the tar command drops a getting_started/ or background_agent/ directory into your cwd, ready to cd into. For local development, no .env is needed — the examples read SMALLEST_API_KEY (and optionally OPENAI_API_KEY) straight from your shell. For cloud deployment, you’ll need a .env file (see the Ship env vars in a .env step further down). Each folder ships a one-line requirements.txt pinning smallestai, which the cloud build also uses when you deploy.
Single-node crew
A minimal, single-node crew that streams chat completions from an LLM and greets the caller on join — copied from the cookbook’s getting_started.
server.py is the entry point — it boots an AtomsCrewApp on ws://localhost:8080/ws. assistant.py contains the OutputCrewNode subclass that streams the LLM response; extend it with your own prompt, tools, and logic.
Multi-node crew with background processing
A two-node example from background_agent — a support agent talking to the user, and a sentiment analyzer running silently in parallel that flags frustration and triggers auto-escalation.
Multi-node uses smallestai>=5.0.0 because sentiment_analyzer.py imports SDKAgentLogEvent (introduced in 4.4.7). Same boot-log caveat as the Installation section applies — you’ll see the Session not initialized ERROR; the pod still serves.
app.py wires both nodes into a single CrewSession. support_agent.py is the user-facing OutputCrewNode; it can query the sibling sentiment node mid-conversation. sentiment_analyzer.py is a BackgroundCrewNode — it listens to every transcript event, classifies sentiment, and updates state the support agent reads.
What you’re working with:
OutputCrewNode— base class for nodes that produce user-facing output. Overridegenerate_response()to define what the agent says.BackgroundCrewNode— base class for nodes that observe events silently. Overrideprocess_event()to react. No audio output, no interrupts.CrewSession— the runtime that owns the WebSocket connection and runs your nodes in parallel for each call.AtomsCrewApp— the FastAPI WebSocket server that the CLI’schatcommand, and the production Atoms orchestrator, connect to.
Local Development Workflow
The CLI’s best feature is instant local testing. No need to deploy to test changes.
Start Your Agent Server
Run the entry point to start a local WebSocket server:
This spins up a server on localhost:8080 that mimics the production environment.
Cloud Deployment
When you’re ready for production, deploy to Smallest AI’s managed infrastructure.
Prerequisite: You need an existing agent on the Atoms platform — agent-crew init links your local code to it. Create one from the dashboard, or programmatically via the SDK:
Authenticate
Prompts for your Smallest API key (paste it from app.smallest.ai/dashboard/api-keys). The key is stored at ~/.smallestai/credentials.json with 0600 permissions.
Already have SMALLEST_API_KEY exported? Pipe it in:
Link to Platform Agent
Interactive picker — choose which agent from app.smallest.ai to link to. Requires a TTY.
No TTY? init just writes one file. Create .smallestai/config.toml yourself:
Ship env vars in a .env (required)
Platform-side secrets injection isn’t built yet. The deploy zip does not carry your shell environment.
How .env works on the cloud: the zip ships every file in your dir except __pycache__/, .venv/, etc. — .env is not excluded. The cookbook’s assistant.py calls load_dotenv() at import time, so on the cloud it reads .env from the same directory. Keys defined locally end up available to os.getenv(...) in the cloud agent.
Create one next to server.py:
Command Reference
Authentication
Agent Management
Common Options
Build Management
Deployments are not live by default. This gives you a safety buffer.
One Live Build Per Agent: Making a new build live automatically takes down the previous one.
To promote a build:
- Run
smallestai agent-crew builds - Select the desired build
- Choose Make Live
To roll back:
- Run
smallestai agent-crew builds - Select the previous build
- Choose Make Live
To take down completely:
- Run
smallestai agent-crew builds - Select the LIVE build
- Choose Take Down
Running the CLI in CI / non-interactive environments
A few commands prompt you for input (an agent picker, a build picker, a password field). These only work in a real terminal. The table below shows which commands work non-interactively and how to substitute for the ones that don’t.
Skipping init in CI
init exists to write .smallestai/config.toml with your agent ID. In CI you can write the same file yourself before running deploy:
Promoting and rolling back builds in CI
builds calls the same endpoint for both Make Live and Take Down. You can call it directly:
The build ID is printed by deploy on success, and is also available from GET /atoms/v1/sdk/agents/{agentId}/builds.
Only one build per agent can be live at a time. Setting isLive: true on a new build automatically takes down the previously-live one.
Error handling
When deployed code raises, the SDK auto-records the error on the call (in calllog.errors[], the Events tab, and webhooks) — you don’t need to wire anything up to get this. The deploy command also warns about env vars your code references before zip upload, and the pod’s /ready endpoint blocks traffic until your crew’s __init__ succeeds. See Error Handling for severity semantics, graceful-fallback patterns, and how to emit your own application-level errors.
More examples
The two crews above are the starting points. The Smallest AI cookbook ships ~15 ready-to-run voice-agent examples covering tool calling, call control, multi-language support, knowledge-base grounding, real banking / scheduling / IVR flows, observability, and more — each in its own directory with the same curl-and-run shape.
Browse the full set of crews on GitHub.
STT, TTS, voice-agents, mobile, integrations — everything Smallest AI in one repo.


