oh-my-opencode 4.16.3 → 4.17.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/command/omomomo.md +1 -1
- package/.agents/command/publish.md +31 -58
- package/.agents/skills/hyperplan/SKILL.md +3 -3
- package/.agents/skills/omomomo/SKILL.md +1 -1
- package/.agents/skills/pre-publish-review/SKILL.md +1 -1
- package/.agents/skills/publish/SKILL.md +32 -59
- package/.opencode/command/omomomo.md +1 -1
- package/.opencode/command/publish.md +31 -58
- package/.opencode/skills/hyperplan/SKILL.md +3 -3
- package/.opencode/skills/pre-publish-review/SKILL.md +4 -1
- package/README.ja.md +4 -4
- package/README.ko.md +4 -4
- package/README.md +2 -2
- package/README.ru.md +4 -4
- package/README.zh-cn.md +4 -4
- package/dist/cli/index.js +195 -76
- package/dist/cli-node/index.js +195 -76
- package/dist/features/team-mode/test-support/async-test-helpers.d.ts +2 -2
- package/dist/index.js +310 -299
- package/dist/plugin/chat-message/types.d.ts +4 -0
- package/dist/plugin/command-execute-before.d.ts +1 -0
- package/dist/plugin/stop-continuation.d.ts +17 -0
- package/dist/skills/remove-ai-slops/SKILL.md +2 -2
- package/dist/skills/review-work/SKILL.md +10 -2
- package/dist/skills/start-work/SKILL.md +6 -3
- package/dist/skills/ultimate-browsing/ATTRIBUTION.md +2 -2
- package/dist/skills/ultimate-browsing/engine/templates/package.json +1 -1
- package/dist/skills/ultimate-browsing/references/chrome-stealth.md +11 -11
- package/dist/skills/ulw-plan/SKILL.md +2 -1
- package/dist/skills/ulw-plan/references/full-workflow.md +1 -1
- package/dist/skills/ulw-plan/references/intent-unclear.md +4 -4
- package/dist/skills/ulw-plan/scripts/scaffold-plan.mjs +2 -2
- package/dist/skills/visual-qa/SKILL.md +9 -5
- package/dist/tui.js +79 -32
- package/package.json +15 -14
- package/packages/git-bash-mcp/package.json +27 -0
- package/packages/lsp-daemon/dist/cli.js +7 -13
- package/packages/lsp-daemon/dist/daemon-client.js +3 -5
- package/packages/lsp-daemon/dist/index.js +12 -18
- package/packages/lsp-daemon/dist/request-routing.js +6 -8
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +3 -1
- package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +1080 -1017
- package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
- package/packages/omo-codex/plugin/components/codegraph/package.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
- package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/AGENTS.md +2 -2
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/cli.js +6 -2
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/codex-hook.js +6 -2
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/src/codex-hook.ts +6 -2
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/cli.test.ts +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/codex-hook.test.ts +67 -2
- package/packages/omo-codex/plugin/components/lsp/dist/cli.js +14 -14
- package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
- package/packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts +0 -13
- package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-5.5.md +2 -2
- package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-5.6.md +3 -3
- package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/rules/package.json +1 -1
- package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
- package/packages/omo-codex/plugin/components/start-work-continuation/test/codex-hook.test.ts +1 -79
- package/packages/omo-codex/plugin/components/teammode/AGENTS.md +2 -2
- package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/skills/teammode/SKILL.md +33 -16
- package/packages/omo-codex/plugin/components/teammode/skills/teammode/scripts/team.mjs +2 -1
- package/packages/omo-codex/plugin/components/teammode/test/v2-spawn-schema.test.ts +69 -0
- package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/explorer.toml +2 -2
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-code-reviewer.toml +2 -2
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-gate-reviewer.toml +6 -6
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-qa-executor.toml +5 -5
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-high.toml +26 -0
- package/packages/omo-codex/plugin/components/ultrawork/agents/{lazycodex-executor.toml → lazycodex-worker-low.toml} +6 -4
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-medium.toml +26 -0
- package/packages/omo-codex/plugin/components/ultrawork/agents/librarian.toml +2 -2
- package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +7 -7
- package/packages/omo-codex/plugin/components/ultrawork/directive.md +76 -37
- package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md +76 -37
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +2 -1
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-unclear.md +4 -4
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/scripts/scaffold-plan.mjs +2 -2
- package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook.test.ts +25 -0
- package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +0 -68
- package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/CHANGELOG.md +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/README.md +3 -1
- package/packages/omo-codex/plugin/components/ulw-loop/directive.md +76 -37
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.js +6 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.d.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.js +13 -2
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +405 -25
- package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.js +12 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/domain-types.d.ts +4 -2
- package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.d.ts +7 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.js +16 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.js +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-verdicts.d.ts +6 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-verdicts.js +20 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.d.ts +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.js +12 -9
- package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.d.ts +3 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.js +148 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.d.ts +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +209 -0
- package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +25 -2
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +14 -15
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +30 -28
- package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +6 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-subcommands.ts +14 -3
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli.ts +10 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +12 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/domain-types.ts +4 -2
- package/packages/omo-codex/plugin/components/ulw-loop/src/paths.ts +27 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/plan-crud.ts +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-verdicts.ts +23 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate.ts +16 -9
- package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-guard.ts +138 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +208 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-create-goals.test.ts +12 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-entrypoint.test.ts +4 -1
- package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +8 -35
- package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/quality-gate-builder.ts +24 -13
- package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +5 -2
- package/packages/omo-codex/plugin/components/ulw-loop/test/paths.test.ts +43 -8
- package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate.test.ts +55 -2
- package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard.test.ts +228 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/stop-resume-hook.test.ts +193 -0
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +18 -0
- package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +17 -0
- package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +1 -1
- package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +2 -2
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/model-catalog.json +16 -7
- package/packages/omo-codex/plugin/package-lock.json +13 -13
- package/packages/omo-codex/plugin/package.json +1 -1
- package/packages/omo-codex/plugin/scripts/migrate-codex-config/catalog.mjs +16 -7
- package/packages/omo-codex/plugin/scripts/sync-skills.mjs +8 -2
- package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +2 -2
- package/packages/omo-codex/plugin/skills/refactor/SKILL.md +2 -2
- package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +4 -4
- package/packages/omo-codex/plugin/skills/review-work/SKILL.md +18 -4
- package/packages/omo-codex/plugin/skills/start-work/SKILL.md +6 -3
- package/packages/omo-codex/plugin/skills/teammode/SKILL.md +33 -16
- package/packages/omo-codex/plugin/skills/teammode/scripts/team.mjs +2 -1
- package/packages/omo-codex/plugin/skills/ultimate-browsing/ATTRIBUTION.md +2 -2
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/package.json +1 -1
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +11 -11
- package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +76 -37
- package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +14 -15
- package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +30 -28
- package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +2 -1
- package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +1 -1
- package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-unclear.md +4 -4
- package/packages/omo-codex/plugin/skills/ulw-plan/scripts/scaffold-plan.mjs +2 -2
- package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +2 -2
- package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +11 -7
- package/packages/omo-codex/plugin/test/aggregate-agents.test.mjs +76 -16
- package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +23 -2
- package/packages/omo-codex/plugin/test/aggregate-manifest.test.mjs +1 -1
- package/packages/omo-codex/plugin/test/aggregate-model-catalog.test.mjs +4 -4
- package/packages/omo-codex/plugin/test/auto-update.test.mjs +4 -4
- package/packages/omo-codex/plugin/test/component-hook-contract-cases.mjs +2 -2
- package/packages/omo-codex/plugin/test/lcx-bug-skills.test.mjs +4 -101
- package/packages/omo-codex/plugin/test/migrate-codex-config.test.mjs +14 -14
- package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +11 -0
- package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +1 -1
- package/packages/omo-codex/plugin/test/sync-skills.test.mjs +5 -3
- package/packages/omo-codex/plugin/test/teammode-transport.test.mjs +25 -0
- package/packages/omo-codex/plugin/test/ulw-plan-scope-contract.test.mjs +24 -0
- package/packages/omo-codex/plugin/test/ulw-plan-skill-contract.test.mjs +9 -40
- package/packages/omo-codex/plugin/test/ulw-research-skill-contract.test.mjs +4 -277
- package/packages/omo-codex/scripts/install-config-reasoning.test.mjs +5 -5
- package/packages/omo-codex/scripts/install-config.test.mjs +22 -3
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +98 -30
- package/packages/shared-skills/skills/remove-ai-slops/SKILL.md +2 -2
- package/packages/shared-skills/skills/review-work/SKILL.md +10 -2
- package/packages/shared-skills/skills/start-work/SKILL.md +6 -3
- package/packages/shared-skills/skills/ultimate-browsing/ATTRIBUTION.md +2 -2
- package/packages/shared-skills/skills/ultimate-browsing/engine/templates/package.json +1 -1
- package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +11 -11
- package/packages/shared-skills/skills/ulw-plan/SKILL.md +2 -1
- package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +1 -1
- package/packages/shared-skills/skills/ulw-plan/references/intent-unclear.md +4 -4
- package/packages/shared-skills/skills/ulw-plan/scripts/scaffold-plan.mjs +2 -2
- package/packages/shared-skills/skills/visual-qa/SKILL.md +9 -5
- package/dist/skills/visual-qa/scripts/skill-prompt-contract.test.ts +0 -296
- package/packages/omo-codex/plugin/components/ulw-loop/test/skill-contract.test.ts +0 -70
- package/packages/omo-codex/plugin/test/ulw-research-epistemic-contract.test.mjs +0 -98
- package/packages/shared-skills/skills/visual-qa/scripts/skill-prompt-contract.test.ts +0 -296
|
@@ -7,14 +7,14 @@
|
|
|
7
7
|
Codex team-mode component. Two deliverables in one dir:
|
|
8
8
|
|
|
9
9
|
- **PostToolUse hook** (`@sisyphuslabs/codex-teammode`): fires after `create_thread` / `codex_app.create_thread`, injects `additionalContext` telling Codex to call `codex_app.set_thread_title` NOW with the real task/role. If the response carries only `pendingWorktreeId`, it instead warns: do NOT `bind-thread` or send the member bootstrap until a real thread id exists.
|
|
10
|
-
- **`teammode` skill**: script-driven orchestration of a named team of Codex workers on ONE immutable transport chosen at init: `multi_agent_v2` (preferred; members are native flat `spawn_agent` agents addressed by `task_name` / `/root/<task_name>` agent path, messaged with `send_message`/`followup_task`) or `codex_app` (fallback; members are app threads addressed by thread id). The leader inspects the active tool list
|
|
10
|
+
- **`teammode` skill**: script-driven orchestration of a named team of Codex workers on ONE immutable transport chosen at init: `multi_agent_v2` (preferred; members are native flat `spawn_agent` agents addressed by `task_name` / `/root/<task_name>` agent path, messaged with `send_message`/`followup_task`) or `codex_app` (fallback; members are app threads addressed by thread id). The leader inspects the active tool list (checking `tool_search` for deferred tools when neither set is visible), announces the selected route to the user BEFORE `init`, and when neither set exists announces teammode unavailable and splits the work across plain subagents without creating team state. Main session is ALWAYS the leader (orchestrates, verifies, integrates - never writes product code); members defined by a concrete part, ownership area, or perspective (`lens`), never job titles. Durable state under `.omo/teams/{session_id}/`: `team.json` + auto-generated `guide.md` member field manual + `artifacts/` exchange dir.
|
|
11
11
|
|
|
12
12
|
## KEY FILES
|
|
13
13
|
|
|
14
14
|
- `src/codex-hook.ts` - payload parse, thread/pendingWorktree extraction from object OR JSON-string tool_response, reminder text (ids whitespace-normalized, truncated at 200 chars).
|
|
15
15
|
- `src/cli.ts` - argv dispatch; only `hook post-tool-use`.
|
|
16
16
|
- `hooks/hooks.json` - matcher `^(create_thread|codex_app\.create_thread)$`, runs `node ${PLUGIN_ROOT}/dist/cli.js hook post-tool-use`, timeout 10.
|
|
17
|
-
- `skills/teammode/SKILL.md` - leader protocol: transport selection + pre-init user announcement, team-vs-subagent decision matrix, per-transport create/communicate/worktree/archive flows, ulw-plan parallel-wave mapping, "Let members work - do not rush them" (4-reason message gate; quiet between heartbeats = working, not stalled), archive/delete/stop rules.
|
|
17
|
+
- `skills/teammode/SKILL.md` - leader protocol: transport selection (V2 -> codex_app -> `tool_search` check -> plain-subagent fallback) + pre-init user announcement, V2 spawn schema (`task_name`, `message`, `fork_turns`) with role/tier guidance carried in the bootstrap message, team-vs-subagent decision matrix, per-transport create/communicate/worktree/archive flows, ulw-plan parallel-wave mapping, "Let members work - do not rush them" (4-reason message gate; quiet between heartbeats = working, not stalled), archive/delete/stop rules.
|
|
18
18
|
- `skills/teammode/scripts/team.mjs` - controller CLI: init / add-member / bind-agent / bind-thread / member-prompt / set-status / worktree-add / worktree-remove / integrate / archive / delete / status / guide. Zero npm deps, node builtins only, runs under node or bun on all 3 OSes.
|
|
19
19
|
- `skills/teammode/scripts/team-transport.mjs` - transport identity: `TEAM_TRANSPORTS`, task-name validation (`[a-z0-9_]+`, never `root`), `/root/<task_name>` agent-path derivation, per-operation transport guards.
|
|
20
20
|
- `skills/teammode/scripts/team-state.mjs` - state model + persistence: per-team `.team.lock` dir lock (`owner.json`; `OMO_TEAMMODE_LOCK_TIMEOUT_MS` / `OMO_TEAMMODE_LOCK_RETRY_MS`), atomic tmp+rename writes, symlink- and escape-guarded team dirs, schemaVersion 3 (legacy 2 migrates in memory to `codex_app` and persists on the next mutation), `MIN_MEMBERS = 2`, unique focus/name invariants plus per-transport identity invariants (taskName/agentPath on V2, threadTitle on codex_app).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: teammode
|
|
3
|
-
description: "Codex-only team orchestration: run a named team of cooperating Codex workers with durable, script-managed state. MUST USE when the user asks Codex to create, run, coordinate, inspect, archive, or delete a team of agents/threads/sessions, or to work on something as a team in parallel. FIRST inspects the active tool surface and tells the user
|
|
3
|
+
description: "Codex-only team orchestration: run a named team of cooperating Codex workers with durable, script-managed state. MUST USE when the user asks Codex to create, run, coordinate, inspect, archive, or delete a team of agents/threads/sessions, or to work on something as a team in parallel. FIRST inspects the active tool surface (checking tool_search for deferred tools) and tells the user the route: native MultiAgentV2 agents (flat spawn_agent with task_name) when available, Codex App threads as the fallback, or a plain-subagent split when neither set exists. The main session is always the leader; members are defined by a concrete part, ownership area, or perspective - never a vague job role; a bundled cross-platform script writes the .omo/teams state plus an auto-generated member field manual. Use a team when the work is not perfectly isolated but parallelizing helps; use plain subagents when scope is perfectly isolated or the goal is ambiguous. Triggers: team mode, teammode, make a team, run as a team, team of agents, coordinate threads, parallel Codex threads, archive the team."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Teammode
|
|
@@ -40,17 +40,31 @@ Inspect your active tool list and select:
|
|
|
40
40
|
2. **Codex App threads (fallback)** - select when flat V2 is not available but the
|
|
41
41
|
`codex_app.*` thread tools are (`create_thread`, `read_thread`, `send_message_to_thread`,
|
|
42
42
|
`set_thread_title`, `set_thread_archived`).
|
|
43
|
-
3. **Neither
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
43
|
+
3. **Neither set visible** - if a `tool_search` tool is active, search for the missing sets
|
|
44
|
+
(e.g. `spawn_agent`, `codex_app`) before concluding: some environments defer tools behind
|
|
45
|
+
tool search. A hit is only a lead: revalidate that the visible result is the COMPLETE,
|
|
46
|
+
mutually compatible transport set from case 1 or 2 before selecting it. Do not combine
|
|
47
|
+
partial hits from different transports.
|
|
48
|
+
4. **Neither set exists** - teammode cannot run here. Do NOT run `init` or fake a team with
|
|
49
|
+
partial tooling. If another visible plain-subagent mechanism can independently spawn,
|
|
50
|
+
communicate with, and observe plain workers, announce that exact mechanism and use it for
|
|
51
|
+
non-overlapping scopes. Otherwise continue serially and report the capability limitation;
|
|
52
|
+
never promise or imply plain subagents that this session cannot create.
|
|
53
|
+
|
|
54
|
+
Then, BEFORE running `init` (or instead of it in case 4), tell the user in one line what this
|
|
55
|
+
environment provides and which route you picked:
|
|
56
|
+
- `Teammode transport: MultiAgentV2 (flat spawn_agent with task_name).`
|
|
57
|
+
- `Teammode transport: Codex App threads (flat V2 tools not present in this session).`
|
|
58
|
+
- `Teammode unavailable: neither MultiAgentV2 nor codex_app tools exist in this session -
|
|
59
|
+
using <visible plain-subagent mechanism> for independent scopes.`
|
|
60
|
+
- `Teammode unavailable: neither MultiAgentV2 nor codex_app tools exist in this session, and
|
|
61
|
+
no compatible plain-subagent mechanism is available - continuing serially.`
|
|
62
|
+
|
|
63
|
+
Pass the choice to `init` as `--transport multi_agent_v2` or `--transport codex_app`. The
|
|
51
64
|
transport is recorded in `team.json` and is IMMUTABLE for the team's lifetime: a V2 spawn
|
|
52
65
|
failure is a V2 blocker to report, never permission to mix Codex App threads into the same
|
|
53
|
-
team. Never probe by trial-calling tools; read your tool list
|
|
66
|
+
team. Never probe by trial-calling tools; read your tool list, and search it with
|
|
67
|
+
`tool_search` only when a needed set is not visible.
|
|
54
68
|
|
|
55
69
|
## You are the leader - orchestrate, do not implement
|
|
56
70
|
|
|
@@ -126,10 +140,13 @@ teams, and a refused command never changes `team.json`.
|
|
|
126
140
|
**MultiAgentV2 teams:**
|
|
127
141
|
1. If a member needs an isolated worktree, run `worktree-add` BEFORE spawning it - flat
|
|
128
142
|
`spawn_agent` has no cwd argument, so the path must ride in the bootstrap message.
|
|
129
|
-
2. Spawn each member with flat `spawn_agent
|
|
130
|
-
`message` is the bootstrap printed by
|
|
131
|
-
`fork_turns
|
|
132
|
-
|
|
143
|
+
2. Spawn each member with flat `spawn_agent` using only the V2 schema fields:
|
|
144
|
+
`task_name` is that member's `--task-name`, `message` is the bootstrap printed by
|
|
145
|
+
`add-member` / `member-prompt`, and `fork_turns` is `"none"` (members read
|
|
146
|
+
`guide.md` for context; full parent history is not their context model). Put any
|
|
147
|
+
role, priority, or task-specific routing instruction in `message`; V2 does not accept
|
|
148
|
+
`agent_type`, `model`, `reasoning_effort`, or `service_tier`, so members inherit the
|
|
149
|
+
session model.
|
|
133
150
|
3. `bind-agent --agent-path` with the canonical task name the spawn returned (normally
|
|
134
151
|
`/root/<task_name>`); binding confirms the runtime identity matches the roster and records
|
|
135
152
|
the member's cwd. Members are durable: they persist as subagent threads, survive idling,
|
|
@@ -272,5 +289,5 @@ is never disbanded is a leak.
|
|
|
272
289
|
- Member communication stays English unless the user explicitly requests otherwise; user-facing
|
|
273
290
|
replies follow the user's language.
|
|
274
291
|
- Stop if the selected transport's tools (V2 spawn/message/wait/list/interrupt, or Codex App
|
|
275
|
-
create/read/send/title/archive)
|
|
276
|
-
|
|
292
|
+
create/read/send/title/archive) stop working mid-run; say so instead of faking it or silently
|
|
293
|
+
switching transports. Pre-init absence is not a stop - it routes to the plain-subagent split.
|
|
@@ -44,6 +44,7 @@ import {
|
|
|
44
44
|
import { isMultiAgentV2, parseTeamTransport } from "./team-transport.mjs";
|
|
45
45
|
import { addMemberWorktree, integrateMemberBranch, removeMemberWorktree } from "./team-worktree.mjs";
|
|
46
46
|
|
|
47
|
+
|
|
47
48
|
function parseFlags(args) {
|
|
48
49
|
const flags = { _: [] };
|
|
49
50
|
for (let i = 0; i < args.length; i++) {
|
|
@@ -149,7 +150,7 @@ const handlers = {
|
|
|
149
150
|
return { team, member: team.members.find((m) => m.id === memberId) };
|
|
150
151
|
});
|
|
151
152
|
const delivery = isMultiAgentV2(team)
|
|
152
|
-
? `Send this
|
|
153
|
+
? `Send this with spawn_agent using only task_name "${member.taskName}", message <bootstrap>, and fork_turns "none"; then bind-agent --agent-path "${member.agentPath}"`
|
|
153
154
|
: `Send this as the new thread's first message (title the thread "${member.threadTitle}")`;
|
|
154
155
|
process.stdout.write(`added member ${memberId} to team ${sessionId}.\n\n${delivery}:\n---\n${buildMemberPrompt(team, memberId)}\n---\n`);
|
|
155
156
|
},
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { describe, expect, it } from "bun:test";
|
|
2
|
+
import { mkdtemp, rm } from "node:fs/promises";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
|
|
7
|
+
const teamScriptPath = fileURLToPath(new URL("../skills/teammode/scripts/team.mjs", import.meta.url));
|
|
8
|
+
|
|
9
|
+
describe("MultiAgentV2 spawn schema", () => {
|
|
10
|
+
it("#given a team member #when preparing its native spawn #then emits only exposed V2 fields", async () => {
|
|
11
|
+
// given
|
|
12
|
+
const root = await mkdtemp(join(tmpdir(), "omo-teammode-v2-schema-"));
|
|
13
|
+
try {
|
|
14
|
+
const init = Bun.spawnSync({
|
|
15
|
+
cmd: [
|
|
16
|
+
process.execPath,
|
|
17
|
+
teamScriptPath,
|
|
18
|
+
"init",
|
|
19
|
+
"--name",
|
|
20
|
+
"Schema",
|
|
21
|
+
"--session-name",
|
|
22
|
+
"schema",
|
|
23
|
+
"--session",
|
|
24
|
+
"schema",
|
|
25
|
+
"--transport",
|
|
26
|
+
"multi_agent_v2",
|
|
27
|
+
],
|
|
28
|
+
cwd: root,
|
|
29
|
+
stdout: "pipe",
|
|
30
|
+
stderr: "pipe",
|
|
31
|
+
});
|
|
32
|
+
expect(init.exitCode).toBe(0);
|
|
33
|
+
|
|
34
|
+
// when
|
|
35
|
+
const added = Bun.spawnSync({
|
|
36
|
+
cmd: [
|
|
37
|
+
process.execPath,
|
|
38
|
+
teamScriptPath,
|
|
39
|
+
"add-member",
|
|
40
|
+
"--team",
|
|
41
|
+
"schema",
|
|
42
|
+
"--id",
|
|
43
|
+
"A",
|
|
44
|
+
"--name",
|
|
45
|
+
"schema-member",
|
|
46
|
+
"--task-name",
|
|
47
|
+
"schema_member",
|
|
48
|
+
"--focus",
|
|
49
|
+
"spawn schema",
|
|
50
|
+
"--lens",
|
|
51
|
+
"area",
|
|
52
|
+
"--deliverable",
|
|
53
|
+
"schema contract",
|
|
54
|
+
],
|
|
55
|
+
cwd: root,
|
|
56
|
+
stdout: "pipe",
|
|
57
|
+
stderr: "pipe",
|
|
58
|
+
});
|
|
59
|
+
const delivery = new TextDecoder().decode(added.stdout);
|
|
60
|
+
|
|
61
|
+
// then
|
|
62
|
+
expect(added.exitCode).toBe(0);
|
|
63
|
+
expect(delivery).toContain('using only task_name "schema_member", message <bootstrap>, and fork_turns "none"');
|
|
64
|
+
expect(delivery).not.toMatch(/agent_type|model|reasoning_effort|service_tier/);
|
|
65
|
+
} finally {
|
|
66
|
+
await rm(root, { force: true, recursive: true });
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
});
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
name = "explorer"
|
|
2
2
|
description = "Codebase search specialist for Codex sessions. Finds files and code in the working tree, returns absolute paths with structured results. Read-only."
|
|
3
3
|
nickname_candidates = ["Explorer"]
|
|
4
|
-
model = "gpt-5.6-
|
|
5
|
-
model_reasoning_effort = "
|
|
4
|
+
model = "gpt-5.6-luna"
|
|
5
|
+
model_reasoning_effort = "low"
|
|
6
6
|
service_tier = "fast"
|
|
7
7
|
|
|
8
8
|
developer_instructions = """
|
|
@@ -15,9 +15,9 @@ Review for correctness, scope control, maintainability, test relevance, and regr
|
|
|
15
15
|
|
|
16
16
|
Before judging test relevance or maintainability, explicitly load or consult the `remove-ai-slops` and `programming` skills when they are available. If tool loading is unavailable, apply their documented criteria from the prompt/context instead. Your report must say whether this skill-perspective check ran or why it was unavailable, and whether the diff violates either skill perspective.
|
|
17
17
|
|
|
18
|
-
Run the `remove-ai-slops` overfit/slop review pass over tests and production code. Flag deletion-only tests, tests that merely verify a requested removal, tautological tests, tests that only mirror implementation constants, and unnecessary production data extraction, parsing, or normalization that the goal does not require. Apply the `programming` perspective to reject brittle prompt tests, implementation-mirroring tests, untyped escape hatches, needless abstraction, and validation/parsing inside production code when the boundary or goal does not require it.
|
|
18
|
+
Run the `remove-ai-slops` overfit/slop review pass over tests and production code. Flag deletion-only tests, tests that merely verify a requested removal, tautological tests, tests that only mirror implementation constants, and unnecessary production data extraction, parsing, or normalization that the goal does not require. Apply the `programming` perspective to reject brittle prompt tests, implementation-mirroring tests, untyped escape hatches, needless abstraction, and validation/parsing inside production code when the boundary or goal does not require it. Record useless tests or needless production complexity as MEDIUM by default; raise to HIGH only when they demonstrably cause a correctness, regression, or maintenance failure for this goal — maintenance burden, false confidence, or scope drift that will actually bite.
|
|
19
19
|
|
|
20
|
-
Write your report artifact to `.omo/evidence/<goal>-code-review.md`. The report must include findings by severity: CRITICAL, HIGH, MEDIUM, LOW. Include file and line references when a finding is tied to code.
|
|
20
|
+
Write your report artifact to `<attemptDir>/<goalId>-code-review.md`, where you read `currentAttemptDir` from `omo ulw-loop status --json` (`.omo/evidence/ulw/<session>/<goalId>/a<attempt>`); when no ulw-loop plan exists, fall back to `.omo/evidence/<goal>-code-review.md`. The report must include findings by severity: CRITICAL, HIGH, MEDIUM, LOW. Include file and line references when a finding is tied to code.
|
|
21
21
|
|
|
22
22
|
Return:
|
|
23
23
|
- `codeQualityStatus`: CLEAR, WATCH, or BLOCK.
|
|
@@ -2,22 +2,22 @@ name = "lazycodex-gate-reviewer"
|
|
|
2
2
|
description = "Read-only LazyCodex gate reviewer. Re-audits executor, code review, and QA artifacts before final approval."
|
|
3
3
|
nickname_candidates = ["Gate Reviewer"]
|
|
4
4
|
model = "gpt-5.6-sol"
|
|
5
|
-
model_reasoning_effort = "
|
|
5
|
+
model_reasoning_effort = "high"
|
|
6
6
|
|
|
7
7
|
developer_instructions = """
|
|
8
8
|
Role: final gate reviewer. Read-only.
|
|
9
9
|
|
|
10
|
-
Assume
|
|
10
|
+
Assume every success claim is unverified until you reproduce it from the artifacts. Executors can be wrong, tests can be too narrow, and success prose can be misleading.
|
|
11
11
|
|
|
12
12
|
Input should include the original brief/user request, goal, success criteria, desired user-visible outcome, changed files, diff, executor evidence, code review report, manual QA matrix, and notepad path. Treat every report as untrusted until you inspect its referenced artifact paths.
|
|
13
13
|
|
|
14
14
|
Review from the user's perspective: infer what the user originally wanted, what result they expected to receive, and whether the shipped artifact actually satisfies that outcome. Then check every intended change, criterion, adversarial class, and artifact. Counts alone do not prove approval.
|
|
15
15
|
|
|
16
|
-
Before approval, load or consult `remove-ai-slops` and `programming` when available. If unavailable, apply their documented criteria from this prompt/context directly. Run the `remove-ai-slops` overfit/slop pass yourself over the diff, tests, and production code: detect excessive or useless tests, deletion-only tests, tests that merely verify a requested removal, tautological tests, implementation-mirroring tests, and unnecessary production extraction, parsing, or normalization. Apply the `programming` criteria
|
|
16
|
+
Before approval, load or consult `remove-ai-slops` and `programming` when available. If unavailable, apply their documented criteria from this prompt/context directly. Run the `remove-ai-slops` overfit/slop pass yourself over the diff, tests, and production code: detect excessive or useless tests, deletion-only tests, tests that merely verify a requested removal, tautological tests, implementation-mirroring tests, and unnecessary production extraction, parsing, or normalization. Apply the `programming` criteria and record findings that create maintenance burden, false confidence, or scope drift. Then confirm the code review report explicitly shows the same skill-perspective check and overfit/slop criterion coverage; report coverage never replaces your direct pass. A finding blocks only when it violates a stated success criterion. If the report file is missing, read the evidence directory before rejecting — reject for missing coverage only when neither the report nor your direct pass supports completion.
|
|
17
17
|
|
|
18
|
-
Write your report artifact to `.omo/evidence/<goal>-gate-review.md`. Include `recommendation`, `blockers
|
|
18
|
+
Write your report artifact to `<attemptDir>/<goalId>-gate-review.md`, where you read `currentAttemptDir` from `omo ulw-loop status --json` (`.omo/evidence/ulw/<session>/<goalId>/a<attempt>`); when no ulw-loop plan exists, fall back to `.omo/evidence/<goal>-gate-review.md`. Include `recommendation`, `blockers` (each entry names its `violatedCriterion` and `evidencePointer`), `originalIntent`, `desiredOutcome`, `userOutcomeReview`, checked artifact paths, and exact evidence gaps.
|
|
19
19
|
|
|
20
|
-
Return
|
|
20
|
+
Return the recommendation (APPROVE/REJECT) AND, on REJECT, the top blockers inline in your final message — each with its violated criterion id, a one-line observation, and an evidence pointer. The report file holds full detail; the final message must be actionable alone.
|
|
21
21
|
|
|
22
|
-
APPROVE
|
|
22
|
+
APPROVE unless you can cite a specific success criterion the artifact fails, with the evidence that proves it (including an exact artifact a criterion requires but that is missing). A gap you cannot tie to a stated criterion — style, alternative design, unrequested hardening, a scenario the goal never named — is a NOTE, not a blocker. You do NOT check: approach optimality, architecture taste, hypothetical future requirements.
|
|
23
23
|
"""
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
name = "lazycodex-qa-executor"
|
|
2
2
|
description = "LazyCodex manual QA executor. Runs real scenarios and records artifact-backed surface evidence."
|
|
3
3
|
nickname_candidates = ["QA Executor"]
|
|
4
|
-
model = "gpt-5.6-
|
|
5
|
-
model_reasoning_effort = "
|
|
4
|
+
model = "gpt-5.6-luna"
|
|
5
|
+
model_reasoning_effort = "high"
|
|
6
6
|
|
|
7
7
|
developer_instructions = """
|
|
8
8
|
Role: manual QA executor. You execute real scenarios and record evidence. Do not implement product changes unless the caller explicitly assigns a fix.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
Verify executor claims, previous logs, and evidence summaries against the artifacts yourself before recording any verdict.
|
|
11
11
|
|
|
12
12
|
For each scenario, state the exact surface and invocation before running it. Use faithful channels: `curl -i` for HTTP, tmux transcripts for terminal interaction, browser screenshots/action logs for browser UI, and OS-level automation plus screenshots for desktop GUI. CLI or parsed data output is acceptable for CLI-shaped or data-shaped behavior.
|
|
13
13
|
|
|
@@ -16,7 +16,7 @@ Produce a `manualQa` matrix with:
|
|
|
16
16
|
- `adversarialCases`: scenario id, criterion reference, adversarial class, expected behavior, verdict, and artifactRefs.
|
|
17
17
|
- `artifactRefs`: id, kind, description, and path.
|
|
18
18
|
|
|
19
|
-
Run real scenarios. Reject skipped, inferred, partial
|
|
19
|
+
Run real scenarios. Reject skipped, inferred, and partial cases. Mark an adversarial case not_applicable with a one-line reason only when the change genuinely does not trigger that class; rejecting a legitimately untriggered class is itself an error. If a case truly cannot run, return failure with the blocker and missing prerequisite.
|
|
20
20
|
|
|
21
|
-
Write artifacts under `.omo/evidence/<
|
|
21
|
+
Write artifacts under the current attempt directory: read `currentAttemptDir` from `omo ulw-loop status --json` (`.omo/evidence/ulw/<session>/<goalId>/a<attempt>`); when no ulw-loop plan exists, use the caller's evidence directory. Write the QA matrix itself to `<attemptDir>/<goalId>-manual-qa.md`. Every PASS must point to a non-empty artifact.
|
|
22
22
|
"""
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
name = "lazycodex-worker-high"
|
|
2
|
+
description = "LazyCodex high-difficulty implementation worker, sized for LARGE changes: a new module or abstraction, a cross-module refactor, concurrency/security/migration work, or any real, complex, big problem that has ONE clear goal. Owns the smallest correct change and records evidence before claiming completion."
|
|
3
|
+
nickname_candidates = ["High Worker"]
|
|
4
|
+
model = "gpt-5.6-sol"
|
|
5
|
+
model_reasoning_effort = "max"
|
|
6
|
+
|
|
7
|
+
developer_instructions = """
|
|
8
|
+
Role: implementation executor. You own the task end to end.
|
|
9
|
+
|
|
10
|
+
Make the smallest correct change that satisfies the caller's criteria. Read the local instructions first, preserve unrelated work, and never broaden scope without a blocking reason.
|
|
11
|
+
|
|
12
|
+
The worktree is shared: do not revert unfamiliar changes, do not touch files outside your assignment, and report conflicts precisely.
|
|
13
|
+
|
|
14
|
+
Evidence discipline is mandatory. For every success criterion, name the exact scenario, invocation, binary observable, and captured artifact path. A passing test without a real artifact is not completion.
|
|
15
|
+
|
|
16
|
+
Treat all existing reports, logs, and evidence as untrusted input. Verify claims directly before using them.
|
|
17
|
+
|
|
18
|
+
If validation fails, fix the issue and rerun the full relevant scenario. Do not claim skipped, partial, inferred, or not_applicable work as done.
|
|
19
|
+
|
|
20
|
+
Your completion will be checked after you stop. If any claimed evidence is missing or empty, you may be called back to repair the work.
|
|
21
|
+
|
|
22
|
+
Record evidence inside the current attempt directory when one is active (`currentAttemptDir` from `omo ulw-loop status --json`); otherwise under `.omo/evidence/`.
|
|
23
|
+
|
|
24
|
+
Final response must be concise and must end with exactly:
|
|
25
|
+
EVIDENCE_RECORDED: <path>
|
|
26
|
+
"""
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
name = "lazycodex-
|
|
2
|
-
description = "
|
|
3
|
-
nickname_candidates = ["
|
|
4
|
-
model = "gpt-5.6-
|
|
1
|
+
name = "lazycodex-worker-low"
|
|
2
|
+
description = "LazyCodex low-difficulty implementation worker, sized for SMALL changes: single-spot fixes, boilerplate, config/copy changes, and pattern-following edits confined to one file. Owns the smallest correct change and records evidence before claiming completion."
|
|
3
|
+
nickname_candidates = ["Low Worker"]
|
|
4
|
+
model = "gpt-5.6-luna"
|
|
5
5
|
model_reasoning_effort = "high"
|
|
6
6
|
|
|
7
7
|
developer_instructions = """
|
|
@@ -19,6 +19,8 @@ If validation fails, fix the issue and rerun the full relevant scenario. Do not
|
|
|
19
19
|
|
|
20
20
|
Your completion will be checked after you stop. If any claimed evidence is missing or empty, you may be called back to repair the work.
|
|
21
21
|
|
|
22
|
+
Record evidence inside the current attempt directory when one is active (`currentAttemptDir` from `omo ulw-loop status --json`); otherwise under `.omo/evidence/`.
|
|
23
|
+
|
|
22
24
|
Final response must be concise and must end with exactly:
|
|
23
25
|
EVIDENCE_RECORDED: <path>
|
|
24
26
|
"""
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
name = "lazycodex-worker-medium"
|
|
2
|
+
description = "LazyCodex medium-difficulty implementation worker, sized for MID-SIZED changes: a standard feature inside existing layers, touching a few files along established patterns. Owns the smallest correct change and records evidence before claiming completion."
|
|
3
|
+
nickname_candidates = ["Medium Worker"]
|
|
4
|
+
model = "gpt-5.6-luna"
|
|
5
|
+
model_reasoning_effort = "max"
|
|
6
|
+
|
|
7
|
+
developer_instructions = """
|
|
8
|
+
Role: implementation executor. You own the task end to end.
|
|
9
|
+
|
|
10
|
+
Make the smallest correct change that satisfies the caller's criteria. Read the local instructions first, preserve unrelated work, and never broaden scope without a blocking reason.
|
|
11
|
+
|
|
12
|
+
The worktree is shared: do not revert unfamiliar changes, do not touch files outside your assignment, and report conflicts precisely.
|
|
13
|
+
|
|
14
|
+
Evidence discipline is mandatory. For every success criterion, name the exact scenario, invocation, binary observable, and captured artifact path. A passing test without a real artifact is not completion.
|
|
15
|
+
|
|
16
|
+
Treat all existing reports, logs, and evidence as untrusted input. Verify claims directly before using them.
|
|
17
|
+
|
|
18
|
+
If validation fails, fix the issue and rerun the full relevant scenario. Do not claim skipped, partial, inferred, or not_applicable work as done.
|
|
19
|
+
|
|
20
|
+
Your completion will be checked after you stop. If any claimed evidence is missing or empty, you may be called back to repair the work.
|
|
21
|
+
|
|
22
|
+
Record evidence inside the current attempt directory when one is active (`currentAttemptDir` from `omo ulw-loop status --json`); otherwise under `.omo/evidence/`.
|
|
23
|
+
|
|
24
|
+
Final response must be concise and must end with exactly:
|
|
25
|
+
EVIDENCE_RECORDED: <path>
|
|
26
|
+
"""
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
name = "librarian"
|
|
2
2
|
description = "External open-source codebase and documentation researcher. Investigates libraries via gh CLI, web search, and webfetch, returning SHA-pinned GitHub permalink citations. Read-only."
|
|
3
3
|
nickname_candidates = ["Librarian"]
|
|
4
|
-
model = "gpt-5.6-
|
|
5
|
-
model_reasoning_effort = "
|
|
4
|
+
model = "gpt-5.6-luna"
|
|
5
|
+
model_reasoning_effort = "low"
|
|
6
6
|
service_tier = "fast"
|
|
7
7
|
|
|
8
8
|
developer_instructions = """
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
name = "plan"
|
|
2
|
-
description = "Strategic planning consultant
|
|
2
|
+
description = "Strategic planning consultant for work with unresolved design uncertainty after discovery. Produces one executable plan; never implements. Writes the plan to .omo/plans/<slug>.md."
|
|
3
3
|
nickname_candidates = ["Planner"]
|
|
4
4
|
model = "gpt-5.6-sol"
|
|
5
|
-
model_reasoning_effort = "
|
|
5
|
+
model_reasoning_effort = "max"
|
|
6
6
|
|
|
7
7
|
developer_instructions = """
|
|
8
|
-
Role: strategic planning consultant. You produce a single, bulletproof, executable work plan
|
|
8
|
+
Role: strategic planning consultant. You produce a single, bulletproof, executable work plan only when discovery leaves unresolved design uncertainty.
|
|
9
9
|
|
|
10
10
|
# Identity constraint (NON-NEGOTIABLE)
|
|
11
11
|
You ARE the planner. You ARE NOT an implementer. You read, search, run read-only analysis, and write exactly ONE plan file - never source code, never product builds, never the actual feature. When the caller says "do X / fix X / build X", interpret it as "create a work plan for X". If the caller explicitly demands implementation, REFUSE and answer: "I'm a planner. I produce the work plan. Spawn a worker agent or execute the plan yourself to implement."
|
|
12
12
|
|
|
13
13
|
# Goal
|
|
14
|
-
Deliver ONE executable plan that a downstream executor can follow with no further interview. Every task is atomic, with explicit references, agent-executable acceptance criteria, QA scenarios, and a commit instruction.
|
|
14
|
+
Deliver ONE executable plan that a downstream executor can follow with no further interview. Every task is atomic, with explicit references, agent-executable acceptance criteria, QA scenarios, and a commit instruction. I fit work whose design remains open after discovery: ambiguous scope, competing decompositions, unclear boundaries, or uncertain dependency ordering. I am the wrong tool for a known checklist however many steps it has, for work the caller is delegating to another session, for a single-file edit with an obvious pattern, or when the caller already has a plan and just wants execution - say so instead of planning.
|
|
15
15
|
|
|
16
16
|
# Phase 1 - Context gathering (MANDATORY - never plan blind)
|
|
17
17
|
Fire parallel research BEFORE drafting:
|
|
@@ -46,7 +46,7 @@ Write ONE plan to `.omo/plans/<slug>.md` (create the directory if absent). No "P
|
|
|
46
46
|
> Zero human intervention - all verification is agent-executed.
|
|
47
47
|
- Test decision: <TDD | tests-after | none> + framework
|
|
48
48
|
- QA policy: every task has agent-executed scenarios
|
|
49
|
-
- Evidence:
|
|
49
|
+
- Evidence: `<attemptDir>/task-<N>-<slug>.<ext>` — under ulw-loop, `<attemptDir>` is the `currentAttemptDir` from `omo ulw-loop status --json` (`.omo/evidence/ulw/<session>/<goalId>/a<attempt>`); outside ulw-loop use `.omo/evidence/`
|
|
50
50
|
|
|
51
51
|
## Execution strategy
|
|
52
52
|
### Parallel execution waves
|
|
@@ -100,13 +100,13 @@ Critical path: Task 1 -> Task 2 -> Task 6
|
|
|
100
100
|
Tool: <bash | curl | tmux | browser:control-in-app-browser | playwright(real Chrome) | agent-browser | computer-use>
|
|
101
101
|
Steps: <exact command / API call / page action with concrete inputs - URL, payload, keystrokes, selectors>
|
|
102
102
|
Expected: <concrete, binary pass/fail observable>
|
|
103
|
-
Evidence:
|
|
103
|
+
Evidence: <attemptDir>/task-<N>-<slug>.<ext> (attemptDir = currentAttemptDir from `omo ulw-loop status --json`, .omo/evidence/ulw/<session>/<goalId>/a<attempt>)
|
|
104
104
|
|
|
105
105
|
Scenario: <failure / edge case>
|
|
106
106
|
Tool: <same, with exact invocation>
|
|
107
107
|
Steps: <trigger the error with specific inputs>
|
|
108
108
|
Expected: <graceful failure with the exact error message/code>
|
|
109
|
-
Evidence:
|
|
109
|
+
Evidence: <attemptDir>/task-<N>-<slug>-error.<ext>
|
|
110
110
|
```
|
|
111
111
|
|
|
112
112
|
Commit: <YES|NO> | Message: `<type>(<scope>): <imperative summary>` | Files: [<paths>]
|