Twenty-two built-in specialist roles, plus 46 language, UI and task-specific agent blocks. Language packs select worker, tester and reviewer specialists. Scoped packs. No “hold the monorepo in your head” cosplay. 🎭
Mix brains: cheap local explorer + sharper cloud reviewer in one run — see Providers. Budget diplomacy is a feature.
| ID | Tools | Output | When |
|---|---|---|---|
coordinator |
— | JSON actions | Pre-exec + each wave 🧭 |
orchestrator |
— | decisions | Reserved |
context |
— | CONTEXT body | Run start 📝 |
explorer |
✅ + find_models / mcp_call |
file map | Deep explore 🔎 |
docs |
✅ + find_models / mcp_call |
docs map | Docs/API queries 📚 |
architect |
— | design JSON | Large/refactor 🏛️ |
planner |
— | plan JSON | Always 📋 |
splitter |
— | tasks JSON | Always ✂️ |
worker |
✅ + find_models / mcp_call |
status | Execute 🛠️ |
deep |
✅ + find_models / mcp_call |
status | Multi-step 🧪 |
reviewer |
— | approve JSON | Critic 🔍 |
corrector |
✅ + find_models / mcp_call |
status | On reject 🔧 |
tester |
✅ + find_models / mcp_call |
passed + commands | Real shell verify (pytest/go/smoke) ✅ |
placeholder |
✅ + find_models / mcp_call |
status + gaps | Fill stubs / flag precise gaps 🩹 |
escalate |
— | action JSON | HITL timeout arbitrator (retry/re-scope/…) ⚖️ |
memory |
— | bullets | Learn 💾 |
manager |
— | squads + interface contracts | Assemble teams and ownership boundaries |
triage |
— | assignee + guidance | Route rejected work to another available agent |
composer |
— | pipeline JSON | Assemble a task-specific pipeline (dynamic_pipeline) 🎯 |
reviewer-strict |
— | approve JSON | Sequential second opinion, asked only when reviewer returns no readable verdict; temperature 0 🔍🔍 |
describer |
— | prose | Architect half of the describer→editor pair (architect_editor) 🗣️ |
editor |
✅ + find_models / mcp_call |
status | Editor half: applies a described change, minimal reasoning, strict format ✍️ |
Implementation roles return status, summary and files_changed. Testers
return passed, executed commands, summary and failures; a read-only
verification task does not need an implementation edit. Reviewers return
approved, score, summary and issues. These contracts are enforced by
schema and delivery gates. Finalization and recovery preserve the active role's
contract, including language-specific testers. Failed or unexecuted checks do
not become passes because a file was written.
Review and correction retain each team's charter and frozen interface. A fresh agent dispatch can read the files again after a predecessor's repetition guard has fired; repeated calls within that dispatch and task-wide retry budgets remain bounded.
!!! note "🧰 Coding tools"
Coding agents share ws_* + git_* plus find_models (auth-gated catalog)
and mcp_call (single MCP meta-tool — never one tool per MCP capability).
!!! note "⚖ @escalate"
Fired only when a task hits max review retries and the human does not answer
the escalate modal / /escalate within escalate_ask_timeout (default 5m) — and only when
no human is attached; with a TTY or a Studio client the gate blocks instead of expiring.
Override the specialist with escalate_timeout_agent (auto: escalate → reviewer → coordinator).
curl -s localhost:7420/api/agents | jq '.[].id'
# TUI: /agentsThe twenty-two above are the roles. A language pack substitutes language-aware agents for some of
them: override_worker sets execute.default_role, override_tester sets the test phase's
agent, and the pack's pipeline block names the reviewer directly (execute.reviewer:). Those
substitutes ship alongside UI, repository-insight and OpenShift specialists as
agent blocks (pkg/blocks/bundled/agents/), 46 in total;
slmcode blocks list prints the live set.
| Pack | worker | tester | reviewer |
|---|---|---|---|
go |
go-worker |
go-tester |
go-reviewer |
python |
python-worker |
python-tester |
python-reviewer |
typescript |
ts-worker |
ts-tester |
ts-reviewer |
react |
react-worker |
react-tester |
react-reviewer |
web |
web-worker |
web-tester |
— |
rust |
rust-worker |
rust-tester |
rust-reviewer |
java |
java-worker |
java-tester |
java-reviewer |
kotlin |
kotlin-worker |
kotlin-tester |
— |
dotnet |
dotnet-worker |
dotnet-tester |
dotnet-reviewer |
ruby |
ruby-worker |
ruby-tester |
— |
php |
php-worker |
php-tester |
— |
swift |
swift-worker |
swift-tester |
— |
cpp |
cpp-worker |
cpp-tester |
— |
| (no pack) | shell-worker |
shell-tester |
— |
A pack whose pipeline does not name a reviewer uses the generic reviewer. shell-worker /
shell-tester belong to no pack; the generic pipeline picks them up for a shell workspace.
slmcode blocks show agent go-tester # its prompt, tools, temperature, skills
slmcode blocks apply go --materialize-agents # copy them into .slmcode/agents/ to editMaterializing is the supported way to customise one: the copy in .slmcode/agents/ wins over the
builtin (see Blocks → Discovery Order).
.slmcode/agents/<id>.yaml or ~/.slmcode/agents/.
# TUI
/agent edit worker model=qwen2.5-coder:14b
# CLI
slmcode agent list
slmcode agent show worker
slmcode agent edit worker model=qwen2.5-coder:14b provider=ollama
slmcode agent clear-llm workerFields: skills, model, provider, endpoint, tools, temperature, max_tokens, max_iter, system_prompt.
LLM inheritance: empty model / provider / endpoint means inherit the active
stack (global config.yaml). Per-agent pins always win.
agent.model ?? stack/global.model
agent.provider ?? stack/global.provider
agent.endpoint ?? (agent.provider ? default : global.endpoint)
model_profiles resolve against each agent’s effective model (not only the global one).
Different endpoints → unique backend keys (no accidental shared gateway).
Custom agents are first-class:
- Specialist mode — select them in Studio /
mode: specialist - Board tasks — set
role: night-auditor(dropdown lists all/api/agents) - Pipeline slots — insert before/after/replace any phase in
.slmcode/pipeline.yaml
# .slmcode/pipeline.yaml
slots:
- id: audit-explore
agent: night-auditor
after: explore
input: |
Review exploration for risks.
{{exploration}}→ Pipeline
{
"summary": "Auth clear; tests missing",
"actions": [
{"type": "promote", "task_id": "T2", "text": "deps met"},
{"type": "reassign", "task_id": "T3", "role": "deep"},
{"type": "add_task", "text": "Add regression test", "role": "tester"},
{"type": "note", "task_id": "T1", "text": "edge case"}
],
"focus_files": ["pkg/foo.go"]
}Air-traffic control, not pilot. Let workers fly the plane.
slmcode task add "Deep refactor auth" --role deep --column ready_to_dev
slmcode task delegate T1 docsAuto-loaded from:
AGENTS.md/AGENT.mdCLAUDE.md.cursorrules.slmcode/PROJECT.md
!!! example "✨ Tiny AGENTS.md"
markdown # Agents - Tiny, reviewable diffs - No drive-by refactors - Match existing style
→ 🦋 Skills · 🧠 Concepts
☀️ Made with ♥ by UnicoLab