Three changes from the M5b run (implementer lessons T47, T48):
- each session runs `opencode run --pure` with
OPENCODE_DISABLE_CLAUDE_CODE=1, so no global plugin or borrowed rules
file reaches the implementer; PLUGINS=1 restores both;
- with RESUME=1, a session stopped at SESSION_LIMIT_MIN with work left
uncommitted is resumed once, as one that ended by itself already was;
an idle stop is still not resumed;
- the prompt names the log row's Task cell, so a task's heading cannot
mislead the row the driver then looks for.
Checked against a stub opencode in scratch repositories (17 checks:
the flags and variable, PLUGINS=1, a resume after the limit, no resume
without work or without RESUME).
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
From the combined Ornith guidance (§6). Each session runs in its own
process group and is stopped after SESSION_LIMIT_MIN minutes (default
90), killed by group so the cargo it started goes too, never with pkill
(titan has no `timeout`, so the limit is plain shell). A task that logs
`stopped` gets its own message with the row. Two guards for a trial run:
RESUME=1 resumes a session once when it leaves work uncommitted, and
SLOTS_URL stops a session when no llama slot has been busy for
IDLE_LIMIT_MIN minutes (default 10).
Tested against a stub opencode outside a throwaway repository: a clean
task, a stopped row, a wrong trailer, an uncommitted session with and
without RESUME, a hang past a 1-minute limit (its child process killed
with it), and a session with no busy slot for 1 minute.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
From the combined Ornith guidance (§8.2), checked against OpenCode
1.18.30's schema and permission docs (last matching rule wins). Reads
and edits outside the repository are denied, except OpenCode's own
tool-output and temporary directories; web access, questions, subagents
and doom-loop prompts are denied; edits to AGENTS.md, CLAUDE.md,
opencode.json, the design documents, specs, plans and tools/ are denied;
shell commands are allowed except push, reset, rebase, amend, switch,
checkout, find /, locate, sudo, rm -rf / and curl/wget. A denied call
continues the loop (experimental.continue_loop_on_deny, untested with
Ornith). steps = 400 is a backstop. No custom prompt: OpenCode already
reads AGENTS.md, and a prompt may replace its tool guidance.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Owner's rule. The implementer often cannot know which model it is, so
run-plan.sh derives the name from OPENCODE_MODEL (the part after the
provider), gives the exact trailer and the Model column's value in the
session prompt, and stops the run when a task's commit lacks that exact
line. AGENTS.md replaces the old Implemented-By trailer and the "owner
fills in the model" rule.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>