Skip to content

Duck, advisor, council, orchestrator, routines, namer

Helpers beside the coding agent: a duck to think out loud with, an advisor, a debating council, agent graphs, scheduled routines and the tab namer.

Tools5 minutes to read
Copy & share
On this page8 sections

For a guided introduction to graphs, model assignments and review loops, see multi-agent workflows.

OverviewLink to this section

Besides the coding agent, Empryo has six smaller helpers. Each one does a single job. Each can use its own model (set in the task router, /router), and each has its own line in your usage costs.

HelperWhat it does for youHow to use it
DuckA chat partner that cannot see your code. Good for thinking a problem through/duck [question], --mode duck
AdvisorA second model gives an opinion on the current conversation. It cannot change anything/advise <question>, the advisor tool, /advice to see past answers
Council2 to 4 agents with different briefs debate one question and reach a verdict/council <topic>, the council tool
OrchestratorRuns a graph of agents, with loops, review steps and pauses for your answer/orchestrate <graph or goal>, /runs, --mode orchestrate
RoutinesRuns a prompt on a schedule for this repository/schedule, /routine
NamerGives each tab a short name based on your first promptAutomatic, or /tab rename

The namerLink to this section

A tab called TAB-3 tells you nothing. The namer reads your first prompt and gives the tab a name of two or three words. It has no tools and does not see your code.

When it runs. The first real prompt in a tab names that tab. This works in the terminal UI tab bar, the desktop tab bar, and the title of a saved headless session. It only replaces a placeholder name (TAB-1, new tab, or a mode name). A name you typed yourself is never replaced.

Renaming later. When the work in a tab changes, rename it:

/tab rename auth refactor    rename by hand
/tab rename                  let the namer pick a new name

With no name given, the namer reads the prompt that opened the tab and your last few prompts, and names what the tab is doing now. The agent in the tab can also rename it with the rename_tab tool when the work changes direction.

Model. The namer uses the router's namer slot. If that is not set, it uses the duck slot, then default, then the tab's own chat model. A name is a few words, so this is a very cheap call. If the model starts answering your prompt instead of naming it, the tab takes a name made from your prompt's own words.

Switching it off. Set tabNaming: false in your config. Tabs are no longer named automatically, but /tab rename <name> and renaming in the tab bar still work.

json
{
  "tabNaming": true,
  "taskRouter": { "namer": "subscriptions/claude-haiku-4-5-20251001" }
}

DuckLink to this section

The duck is a "rubber duck": someone to talk a problem through with. /duck opens a new tab in duck mode, and /duck <question> asks your question straight away.

A duck tab cannot see your repository. It can search the web (web_search, fetch_page), ask the advisor, look up models (find_model), and send messages to other tabs (link). It has no file reading, search or shell. If you ask it to read a file, it tells you to use a coding tab, and it can pass the work to one for you.

AdvisorLink to this section

/advise <question> sends a short, cleaned-up summary of the current conversation to a second model. That model has no tools and no part in the work. It answers your question and does nothing else.

The advisor keeps its own thread for each tab, so follow-up questions have context. Add --fresh to start over. Every answer is saved, and /advice lists them.

If the advisor returns an empty answer, Empryo reports the consult as failed instead of pretending it worked.

CouncilLink to this section

/council <topic> gives 2 to 4 agents a brief each and puts them in one shared room. Each agent sees what the others say, and they keep going until they agree or you close the room. A final verdict sums up the result.

Use a council when a decision has several reasonable answers, for example a design trade-off. Do not use it for routine work: every round costs one model call per seat.

OrchestratorLink to this section

An orchestration is a graph of steps (nodes) joined by edges. The node types are agent, judge, parallel, council, advisor, shell, gate, set, link, graph, join and end.

  • An agent node runs a subagent on a task.
  • A judge node reviews the work and ends with PASS, FAIL or PARTIAL.
  • A gate node pauses and asks you a question.
  • A shell node runs a command.

Each edge can have a when condition, so the next step depends on the result: ok, fail, a judge's PASS/FAIL/PARTIAL, your answer at a gate (answer=), or a value stored earlier. An edge that points back to an earlier node makes a loop, and max limits how many times it can repeat.

/orchestrate nightly-sweep            run a saved graph
/orchestrate 5 agents to sweep core   describe a goal: the agent designs the graph, then runs it
/runs                                 watch every run live (terminal UI)

When the agent builds a graph, it can pass it as an object or as JSON text. A graph saved to disk must have its own id.

RoutinesLink to this section

A routine runs a prompt on a schedule, for example /schedule add <cron> <prompt>. It runs as a headless agent while Empryo is open on the repository. See Routines for the full guide.

Where the models come fromLink to this section

Each helper has its own slot in the task router. If you leave a slot empty, it falls back to another slot, so an existing config keeps working:

SlotUsed byIf empty, uses
advisorthe advisor tool, /advisethe model of the tab that asked
duckduck tabsdefault
councilcouncil seatsspark
orchestratethe agent in orchestrate modedefault
nodeagent nodes in an orchestrationthe normal routing (ember for code work, spark otherwise)
judgejudge nodes in an orchestrationreview, then goalReview
routinescheduled headless runsdefault
namertab namesduck, then default, then the tab's model

Set them with /router in the terminal UI or the desktop app, or in your config:

json
{
  "taskRouter": {
    "namer": "subscriptions/claude-haiku-4-5-20251001",
    "advisor": "anthropic/claude-opus-4-5",
    "council": "openai/gpt-5.6"
  }
}