@fro.bot/systematic 2.5.3 → 2.6.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/package.json +1 -1
- package/skills/ce-brainstorm/references/handoff.md +127 -0
- package/skills/ce-brainstorm/references/requirements-capture.md +243 -0
- package/skills/ce-brainstorm/references/universal-brainstorming.md +63 -0
- package/skills/ce-ideate/references/post-ideation-workflow.md +240 -0
- package/skills/ce-plan/references/deepening-workflow.md +249 -0
- package/skills/ce-plan/references/plan-handoff.md +96 -0
- package/skills/ce-plan/references/universal-planning.md +114 -0
- package/skills/ce-plan/references/visual-communication.md +31 -0
- package/skills/ce-work/references/shipping-workflow.md +129 -0
- package/skills/ce-work-beta/references/codex-delegation-workflow.md +327 -0
- package/skills/ce-work-beta/references/shipping-workflow.md +129 -0
- package/skills/document-review/references/synthesis-and-presentation.md +406 -0
- package/skills/proof/references/hitl-review.md +368 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Universal Planning Workflow
|
|
2
|
+
|
|
3
|
+
This file is loaded when ce-plan detects a non-software task (Phase 0.1b). It replaces the software-specific phases (0.2 through 5.1) with a domain-agnostic planning workflow.
|
|
4
|
+
|
|
5
|
+
## Before starting: verify classification
|
|
6
|
+
|
|
7
|
+
The detection stub in SKILL.md routes here for anything that isn't clearly software. Verify the classification is correct before proceeding:
|
|
8
|
+
|
|
9
|
+
- **Is this actually a software task?** The key distinction is task-type, not topic-domain. A study guide about Rust is non-software (producing educational content). A Rust library refactor is software (modifying code). If this is actually software, return to Phase 0.2 in the main SKILL.md.
|
|
10
|
+
- **Is this a quick-help request, not a planning task?** Error messages, factual questions, and single-step tasks don't need a plan. Respond directly and exit. Examples: "zsh: command not found: brew", "what's the capital of France."
|
|
11
|
+
- **Pipeline mode?** If invoked from LFG or any `disable-model-invocation` context: output "This is a non-software task. The LFG pipeline requires ce-work, which only supports software tasks. Use `/ce-plan` directly for non-software planning." and stop.
|
|
12
|
+
|
|
13
|
+
Once past these checks, commit to producing a plan. Do not exit because the task looks like a "lookup" or "research question" — the user invoked `ce-plan` because they want a structured output.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Step 1: Assess Ambiguity and Research Need
|
|
18
|
+
|
|
19
|
+
Evaluate two things before planning:
|
|
20
|
+
|
|
21
|
+
**Would 1-3 quick questions meaningfully improve this plan?**
|
|
22
|
+
|
|
23
|
+
- **Default: ask 1-3 questions** via Step 1b when the answers would change the plan's structure or content. Always include a final option like "Skip — just make the plan with reasonable assumptions" so the user can opt out instantly.
|
|
24
|
+
- **Skip questions entirely** only when the request already specifies all major variables or the task is simple enough that reasonable assumptions cover it well.
|
|
25
|
+
|
|
26
|
+
**Research need — does this plan depend on facts that change faster than training data?**
|
|
27
|
+
|
|
28
|
+
| Research need | Signals | Action |
|
|
29
|
+
|--------------|---------|--------|
|
|
30
|
+
| **None** | Generic, timeless, or conceptual plan (study curriculum methodology, project management approach, personal goal breakdown) | Skip research. Model knowledge is sufficient. After structuring the plan, offer: "I based this on general knowledge. Want me to search for [specific thing research would improve]?" — e.g., sourced recipes, current product recommendations, expert frameworks. Only if the user accepts. |
|
|
31
|
+
| **Recommended** | Plan references specific locations, venues, dates, prices, schedules, seasonal availability, or current events — anything where stale information would break the plan (closed restaurants, changed prices, cancelled events, wrong seasonal dates). | Research before planning. Decompose into 2-5 focused research questions and dispatch parallel web searches. In OpenCode, use the Agent tool with `model: "haiku"` for each search to reduce cost. Collate findings before structuring the plan. |
|
|
32
|
+
|
|
33
|
+
When research is recommended, do it — don't just offer. Stale recommendations (closed restaurants, rethemed attractions, outdated prices) are worse than no recommendations. The user invoked `/ce-plan` because they want a good plan, not a disclaimer about training data.
|
|
34
|
+
|
|
35
|
+
**Research decomposition pattern:**
|
|
36
|
+
1. Identify 2-5 independent research questions based on the task. Good questions target facts the model is least confident about: current prices, hours, availability, recent changes, seasonal specifics.
|
|
37
|
+
2. Dispatch parallel research. Prefer user-named surfaces first per Core Principle 8 in SKILL.md; fall back to web search for questions those surfaces don't cover.
|
|
38
|
+
3. Collate findings into a brief research summary before proceeding to planning.
|
|
39
|
+
|
|
40
|
+
Example for "plan a date night in Seattle this Saturday":
|
|
41
|
+
- "Best restaurants open late Saturday in Capitol Hill Seattle 2026"
|
|
42
|
+
- "Events happening in Seattle [specific date]"
|
|
43
|
+
- "Seattle waterfront current status and hours"
|
|
44
|
+
|
|
45
|
+
## Step 1b: Focused Q&A
|
|
46
|
+
|
|
47
|
+
Ask up to 3 questions targeting the unknowns that would most change the plan. Use the platform's blocking question tool: `question` in OpenCode (call `ToolSearch` with `select:question` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini, `ask_user` in Pi (requires the `pi-ask-user` extension). Fall back to numbered options in chat only when no blocking tool exists or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question.
|
|
48
|
+
|
|
49
|
+
**How to ask well:**
|
|
50
|
+
- Offer informed options, not open-ended blanks. Instead of "When are you going?", try "Mid-week visits have 30-40% shorter lines — are you flexible on timing?" The question should give the user a frame of reference, not just extract information.
|
|
51
|
+
- Use multi-select when several independent choices can be captured in one question. This is compact and respects the user's time.
|
|
52
|
+
- Always include a final option like **"Skip — just make the plan with reasonable assumptions"** so the user can opt out at any point.
|
|
53
|
+
|
|
54
|
+
Focus on the unknowns specific to this task that would change what the plan recommends or how it's structured. Do not ask more than 3 — after that, proceed with assumptions for anything remaining.
|
|
55
|
+
|
|
56
|
+
## Step 2: Structure the Plan
|
|
57
|
+
|
|
58
|
+
Create a structured plan guided by these quality principles. Do NOT use the software plan template (implementation units, test scenarios, file paths, etc.).
|
|
59
|
+
|
|
60
|
+
### Format: when to prescribe vs. present options
|
|
61
|
+
|
|
62
|
+
Not every plan should be a single linear path. Match the format to the task:
|
|
63
|
+
|
|
64
|
+
| Task type | Best format | Why |
|
|
65
|
+
|-----------|------------|-----|
|
|
66
|
+
| **High personal preference** (food, entertainment, activities, gifts) | Curated options per category — present 2-3 choices and let the user compose | Preferences vary; a single pick may miss. Options respect the user's taste. |
|
|
67
|
+
| **Logical sequence** (study plan, project timeline, multi-day trip logistics) | Single prescriptive path with clear ordering | Sequencing matters; options at each step create decision paralysis. |
|
|
68
|
+
| **Hybrid** (event with fixed structure but variable details) | Fixed structure with choice points marked | The skeleton is set but specific vendors/venues/activities are options. |
|
|
69
|
+
|
|
70
|
+
Example: A date night plan should present 2-3 restaurant options, 2-3 activity options, and a suggested flow — not pick one restaurant and build the whole evening around it. A study plan should prescribe a single weekly progression — not present 3 different curricula to choose from.
|
|
71
|
+
|
|
72
|
+
### Formatting: bullets over prose
|
|
73
|
+
|
|
74
|
+
- Prefer bullets and tables for actionable content (steps, options, logistics, budgets)
|
|
75
|
+
- Use prose only for context, rationale, or explanations that connect the dots
|
|
76
|
+
- Plans are for scanning and executing, not reading cover-to-cover
|
|
77
|
+
|
|
78
|
+
### Quality principles
|
|
79
|
+
|
|
80
|
+
- **Actionable steps**: Each step is specific enough to execute without further research
|
|
81
|
+
- **Sequenced by dependency**: Steps are in the right order, with dependencies noted
|
|
82
|
+
- **Time-aware**: When relevant, include timing, durations, deadlines, or phases
|
|
83
|
+
- **Resource-identified**: Specify what's needed — tools, materials, people, budget, locations
|
|
84
|
+
- **Contingency-aware**: For important decisions, note alternatives or what to do if plans change
|
|
85
|
+
- **Appropriately detailed**: Match detail to task complexity. A weekend trip needs less structure than a 3-month curriculum. A dinner plan should be concise, not a 200-line document.
|
|
86
|
+
- **Domain-appropriate format**: Choose a structure that fits the domain:
|
|
87
|
+
- Itinerary for travel (day-by-day, with times and locations)
|
|
88
|
+
- Syllabus or curriculum for study plans (topics, resources, milestones)
|
|
89
|
+
- Runbook for events (timeline, responsibilities, logistics)
|
|
90
|
+
- Project plan for business or operational tasks (phases, owners, deliverables)
|
|
91
|
+
- Research plan for investigations (questions, methods, sources)
|
|
92
|
+
- Options menu for preference-driven tasks (curated picks per category)
|
|
93
|
+
|
|
94
|
+
## Step 3: Save or Share
|
|
95
|
+
|
|
96
|
+
After structuring the plan, ask the user how they want to receive it using the platform's blocking question tool: `question` in OpenCode (call `ToolSearch` with `select:question` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini, `ask_user` in Pi (requires the `pi-ask-user` extension). Fall back to numbered options in chat only when no blocking tool exists or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question.
|
|
97
|
+
|
|
98
|
+
**Question:** "Plan ready. How would you like to receive it?"
|
|
99
|
+
|
|
100
|
+
**Options:**
|
|
101
|
+
|
|
102
|
+
1. **Save to disk** — Write the plan as a markdown file. Ask where:
|
|
103
|
+
- `docs/plans/` (only show if this directory exists)
|
|
104
|
+
- Current working directory
|
|
105
|
+
- `/tmp`
|
|
106
|
+
- A custom path
|
|
107
|
+
- Use filename convention: `YYYY-MM-DD-<descriptive-name>-plan.md`
|
|
108
|
+
- Start the document with a `# Title` heading, followed by `Created: YYYY-MM-DD` on the next line. No YAML frontmatter.
|
|
109
|
+
|
|
110
|
+
2. **Open in Proof (web app) — review and comment to iterate with the agent** — Open the doc in Every's Proof editor, iterate with the agent via comments, or copy a link to share with others. Load the `ce-proof` skill to create and open the document.
|
|
111
|
+
|
|
112
|
+
3. **Save to disk AND open in Proof** — Do both: write the markdown file to disk and open the doc in Proof for review.
|
|
113
|
+
|
|
114
|
+
Do not offer `/ce-work` (software-only) or issue creation (not applicable to non-software plans).
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Visual Communication in Plan Documents
|
|
2
|
+
|
|
3
|
+
Section 3.4 covers diagrams about the *solution being planned* (pseudo-code, mermaid sequences, state diagrams). The existing Section 4.3 mermaid rule encourages those solution-design diagrams within Technical Design and per-unit fields. This guidance covers a different concern: visual aids that help readers *navigate and comprehend the plan document itself* -- dependency graphs, interaction diagrams, and comparison tables that make plan structure scannable.
|
|
4
|
+
|
|
5
|
+
Visual aids are conditional on content patterns, not on plan depth classification -- a Lightweight plan about a complex multi-unit workflow may warrant a dependency graph; a Deep plan about a straightforward feature may not.
|
|
6
|
+
|
|
7
|
+
**When to include:**
|
|
8
|
+
|
|
9
|
+
| Plan describes... | Visual aid | Placement |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| 4+ implementation units with non-linear dependencies (parallelism, diamonds, fan-in/fan-out) | Mermaid dependency graph | Before or after the Implementation Units heading |
|
|
12
|
+
| System-Wide Impact naming 3+ interacting surfaces or cross-layer effects | Mermaid interaction or component diagram | Within the System-Wide Impact section |
|
|
13
|
+
| Summary or Problem Frame involving 3+ behavioral modes, states, or variants | Markdown comparison table | Within Summary or Problem Frame (legacy plans may still use `Overview`) |
|
|
14
|
+
| Key Technical Decisions with 3+ interacting decisions, or Alternative Approaches with 3+ alternatives | Markdown comparison table | Within the relevant section |
|
|
15
|
+
|
|
16
|
+
**When to skip:**
|
|
17
|
+
- The plan has 3 or fewer units in a straight dependency chain -- the Dependencies field on each unit is sufficient
|
|
18
|
+
- Prose already communicates the relationships clearly
|
|
19
|
+
- The visual would duplicate what the High-Level Technical Design section already shows
|
|
20
|
+
- The visual describes code-level detail (specific method names, SQL columns, API field lists)
|
|
21
|
+
|
|
22
|
+
**Format selection:**
|
|
23
|
+
- **Mermaid** (default) for dependency graphs and interaction diagrams -- 5-15 nodes, no in-box annotations, standard flowchart shapes. Use `TB` (top-to-bottom) direction so diagrams stay narrow in both rendered and source form. Source should be readable as fallback in diff views and terminals.
|
|
24
|
+
- **ASCII/box-drawing diagrams** for annotated flows that need rich in-box content -- file path layouts, decision logic branches, multi-column spatial arrangements. More expressive than mermaid when the diagram's value comes from annotations within nodes. Follow 80-column max for code blocks, use vertical stacking.
|
|
25
|
+
- **Markdown tables** for mode/variant comparisons and decision/approach comparisons.
|
|
26
|
+
- Keep diagrams proportionate to the plan. A 6-unit linear chain gets a simple 6-node graph. A complex dependency graph with fan-out and fan-in may need 10-15 nodes -- that is fine if every node earns its place.
|
|
27
|
+
- Place inline at the point of relevance, not in a separate section.
|
|
28
|
+
- Plan-structure level only -- unit dependencies, component interactions, mode comparisons, impact surfaces. Not implementation architecture, data schemas, or code structure (those belong in Section 3.4).
|
|
29
|
+
- Prose is authoritative: when a visual aid and its surrounding prose disagree, the prose governs.
|
|
30
|
+
|
|
31
|
+
After generating a visual aid, verify it accurately represents the plan sections it illustrates -- correct dependency edges, no missing surfaces, no merged units.
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# Shipping Workflow
|
|
2
|
+
|
|
3
|
+
This file contains the shipping workflow (Phase 3-4). Load it only when all Phase 2 tasks are complete and execution transitions to quality check.
|
|
4
|
+
|
|
5
|
+
## Phase 3: Quality Check
|
|
6
|
+
|
|
7
|
+
1. **Run Core Quality Checks**
|
|
8
|
+
|
|
9
|
+
Always run before submitting:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# Run full test suite (use project's test command)
|
|
13
|
+
# Examples: bin/rails test, npm test, pytest, go test, etc.
|
|
14
|
+
|
|
15
|
+
# Run linting (per AGENTS.md)
|
|
16
|
+
# Use linting-agent before pushing to origin
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
2. **Code Review** (REQUIRED)
|
|
20
|
+
|
|
21
|
+
Every change gets reviewed before shipping. The depth scales with the change's risk profile, but review itself is never skipped.
|
|
22
|
+
|
|
23
|
+
**Tier 2: Full review (default)** -- REQUIRED unless Tier 1 criteria are explicitly met. Invoke the `ce-code-review` skill with `mode:autofix` to run specialized reviewer agents, auto-apply safe fixes, and record residual downstream work in the per-run artifact. When the plan file path is known, pass it as `plan:<path>`. This is the mandatory default -- proceed to Tier 1 only after confirming every criterion below.
|
|
24
|
+
|
|
25
|
+
**Tier 1: Inline self-review** -- A lighter alternative permitted only when **all four** criteria are true. Before choosing Tier 1, explicitly state which criteria apply and why. If any criterion is uncertain, use Tier 2.
|
|
26
|
+
- Purely additive (new files only, no existing behavior modified)
|
|
27
|
+
- Single concern (one skill, one component -- not cross-cutting)
|
|
28
|
+
- Pattern-following (implementation mirrors an existing example with no novel logic)
|
|
29
|
+
- Plan-faithful (no scope growth, no deferred questions resolved with surprising answers)
|
|
30
|
+
|
|
31
|
+
3. **Residual Work Gate** (REQUIRED when Tier 2 ran)
|
|
32
|
+
|
|
33
|
+
After Tier 2 code review completes, inspect the Residual Actionable Work summary it returned (or read the run artifact directly if the summary was not emitted). If one or more residual `downstream-resolver` findings remain, do not proceed to Final Validation until the user decides how to handle them.
|
|
34
|
+
|
|
35
|
+
Ask the user using the platform's blocking question tool (`question` in OpenCode with `ToolSearch select:question` pre-loaded if needed, `request_user_input` in Codex, `ask_user` in Gemini, `ask_user` in Pi (requires the `pi-ask-user` extension)). Fall back to numbered options in chat only when the harness genuinely lacks a blocking tool. Never silently skip the gate.
|
|
36
|
+
|
|
37
|
+
Stem: `Code review found N residual finding(s) the skill did not auto-fix. How should the agent proceed?`
|
|
38
|
+
|
|
39
|
+
Options (four or fewer, self-contained labels):
|
|
40
|
+
- `Apply/fix now` — loop back into review with focused fixes; the agent investigates each finding, applies changes where safe, and re-runs review.
|
|
41
|
+
- `File tickets via project tracker` — load `references/tracker-defer.md` in Interactive mode; the agent files tickets in the project's detected tracker (or `gh` fallback, or leaves them in the report if no sink exists) and proceeds to Final Validation.
|
|
42
|
+
- `Accept and proceed` — record the residual findings verbatim in a durable "Known Residuals" sink before shipping. If a PR will be created or updated in Phase 4, include them in the PR description's "Known Residuals" section (the agent owns this when calling `ce-commit-push-pr`). If the user later chooses the no-PR `ce-commit` path, create `docs/residual-review-findings/<branch-or-head-sha>.md`, include the accepted findings and source review-run context, stage it with the implementation commit, and mention the file path in the final summary. The user has acknowledged the risk, but the findings must not live only in the transient session.
|
|
43
|
+
- `Stop — do not ship` — abort the shipping workflow. The user will handle findings manually before re-invoking.
|
|
44
|
+
|
|
45
|
+
Skip this gate entirely when the review reported `Residual actionable work: none.` or when only Tier 1 (inline self-review) was used. Do not proceed past this gate on an `Accept and proceed` decision until the agent has recorded whether the durable sink is `PR Known Residuals` or `docs/residual-review-findings/<branch-or-head-sha>.md`.
|
|
46
|
+
|
|
47
|
+
4. **Final Validation**
|
|
48
|
+
- All tasks marked completed
|
|
49
|
+
- Testing addressed -- tests pass and new/changed behavior has corresponding test coverage (or an explicit justification for why tests are not needed)
|
|
50
|
+
- Linting passes
|
|
51
|
+
- Code follows existing patterns
|
|
52
|
+
- Figma designs match (if applicable)
|
|
53
|
+
- No console errors or warnings
|
|
54
|
+
- If the plan has a `Requirements` section (or legacy `Requirements Trace`), verify each requirement is satisfied by the completed work
|
|
55
|
+
- If any `Deferred to Implementation` questions were noted, confirm they were resolved during execution
|
|
56
|
+
|
|
57
|
+
5. **Prepare Operational Validation Plan** (REQUIRED)
|
|
58
|
+
- Add a `## Post-Deploy Monitoring & Validation` section to the PR description for every change.
|
|
59
|
+
- Include concrete:
|
|
60
|
+
- Log queries/search terms
|
|
61
|
+
- Metrics or dashboards to watch
|
|
62
|
+
- Expected healthy signals
|
|
63
|
+
- Failure signals and rollback/mitigation trigger
|
|
64
|
+
- Validation window and owner
|
|
65
|
+
- If there is truly no production/runtime impact, still include the section with: `No additional operational monitoring required` and a one-line reason.
|
|
66
|
+
|
|
67
|
+
## Phase 4: Ship It
|
|
68
|
+
|
|
69
|
+
1. **Prepare Evidence Context**
|
|
70
|
+
|
|
71
|
+
Do not invoke `ce-demo-reel` directly in this step. Evidence capture belongs to the PR creation or PR description update flow, where the final PR diff and description context are available.
|
|
72
|
+
|
|
73
|
+
Note whether the completed work has observable behavior (UI rendering, CLI output, API/library behavior with a runnable example, generated artifacts, or workflow output). The `ce-commit-push-pr` skill will ask whether to capture evidence only when evidence is possible.
|
|
74
|
+
|
|
75
|
+
2. **Update Plan Status**
|
|
76
|
+
|
|
77
|
+
If the input document has YAML frontmatter with a `status` field, update it to `completed`:
|
|
78
|
+
```
|
|
79
|
+
status: active -> status: completed
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
3. **Commit and Create Pull Request**
|
|
83
|
+
|
|
84
|
+
Load the `ce-commit-push-pr` skill to handle committing, pushing, and PR creation. The skill handles convention detection, branch safety, logical commit splitting, adaptive PR descriptions, and attribution badges.
|
|
85
|
+
|
|
86
|
+
When providing context for the PR description, include:
|
|
87
|
+
- The plan's summary and key decisions
|
|
88
|
+
- Testing notes (tests added/modified, manual testing performed)
|
|
89
|
+
- Evidence context from step 1, so `ce-commit-push-pr` can decide whether to ask about capturing evidence
|
|
90
|
+
- Figma design link (if applicable)
|
|
91
|
+
- The Post-Deploy Monitoring & Validation section (see Phase 3 Step 5)
|
|
92
|
+
- Any "Known Residuals" accepted in the Phase 3 Residual Work Gate, rendered as a dedicated section in the PR body with severity, file:line, and title per finding
|
|
93
|
+
|
|
94
|
+
If the user prefers to commit without creating a PR, load the `ce-commit` skill instead.
|
|
95
|
+
|
|
96
|
+
4. **Notify User**
|
|
97
|
+
- Summarize what was completed
|
|
98
|
+
- Link to PR (if one was created)
|
|
99
|
+
- Note any follow-up work needed
|
|
100
|
+
- Suggest next steps if applicable
|
|
101
|
+
|
|
102
|
+
## Quality Checklist
|
|
103
|
+
|
|
104
|
+
Before creating PR, verify:
|
|
105
|
+
|
|
106
|
+
- [ ] All clarifying questions asked and answered
|
|
107
|
+
- [ ] All tasks marked completed
|
|
108
|
+
- [ ] Testing addressed -- tests pass AND new/changed behavior has corresponding test coverage (or an explicit justification for why tests are not needed)
|
|
109
|
+
- [ ] Linting passes (use linting-agent)
|
|
110
|
+
- [ ] Code follows existing patterns
|
|
111
|
+
- [ ] Figma designs match implementation (if applicable)
|
|
112
|
+
- [ ] Evidence decision handled by `ce-commit-push-pr` when the change has observable behavior
|
|
113
|
+
- [ ] Commit messages follow conventional format
|
|
114
|
+
- [ ] PR description includes Post-Deploy Monitoring & Validation section (or explicit no-impact rationale)
|
|
115
|
+
- [ ] Code review completed (inline self-review or full `ce-code-review`)
|
|
116
|
+
- [ ] PR description includes summary, testing notes, and evidence when captured
|
|
117
|
+
- [ ] PR description includes Compound Engineered badge with accurate model and harness
|
|
118
|
+
|
|
119
|
+
## Code Review Tiers
|
|
120
|
+
|
|
121
|
+
Every change gets reviewed. The tier determines depth, not whether review happens.
|
|
122
|
+
|
|
123
|
+
**Tier 2 (full review)** -- REQUIRED default. Invoke `ce-code-review mode:autofix` with `plan:<path>` when available. Safe fixes are applied automatically; residual work is recorded in the run artifact for downstream routing. Always use this tier unless all four Tier 1 criteria are explicitly confirmed.
|
|
124
|
+
|
|
125
|
+
**Tier 1 (inline self-review)** -- permitted only when all four are true (state each explicitly before choosing):
|
|
126
|
+
- Purely additive (new files only, no existing behavior modified)
|
|
127
|
+
- Single concern (one skill, one component -- not cross-cutting)
|
|
128
|
+
- Pattern-following (mirrors an existing example, no novel logic)
|
|
129
|
+
- Plan-faithful (no scope growth, no surprising deferred-question resolutions)
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
# Codex Delegation Workflow
|
|
2
|
+
|
|
3
|
+
When `delegation_active` is true, code implementation is delegated to the Codex CLI (`codex exec`) instead of being implemented directly. The orchestrating OpenCode agent retains control of planning, review, git operations, and orchestration.
|
|
4
|
+
|
|
5
|
+
## Delegation Decision
|
|
6
|
+
|
|
7
|
+
If `work_delegate_decision` is `ask`, present the recommendation and wait for the user's choice before proceeding.
|
|
8
|
+
|
|
9
|
+
**When recommending Codex delegation:**
|
|
10
|
+
|
|
11
|
+
> "Codex delegation active. [N] implementation units -- delegating in one batch."
|
|
12
|
+
> 1. Delegate to Codex *(recommended)*
|
|
13
|
+
> 2. Execute with OpenCode instead
|
|
14
|
+
|
|
15
|
+
**When recommending Codex delegation, multiple batches:**
|
|
16
|
+
|
|
17
|
+
> "Codex delegation active. [N] implementation units -- delegating in [X] batches."
|
|
18
|
+
> 1. Delegate to Codex *(recommended)*
|
|
19
|
+
> 2. Execute with OpenCode instead
|
|
20
|
+
|
|
21
|
+
**When recommending OpenCode (all units are trivial):**
|
|
22
|
+
|
|
23
|
+
> "Codex delegation active, but these are small changes where the cost of delegating outweighs having OpenCode do them."
|
|
24
|
+
> 1. Execute with OpenCode *(recommended)*
|
|
25
|
+
> 2. Delegate to Codex anyway
|
|
26
|
+
|
|
27
|
+
If the user chooses the delegation option, proceed to Pre-Delegation Checks below. If the user chooses the OpenCode option, set `delegation_active` to false and return to standard execution in the parent skill.
|
|
28
|
+
|
|
29
|
+
If `work_delegate_decision` is `auto` (the default), state the execution plan in one line and proceed without waiting: "Codex delegation active. Delegating [N] units in [X] batch(es)." If all units are trivial, set `delegation_active` to false and proceed: "Codex delegation active. All units are trivial -- executing with OpenCode."
|
|
30
|
+
|
|
31
|
+
## Pre-Delegation Checks
|
|
32
|
+
|
|
33
|
+
Run these checks **once before the first batch**. If any check fails, fall back to standard mode for the remainder of the plan execution. Do not re-run on subsequent batches.
|
|
34
|
+
|
|
35
|
+
**0. Platform Gate**
|
|
36
|
+
|
|
37
|
+
Codex delegation is only supported when the orchestrating agent is running in OpenCode. If the current session is Codex, Gemini CLI, OpenCode, or any other platform, set `delegation_active` to false and proceed in standard mode.
|
|
38
|
+
|
|
39
|
+
**1. Environment Guard**
|
|
40
|
+
|
|
41
|
+
Check whether the current agent is already running inside a Codex sandbox:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
if [ -n "$CODEX_SANDBOX" ] || [ -n "$CODEX_SESSION_ID" ]; then
|
|
45
|
+
echo "inside_sandbox=true"
|
|
46
|
+
else
|
|
47
|
+
echo "inside_sandbox=false"
|
|
48
|
+
fi
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
If `inside_sandbox` is true, delegation would recurse or fail.
|
|
52
|
+
|
|
53
|
+
- If `delegation_source` is `argument`: emit "Already inside Codex sandbox -- using standard mode." and set `delegation_active` to false.
|
|
54
|
+
- If `delegation_source` is `config` or `default`: set `delegation_active` to false silently.
|
|
55
|
+
|
|
56
|
+
**2. Availability Check**
|
|
57
|
+
|
|
58
|
+
**Codex availability (pre-resolved):**
|
|
59
|
+
!`command -v codex >/dev/null 2>&1 && echo "CODEX_AVAILABLE" || echo "CODEX_NOT_FOUND"`
|
|
60
|
+
|
|
61
|
+
If the line above shows `CODEX_AVAILABLE`, proceed to the next check.
|
|
62
|
+
If it shows `CODEX_NOT_FOUND`, the Codex CLI is not installed. Emit "Codex CLI not found (install via `npm install -g @openai/codex` or `brew install codex`) -- using standard mode." and set `delegation_active` to false.
|
|
63
|
+
If it shows an unresolved command string, run `command -v codex` using a shell tool. If the command prints a path, proceed. If it fails or prints nothing, emit the same message and set `delegation_active` to false.
|
|
64
|
+
|
|
65
|
+
**3. Consent Flow**
|
|
66
|
+
|
|
67
|
+
If `consent_granted` is not true (from config `work_delegate_consent`):
|
|
68
|
+
|
|
69
|
+
Present a one-time consent warning using the platform's blocking question tool (`question` in OpenCode, `request_user_input` in Codex, `ask_user` in Gemini, `ask_user` in Pi (requires the `pi-ask-user` extension)). The consent warning explains:
|
|
70
|
+
- Delegation sends implementation units to `codex exec` as a structured prompt
|
|
71
|
+
- **yolo mode** (`--yolo`): Full system access including network. Required for verification steps that run tests or install dependencies. **Recommended.**
|
|
72
|
+
- **full-auto mode** (`--full-auto`): Workspace-write sandbox, no network access.
|
|
73
|
+
|
|
74
|
+
Present the sandbox mode choice: (1) yolo (recommended), (2) full-auto.
|
|
75
|
+
|
|
76
|
+
On acceptance:
|
|
77
|
+
- Resolve the repo root: `git rev-parse --show-toplevel`. Write `work_delegate_consent: true` and `work_delegate_sandbox: <chosen-mode>` to `<repo-root>/.systematic/config.local.yaml`
|
|
78
|
+
- To write: (1) if file or directory does not exist, create `<repo-root>/.systematic/` and write the YAML file; (2) if file exists, merge new keys preserving existing keys
|
|
79
|
+
- Update `consent_granted` and `sandbox_mode` in the resolved state
|
|
80
|
+
|
|
81
|
+
On decline:
|
|
82
|
+
- Ask whether to disable delegation entirely for this project
|
|
83
|
+
- If yes: write `work_delegate: false` to `<repo-root>/.systematic/config.local.yaml` (using the same repo root resolved above). To write: (1) if file or directory does not exist, create `<repo-root>/.systematic/` and write the YAML file; (2) if file exists, merge new keys preserving existing keys. Set `delegation_active` to false, proceed in standard mode
|
|
84
|
+
- If no: set `delegation_active` to false for this invocation only, proceed in standard mode
|
|
85
|
+
|
|
86
|
+
**Headless consent:** If running in a headless or non-interactive context, delegation proceeds only if `work_delegate_consent` is already `true` in the config file. If consent is not recorded, set `delegation_active` to false silently.
|
|
87
|
+
|
|
88
|
+
## Batching
|
|
89
|
+
|
|
90
|
+
Delegate all units in one batch. If the plan exceeds 5 units, split into batches at the plan's own phase boundaries, or in groups of roughly 5 -- never splitting units that share files. Skip delegation entirely if every unit is trivial.
|
|
91
|
+
|
|
92
|
+
## Prompt Template
|
|
93
|
+
|
|
94
|
+
At the start of delegated execution, create a per-run OS-temp scratch directory via `mktemp -d` and capture its **absolute path** for all downstream use. All scratch files for this invocation live under that directory. Do not use `.context/` — these scratch files are per-run throwaway that get cleaned up when delegated execution ends (see Cleanup below), matching the repo Scratch Space convention for one-shot artifacts. Do not pass unresolved shell-variable strings to non-shell tools (Write, Read); use the absolute path returned by `mktemp -d`.
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
SCRATCH_DIR="$(mktemp -d -t ce-work-codex-XXXXXX)"
|
|
98
|
+
echo "$SCRATCH_DIR"
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Refer to the echoed absolute path as `<scratch-dir>` throughout the rest of this workflow.
|
|
102
|
+
|
|
103
|
+
Before each batch, write a prompt file to `<scratch-dir>/prompt-batch-<batch-num>.md`.
|
|
104
|
+
|
|
105
|
+
Build the prompt from the batch's implementation units using these XML-tagged sections:
|
|
106
|
+
|
|
107
|
+
```xml
|
|
108
|
+
<task>
|
|
109
|
+
[For a single-unit batch: Goal from the implementation unit.
|
|
110
|
+
For a multi-unit batch: list each unit with its Goal, stating the concrete
|
|
111
|
+
job, repository context, and expected end state for each.]
|
|
112
|
+
</task>
|
|
113
|
+
|
|
114
|
+
<files>
|
|
115
|
+
[Combined file list from all units in the batch -- files to create, modify, or read.]
|
|
116
|
+
</files>
|
|
117
|
+
|
|
118
|
+
<patterns>
|
|
119
|
+
[File paths from all units' "Patterns to follow" fields. If no patterns:
|
|
120
|
+
"No explicit patterns referenced -- follow existing conventions in the
|
|
121
|
+
modified files."]
|
|
122
|
+
</patterns>
|
|
123
|
+
|
|
124
|
+
<approach>
|
|
125
|
+
[For a single-unit batch: Approach from the unit.
|
|
126
|
+
For a multi-unit batch: list each unit's approach, noting dependencies
|
|
127
|
+
and suggested ordering.]
|
|
128
|
+
</approach>
|
|
129
|
+
|
|
130
|
+
<constraints>
|
|
131
|
+
- Do NOT run git commit, git push, or create PRs -- the orchestrating agent handles all git operations
|
|
132
|
+
- Restrict all modifications to files within the repository root
|
|
133
|
+
- Keep changes tightly scoped to the stated task -- avoid unrelated refactors, renames, or cleanup
|
|
134
|
+
- Resolve the task fully before stopping -- do not stop at the first plausible answer
|
|
135
|
+
- If you discover mid-execution that you need to modify files outside the repo root, complete what you can within the repo and report what you could not do via the result schema issues field
|
|
136
|
+
</constraints>
|
|
137
|
+
|
|
138
|
+
<testing>
|
|
139
|
+
Before writing tests, check whether the plan's test scenarios cover all
|
|
140
|
+
categories that apply to each unit. Supplement gaps before writing tests:
|
|
141
|
+
- Happy path: core input/output pairs from each unit's goal
|
|
142
|
+
- Edge cases: boundary values, empty/nil inputs, type mismatches
|
|
143
|
+
- Error/failure paths: invalid inputs, permission denials, downstream failures
|
|
144
|
+
- Integration: cross-layer scenarios that mocks alone won't prove
|
|
145
|
+
|
|
146
|
+
Write tests that name specific inputs and expected outcomes. If your changes
|
|
147
|
+
touch code with callbacks, middleware, or event handlers, verify the
|
|
148
|
+
interaction chain works end-to-end.
|
|
149
|
+
</testing>
|
|
150
|
+
|
|
151
|
+
<verify>
|
|
152
|
+
After implementing, run ALL test files together in a single command (not
|
|
153
|
+
per-file). Cross-file contamination (e.g., mocked globals leaking between
|
|
154
|
+
test files) only surfaces when tests run in the same process. If tests
|
|
155
|
+
fail, fix the issues and re-run until they pass. Do not report status
|
|
156
|
+
"completed" unless verification passes. This is your responsibility --
|
|
157
|
+
the orchestrator will not re-run verification independently.
|
|
158
|
+
|
|
159
|
+
[Test and lint commands from the project. Use the union of all units'
|
|
160
|
+
verification commands as a single combined invocation.]
|
|
161
|
+
</verify>
|
|
162
|
+
|
|
163
|
+
<output_contract>
|
|
164
|
+
Report your result via the --output-schema mechanism. Fill in every field:
|
|
165
|
+
- status: "completed" ONLY if all changes were made AND verification passes,
|
|
166
|
+
"partial" if incomplete, "failed" if no meaningful progress
|
|
167
|
+
- files_modified: array of file paths you changed
|
|
168
|
+
- issues: array of strings describing any problems, gaps, or out-of-scope
|
|
169
|
+
work discovered
|
|
170
|
+
- summary: one-paragraph description of what was done
|
|
171
|
+
- verification_summary: what you ran to verify (command and outcome).
|
|
172
|
+
Example: "Ran `bun test` -- 14 tests passed, 0 failed."
|
|
173
|
+
If no verification was possible, say why.
|
|
174
|
+
</output_contract>
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
## Result Schema
|
|
178
|
+
|
|
179
|
+
Write the result schema to `<scratch-dir>/result-schema.json` (using the absolute path captured at the start) once at the start of delegated execution:
|
|
180
|
+
|
|
181
|
+
```json
|
|
182
|
+
{
|
|
183
|
+
"type": "object",
|
|
184
|
+
"properties": {
|
|
185
|
+
"status": { "enum": ["completed", "partial", "failed"] },
|
|
186
|
+
"files_modified": { "type": "array", "items": { "type": "string" } },
|
|
187
|
+
"issues": { "type": "array", "items": { "type": "string" } },
|
|
188
|
+
"summary": { "type": "string" },
|
|
189
|
+
"verification_summary": { "type": "string" }
|
|
190
|
+
},
|
|
191
|
+
"required": ["status", "files_modified", "issues", "summary", "verification_summary"],
|
|
192
|
+
"additionalProperties": false
|
|
193
|
+
}
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
Each batch's result is written to `<scratch-dir>/result-batch-<batch-num>.json` via the `-o` flag. On plan failure, files are left in place for debugging.
|
|
197
|
+
|
|
198
|
+
If the result JSON is absent or malformed after a successful exit code, classify as task failure.
|
|
199
|
+
|
|
200
|
+
## Execution Loop
|
|
201
|
+
|
|
202
|
+
Initialize a `consecutive_failures` counter at 0 before the first batch.
|
|
203
|
+
|
|
204
|
+
**Clean-baseline preflight:** Before the first batch, verify there are no uncommitted changes to tracked files:
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
git diff --quiet HEAD
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
This intentionally ignores untracked files. Only staged or unstaged modifications to tracked files make rollback unsafe. However, if untracked files exist at paths in the batch's planned Files list, rollback (`git clean -fd -- <paths>`) would delete them. If such overlaps are detected, warn the user and recommend committing or stashing those files before proceeding.
|
|
211
|
+
|
|
212
|
+
If tracked files are dirty, stop and present options: (1) commit current changes, (2) stash explicitly (`git stash push -m "pre-delegation"`), (3) continue in standard mode (sets `delegation_active` to false). Do not auto-stash user changes.
|
|
213
|
+
|
|
214
|
+
**Delegation invocation:** For each batch, execute these as **separate Bash tool calls** (not combined into one):
|
|
215
|
+
|
|
216
|
+
**Step A — Launch (background, separate Bash call):**
|
|
217
|
+
|
|
218
|
+
Write the prompt file, then make a single Bash tool call with `run_in_background: true` set on the tool parameter. This call returns immediately and has no timeout ceiling.
|
|
219
|
+
|
|
220
|
+
Substitute the literal absolute path captured at setup for every `<scratch-dir>` below. Each Bash tool call starts a fresh shell, so the `$SCRATCH_DIR` variable from the setup snippet is not preserved — an unresolved `$SCRATCH_DIR` would expand empty and break result detection.
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
# Substitute the resolved sandbox_mode value (yolo or full-auto) from the skill state
|
|
224
|
+
SANDBOX_MODE="<sandbox_mode>"
|
|
225
|
+
|
|
226
|
+
# Resolve sandbox flag
|
|
227
|
+
if [ "$SANDBOX_MODE" = "full-auto" ]; then
|
|
228
|
+
SANDBOX_FLAG="--full-auto"
|
|
229
|
+
else
|
|
230
|
+
SANDBOX_FLAG="--dangerously-bypass-approvals-and-sandbox"
|
|
231
|
+
fi
|
|
232
|
+
|
|
233
|
+
codex exec \
|
|
234
|
+
$SANDBOX_FLAG \
|
|
235
|
+
--output-schema "<scratch-dir>/result-schema.json" \
|
|
236
|
+
-o "<scratch-dir>/result-batch-<batch-num>.json" \
|
|
237
|
+
- < "<scratch-dir>/prompt-batch-<batch-num>.md"
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
**Conditional flags** — only include each line when the corresponding skill-state value is set:
|
|
241
|
+
|
|
242
|
+
- If `delegate_model` is set, insert ` -m "<delegate_model>" \` as a line before `$SANDBOX_FLAG`.
|
|
243
|
+
- If `delegate_effort` is set, insert ` -c 'model_reasoning_effort="<delegate_effort>"' \` as a line before `$SANDBOX_FLAG`.
|
|
244
|
+
|
|
245
|
+
When either value is unset, omit its line entirely — Codex resolves the default from the user's `~/.codex/config.toml` (and ultimately the CLI's own built-in default). Do not substitute a placeholder string for unset values.
|
|
246
|
+
|
|
247
|
+
Critical: `run_in_background: true` must be set as a **Bash tool parameter**, not as a shell `&` suffix. The tool parameter is what removes the timeout ceiling. A shell `&` inside a foreground Bash call still hits the 2-minute default timeout.
|
|
248
|
+
|
|
249
|
+
Quoting is critical for the `-c` flag when present: use single quotes around the entire key=value and double quotes around the TOML string value inside. Example: `-c 'model_reasoning_effort="high"'`.
|
|
250
|
+
|
|
251
|
+
Do not improvise CLI flags or modify this invocation template beyond the documented conditional insertions.
|
|
252
|
+
|
|
253
|
+
**Step B — Poll (foreground, separate Bash calls):**
|
|
254
|
+
|
|
255
|
+
After the launch call returns, make a **new, separate** foreground Bash tool call that polls for the result file. This keeps the agent's turn active so the user cannot interfere with the working tree.
|
|
256
|
+
|
|
257
|
+
Substitute the literal absolute path captured at setup for `<scratch-dir>`. The shell variable from Step A does not survive across separate Bash tool calls.
|
|
258
|
+
|
|
259
|
+
```bash
|
|
260
|
+
RESULT_FILE="<scratch-dir>/result-batch-<batch-num>.json"
|
|
261
|
+
for i in $(seq 1 6); do
|
|
262
|
+
test -s "$RESULT_FILE" && echo "DONE" && exit 0
|
|
263
|
+
sleep 10
|
|
264
|
+
done
|
|
265
|
+
echo "Waiting for Codex..."
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
If the output is "Waiting for Codex...", issue the same polling command again as another separate Bash call. Repeat until the output is "DONE", then read the result file and proceed to classification.
|
|
269
|
+
|
|
270
|
+
**Polling termination conditions:** Stop polling when any of these conditions is met:
|
|
271
|
+
|
|
272
|
+
- **Result file appears** (output is "DONE") -- proceed to result classification normally.
|
|
273
|
+
- **Background process exits with non-zero code** -- classify as CLI failure (row 1). Rollback and fall back to standard mode.
|
|
274
|
+
- **Background process exits with zero code but result file is absent** -- classify as task failure (row 2: exit 0, result JSON missing). Rollback and increment `consecutive_failures`.
|
|
275
|
+
- **5 polling rounds** elapse (~5 minutes) without the result file appearing and without a background process notification -- treat as a hung process. Classify as CLI failure (row 1). Rollback and fall back to standard mode.
|
|
276
|
+
|
|
277
|
+
**Result classification:** Codex is responsible for running verification internally and fixing failures before reporting -- the orchestrator does not re-run verification independently.
|
|
278
|
+
|
|
279
|
+
| # | Signal | Classification | Action |
|
|
280
|
+
|---|--------|---------------|--------|
|
|
281
|
+
| 1 | Exit code != 0 | CLI failure | Rollback to HEAD. Fall back to standard mode for ALL remaining work. |
|
|
282
|
+
| 2 | Exit code 0, result JSON missing or malformed | Task failure | Rollback to HEAD. Increment `consecutive_failures`. |
|
|
283
|
+
| 3 | Exit code 0, `status: "failed"` | Task failure | Rollback to HEAD. Increment `consecutive_failures`. |
|
|
284
|
+
| 4 | Exit code 0, `status: "partial"` | Partial success | Keep the diff. Complete remaining work locally, verify, and commit. Increment `consecutive_failures`. |
|
|
285
|
+
| 5 | Exit code 0, `status: "completed"` | Success | Commit changes. Reset `consecutive_failures` to 0. |
|
|
286
|
+
|
|
287
|
+
**Result handoff — surface to user:** After reading the result JSON and before committing or rolling back, display a summary so the user sees what happened. Format:
|
|
288
|
+
|
|
289
|
+
> **Codex batch <batch-num> — <classification>**
|
|
290
|
+
> <summary from result JSON>
|
|
291
|
+
>
|
|
292
|
+
> **Files:** <comma-separated list from files_modified>
|
|
293
|
+
> **Verification:** <verification_summary from result JSON>
|
|
294
|
+
> **Issues:** <issues list, or "None">
|
|
295
|
+
|
|
296
|
+
On failure or partial results, include the classification reason (e.g., "status: failed", "result JSON missing") so the user understands why the orchestrator is rolling back or completing locally.
|
|
297
|
+
|
|
298
|
+
Keep this brief — the goal is transparency, not a wall of text. One short block per batch.
|
|
299
|
+
|
|
300
|
+
**Rollback procedure:**
|
|
301
|
+
|
|
302
|
+
```bash
|
|
303
|
+
git checkout -- .
|
|
304
|
+
git clean -fd -- <paths from the batch's combined Files list>
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
Do NOT use bare `git clean -fd` without path arguments.
|
|
308
|
+
|
|
309
|
+
**Commit on success:**
|
|
310
|
+
|
|
311
|
+
```bash
|
|
312
|
+
git add $(git diff --name-only HEAD; git ls-files --others --exclude-standard)
|
|
313
|
+
git commit -m "feat(<scope>): <batch summary>"
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
**Between batches** (plans split into multiple batches): Report what completed, test results, and what's next. Continue immediately unless the user intervenes -- the checkpoint exists so the user *can* steer, not so they *must*.
|
|
317
|
+
|
|
318
|
+
**Circuit breaker:** After 3 consecutive failures, set `delegation_active` to false and emit: "Codex delegation disabled after 3 consecutive failures -- completing remaining units in standard mode."
|
|
319
|
+
|
|
320
|
+
**Scratch cleanup:** No explicit cleanup needed — OS temp handles eventual cleanup (macOS `$TMPDIR` periodic purge; Linux/WSL `/tmp` reboot or periodic cleanup). Leaving `<scratch-dir>` in place after the run also preserves intermediate artifacts for debugging if anything went wrong.
|
|
321
|
+
|
|
322
|
+
## Mixed-Model Attribution
|
|
323
|
+
|
|
324
|
+
When some units are executed by Codex and others locally:
|
|
325
|
+
- If all units used delegation: attribute to the Codex model
|
|
326
|
+
- If all units used standard mode: attribute to the current agent's model
|
|
327
|
+
- If mixed: note which units were delegated in the PR description and credit both models
|