ncl, or by asking an agent in chat.
During installation
Run the installer and setup offers a template before it builds the sandbox:
If the library can’t be cloned or its index can’t be read, setup shows Could not load the template library. with the reason and returns to this choice.
Setup then stamps the agent through the same
ncl groups create --template command described below. The agent is created even when channel setup is skipped or can’t finish wiring — when a channel is ready later, setup wires that existing agent and sends the welcome message.
The provider you pick during setup stays separate from the template.
Existing installs see “Would you like to add or update an agent from a template?”, with No template changes selected by default. You can also use the CLI below or pass an explicit template path.
.env for retry. When the template already has agents, setup offers to connect an unwired agent, update a selected agent in place, create another agent with a distinct name, or cancel. Updates preserve the provider and skip channel setup; declining the update cancels that operation. Completed create, connect, or update operations clear the saved selection. See Updating a stamped agent for what an update covers.
Presetting a template
Advanced setup exposes the pick as Agent template, which resolves to a local ref. The same setting is available as a flag or an environment variable:Anytime, with ncl
/manage-channels (or ncl wirings create) afterward, exactly as for a hand-built group.
With no existing carrier of the template, this creates an agent. If one agent already carries it, the command returns an update plan; if several do, select one with
--id. Pass --new to create another agent. A template cannot be adopted onto an unrelated existing agent; updating a carrier of the same template is restamping.--name is optional. Without it the display name falls back to the template’s own agentName, then to the template folder name. --timezone <iana-id> sets the group timezone, which is what template task schedules fire in.
The template ref
--template <ref> is a path relative to your local templates directory — templates/ by default, or NANOCLAW_TEMPLATES_DIR. Refs are multi-segment, so <category>/<template> resolves to templates/<category>/<template>. The plugin root is the leaf folder, and its manifest name is independent of the path.
The ref must stay inside the templates directory. Absolute paths, a leading ~, and ../ escapes are all rejected. ncl groups create --template reads only this directory and never downloads a template.
templates/ except its README is gitignored, so a template that setup or create_agent copied in never blocks an update.
To point the library somewhere else, set NANOCLAW_TEMPLATES_DIR to another local path. It is never a URL and never changes at runtime.
Reading the create response
If the reader skipped or ignored anything — a non-conforming skill, an unsupported MCP transport, an unknown manifest field — the create response carries atemplateReport array listing each item by name:
templateReport means everything loaded. Fatal problems — an invalid manifest, a symlink, a smuggled credential — reject the whole template instead, and no group is created.
templateReport is specific to the create response. When the same command updates an existing agent, reader notices come back under report instead.
From chat
Ask an agent for a new one in plain language, for example “I need an SDR agent.” The agent looks up what exists withncl templates list (templates on this machine, no network) and ncl templates list --registry (the public library), offers a match, and once you pick one calls create_agent with that ref. Added after v2026.10.0.
- Download. A template that isn’t on this machine is downloaded from the public library into
templates/first. A local copy always wins and is never overwritten. - Approval.
create_agentkeeps its usual rule: an agent withcli_scope: globalcreates directly, and any other agent’s request waits for an admin. The approval card names the template and says whether approving downloads it. Approving covers only that template. - Nothing half-made. Nothing is downloaded until the request is allowed, and a failed download creates nothing.
- What you get. The new agent runs on its creator’s provider and is wired to its creator as a destination, like any agent
create_agentmakes. It isn’t wired to a chat. When you ask from Slack with/slack-agent-flowinstalled, it also gets its own bot.
ncl to list templates, so a group whose cli_scope is disabled can’t browse them.
After stamping
1
Wire it to a channel
Stamping creates the agent identity only. Connect it to a chat the usual way:See Channels for the per-platform setup.
2
Connect credentials
Templates ship no secrets. Any MCP server that needs an API key gets one from the OneCLI Agent Vault, which injects it into outbound HTTPS calls at request time — matched by API host.The common path needs no setup up front: the first time the agent calls a service with no credential, the API returns
401/403 and the agent replies with a prefilled connect link for that host. Open it, paste the key, and ask the agent to retry.Check the template’s own README.md for which services it expects, the scopes each key needs, and whether any of them is a paid service — registry templates must declare that up front, with a link to the tool and the tier they need. You always supply your own key.3
Activate recurring tasks
Template tasks are created paused, so stamping never starts background work without your consent. List and enable them:Resuming follows normal scheduled task semantics — if the stored next run passed while the task was paused, it becomes eligible immediately.
4
Set the provider, if you want a specific one
What stamping actually created
Plugin-owned MCP servers are template content, so
ncl groups config add-mcp-server and remove-mcp-server refuse to edit them. Change the template and restamp instead.
Next steps
Updating a stamped agent
Pull a newer version of the template into an agent already running.
Building a template
Build your own and contribute it to the catalog.