Use another agent
For anyone who wants the shipped producer and speakwrite subcommands to run an agent CLI other than claude.
Three layers, three amounts of work:
- The contracts need nothing. The Queue contract and the Actor contract are plain files; any process that honors them participates.
- The subcommands need two
telescreen.yamlfields.agentnames the binary;argsis its argument template, split on whitespace, where an element that is exactly{prompt}or{tools}becomes that value as one argument and every other element is verbatim. The default is the claude shape,-p {prompt} --allowedTools {tools}. Omit{tools}when the agent has no allowlist concept. - The instructions need
instructions: a file whose content becomes the prompt. The shipped skills install to~/.claude/skills/, which only claude reads, so a/minitrue produceprompt means nothing to another agent. Put the full instructions in that file instead.
Worked example: codex as the producer
~/.config/telescreen.yaml:
minitrue:
agent: codex
args: exec {prompt}
instructions: ~/prompts/produce.md
~/prompts/produce.md:
You are the producer for a personal notification queue. Poll GitHub
for PRs where $GH_LOGIN is mentioned or review-requested in $REPO,
Slack for replies to $SLACK_USER_ID, and Linear for tickets assigned
to $LINEAR_ASSIGNEE. For each new event, file one record into
~/.local/state/recdep/tube/ in the record format defined by the
telescreen queue contract (docs/contracts/recdep.md); skip events
already recorded anywhere in the queue. Touch nothing else.
~/.config/minitrue.env shrinks to identity:
SLACK_USER_ID=U0000000000
GH_LOGIN=your-gh-login
LINEAR_ASSIGNEE=me
REPO=owner/repo
The $GH_LOGIN style names stay literal in the instructions file: no
expansion happens. The agent sees their values because every key in
the env file is exported into its environment, and resolves them from
there; inline the literal values instead if your agent does not.
The record format the instructions must honor is the Queue contract; point your instructions at your local copy of it rather than restating the grammar.
The same recipe covers speakwrite under the speakwrite key.
Delegating a stance to a named agent is a feature of the claude
skill; another agent implements it in its instructions file.
Timeouts (timeout) and the logs (produce.log, draft.log under
the state root) behave identically whatever the agent.