-
Notifications
You must be signed in to change notification settings - Fork 0
feat(plugin-v2): unified goal-loop plugin merging OODA + goal-orchestrator #523
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
104 commits
Select commit
Hold shift + click to select a range
69ed2ae
feat(plugin-v2): unified goal-loop plugin merging OODA + goal-orchest…
claude 05d84a9
fix(plugin-v2): resolve internal-contract mismatches and verify-gate …
claude 39582eb
fix(plugin-v2): align current_phase values and act-approval source of…
claude 73718c6
fix(plugin-v2): remove pending_actions field; route state through per…
claude 206cca0
feat(plugin-v2): polish pass + enrichment — consult-only agents, help…
claude 98e7a16
fix(plugin-v2): spell-check — invokable → invocable
claude 07790cb
feat(plugin-v2): UX polish, maintenance + improvement docs, automatio…
claude c524428
feat(plugin-v2): complete guided welcome — docs/getting-started.md + …
claude 1847b0b
docs(plugin-v2): integrate guided welcome + ship UX research doc
claude 3f79ec9
fix(spell): allow-list HAX and Collisson cited in ux-agentic-cowork.md
claude 87e996c
feat(plugin-v2): root files (CHANGELOG, SECURITY) + /goal:list + per-…
claude 2e3cdb1
feat(plugin-v2): complete RALPH wave — threat-model, tool-matrix, con…
claude dbaf309
fix(plugin-v2): align reversible enum + close terminal phase + merged…
claude aaebcc9
fix(plugin-v2): orchestrator reversible+closed drift + Obsidian compa…
claude be848bf
feat(plugin-v2): add /create-goal and /set-goal top-level commands (W…
claude 928dd5b
feat(plugin-v2): complete cross-tool session-goal surface — skills + …
claude 3a0cfb5
fix(spell): session-goal-best-practices ANDed → "joined by and"
claude dd5265b
style(plugin-v2): activate-goal SKILL — compress redundant prose
claude ed05fd3
docs(plugin-v2): create-goal command — expanded session-vs-loop disam…
claude d4a31c3
fix(plugin-v2): close two history-trail gaps (Codex P2 on ed05fd3)
claude 945bbf2
fix(plugin-v2): sweep remaining outcome/status + reversible enum drift
claude da8bdc9
feat(plugin-v2): wave-4 RALPH — Obsidian compat, examples polish, scr…
claude e8f8c70
fix(plugin-v2): datetime drift in decisions.md heading — dash→colon
claude 5ec4b51
fix(plugin-v2): two more Codex findings on e8f8c70
claude d1f70c7
fix(plugin-v2): two Codex findings on 5ec4b51 — /goal clear + single-…
claude 2f78f1a
feat(plugin-v2): wave-5 RALPH — 4 parallel agents land docs, scripts,…
claude d168e4d
feat(plugin-v2): policy-review observation artifacts (partial)
claude c70867a
feat(plugin-v2): complete wave-5 examples — INDEX, policy-review acti…
claude 6ffed7b
fix(plugin-v2): two Codex findings on c70867a — /goal:demo re-scaffol…
claude bae2992
feat(plugin-v2): wave-6 partial — CI workflow, Article IV guarantee, …
claude 5ba6dbb
fix(plugin-v2): vocabulary exemptions for new example artifacts
claude 70fb686
docs(plugin-v2): wave-6 B + D partial — examples registration, gloss …
claude b0940fb
chore: register plugin-v2-quality workflow in automation-registry.yml
claude eb257b1
feat(plugin-v2): wave-6 C partial — incident-triage worked artifact set
claude 56e2791
feat(plugin-v2): wave-6 C complete — release-readiness + continuous-a…
claude 7a04a1f
fix(plugin-v2): three Codex findings on eb257b1 + close v1 criterion 3
claude db3fa4c
docs(plugin-v2): wave-6 C tail — registration + remaining continuous-…
claude e3c04ac
feat(plugin-v2): deep research doc + two Codex findings on db3fa4c
claude f2e3380
feat(plugin-v2): wave-7 RALPH partial — H-3 + H-4 + H-5 + H-7 impleme…
claude 0ba1593
docs(plugin-v2): H-4 glossary follow-up — EARS entry placement
claude 4e3b228
fix(plugin-v2): two Codex P1 on 0ba1593 + AskUserQuestion drift sweep
claude 60d555e
fix(plugin-v2): wider AskUserQuestion + decision Human Approval schema
claude 264032d
feat(plugin-v2): wave-8 — close 5 of 6 template-without-example WARNs…
claude cf6679a
fix(plugin-v2): four Codex findings on 264032d
claude 9dd17d2
fix(plugin-v2): check-tool-lists roster missed AskUserQuestion grant
claude 87d2e65
fix(plugin-v2): two more Codex findings on 9dd17d2
claude 9955916
fix(plugin-v2): two Codex findings on 87d2e65
claude e6e8bdd
feat(plugin-v2): wave-9 P1 batch — install recipe + required-field au…
claude 8f5e93d
feat(plugin-v2): integrate H-2 OTel trace exporter into registration …
claude 3a4e505
fix(plugin-v2): two Codex P1 on e6e8bdd — daily-brief workflow contra…
claude fa7e954
fix(plugin-v2): Codex P2 on 3a4e505 — /goal:amend revive-via-amend path
claude 69b6f92
fix(plugin-v2): two Codex P2 on fa7e954 — brief archive shape + list-…
claude 7fa1bff
feat(plugin-v2): wave-9 D — doc cluster + first constitution amendmen…
claude 20638b6
fix(plugin-v2): two Codex P2 on 69b6f92 — /goal:run review entry + ac…
claude 3be8da8
fix(plugin-v2): two Codex P2 on 20638b6 — /goal:amend canonical outco…
claude 258d158
docs(plugin-v2): ship domain-model — single-read CONTEXT for all 24 t…
claude e7b3ea0
fix(plugin-v2): three Codex P2 on 258d158 — tool-list + template owne…
claude 3abfbaf
docs(plugin-v2): second constitution amendment record — goal-state.md…
claude 7a7c08b
docs(plugin-v2): polish pass — constitution v0.2 + amendment log index
claude d63766d
fix(plugin-v2): three Codex findings on 7a7c08b — act-gate ownership …
claude fdd24ca
feat(plugin-v2): P1 wave — close 7 review findings across security / …
claude 6568285
feat(plugin-v2): P2 wave — close remaining security / impl-rigor / OO…
claude 78c9fbd
feat(plugin-v2): wire decorative schema fields + close 4 fresh Codex P1s
claude dffce20
fix(plugin-v2): Codex P1 on 78c9fbd — method.md two-writer contract
claude 130cfc2
fix(plugin-v2): two Codex P1 on dffce20 — namespace action logs + pre…
claude 3521c8b
fix(plugin-v2): repair relative links broken by actions/iter-1 git mv
claude e2b4d14
fix(plugin-v2): two Codex P1 on 3521c8b — reviewer iter-<n> read path…
claude fe3e67f
fix(plugin-v2): two Codex P1 + sweep stale actions/*.md glob read-paths
claude c76784a
fix(plugin-v2): two Codex findings on fe3e67f — double-write + close-…
claude c40c977
fix(plugin-v2): two Codex findings on c76784a — start.md revive flag …
claude 1642e2f
fix(plugin-v2): two Codex P1 on c40c977 — single iteration owner + am…
claude a9a26ef
fix(plugin-v2): final two Codex P1 on 1642e2f — iteration owner + rec…
claude 931cb32
docs(plugin-v2): add first-five-minutes + session-vs-iteration-goals
claude a2b5185
fix(plugin-v2): two Codex on a9a26ef — tags in schema + one Act histo…
claude fa6d992
fix(plugin-v2): three Codex findings on a2b5185 — lock-absent + decis…
claude 765c5d1
fix(plugin-v2): two Codex on fa6d992 — shared loop-pattern iteration …
claude becca35
fix(plugin-v2): two Codex on 765c5d1 — amend-reject branch + 7th iter…
claude e507a7c
fix(plugin-v2): two Codex on becca35 — 8th iteration-bump leak + over…
claude c4a9bf8
fix(plugin-v2): two Codex on e507a7c — demo terminal-state branch + s…
claude a6ddd85
fix(plugin-v2): three Codex on c4a9bf8 — comprehensive actions/iter-<…
claude 8428c13
fix(plugin-v2): two Codex on a6ddd85 — amend lock cleanup on Discard …
claude 782fd92
fix(plugin-v2): two Codex on 8428c13 — merged-observation filename + …
claude 9c1921b
fix(plugin-v2): three Codex on 782fd92 — close picker scope + 2nd loc…
claude a9b6f84
fix(plugin-v2): two Codex on 9c1921b — demo draft branch + amend revi…
claude 0aa86b8
fix(plugin-v2): move per-goal amendment records to goals/<slug>/amend…
claude 01b6e3a
fix(plugin-v2): proactive batch — 14 audit findings + 1 Codex closed …
claude eb20e51
fix(plugin-v2): Codex on 01b6e3a — 9th iteration-bump leak (observe S…
claude 9f7dceb
fix(plugin-v2): post-eb20e51 grep-sweep — 3 more domain-model leaks +…
claude fbfd168
fix(plugin-v2): two Codex on eb20e51 — run.md picker-preflight gap + …
claude 67a3f11
fix(plugin-v2): two Codex on fbfd168 — replace comma-separated fan-in…
claude e96d3ee
fix(plugin-v2): Codex on 67a3f11 — outcome table tells conductors to …
claude 5ab242b
fix(plugin-v2): Codex on e96d3ee — export-trace command default-deny …
claude 61072f8
fix(plugin-v2): two Codex on 5ab242b — Orient single-artifact + Act c…
claude 9915aaf
fix(plugin-v2): two Codex on 61072f8 — amendments/ scaffold + cap cou…
claude ea66d6f
fix(plugin-v2): Codex on 9915aaf — check-tool-lists.sh parses block Y…
claude da2e52b
fix(plugin-v2): two Codex on ea66d6f — Orient iter-1 archive + review…
claude 637e5ce
feat(plugin-v2): cap goal body length at 3500 chars
claude c1bb199
chore(plugin-v2): polish pass — harden goal-length check, bump to 2.2…
claude c614b46
Merge branch 'develop' into claude/unified-plugin-v2-Lmn8x
Luis85 9d2fa77
fix(plugin-v2): two Codex on c614b46 — ActionSpec naming + /goal:stat…
claude c248278
fix(plugin-v2): two Codex on 9d2fa77 — drop unsupported -close.md suf…
claude f1c3d12
fix(plugin-v2): two Codex on c248278 — restore canonical 6-col Histor…
claude cabbfa7
fix(plugin-v2): two Codex on f1c3d12 — ship missing artifacts, collap…
claude d372926
fix(plugin-v2): one Codex on cabbfa7 — split action-spec matcher in c…
claude File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,33 @@ | ||
| name: plugin-v2 quality | ||
|
|
||
| on: | ||
| pull_request: | ||
| paths: | ||
| - 'plugin-v2/**' | ||
| - '.github/workflows/plugin-v2-quality.yml' | ||
| push: | ||
| branches: | ||
| - main | ||
| paths: | ||
| - 'plugin-v2/**' | ||
| - '.github/workflows/plugin-v2-quality.yml' | ||
|
|
||
| permissions: | ||
| contents: read | ||
|
|
||
| concurrency: | ||
| group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | ||
| cancel-in-progress: true | ||
|
|
||
| jobs: | ||
| plugin-v2-checks: | ||
| name: plugin-v2 verify | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - name: Checkout | ||
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 | ||
| with: | ||
| persist-credentials: false | ||
|
|
||
| - name: Run plugin-v2 check-all.sh | ||
| run: bash plugin-v2/scripts/check-all.sh |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,67 @@ | ||
| { | ||
| "name": "goal-loop", | ||
| "version": "2.2.0", | ||
| "description": "A goal-bounded OODA loop for any decision or delivery cycle. Unifies goal-oriented orchestration with Observe→Orient→Decide→Act for domain-agnostic, parallel-capable, human-gated execution.", | ||
| "author": { | ||
| "name": "Luis Mendez" | ||
| }, | ||
| "homepage": "https://github.com/Luis85/agentic-workflow", | ||
| "bugs": { | ||
| "url": "https://github.com/Luis85/agentic-workflow/issues", | ||
| "security": "https://github.com/Luis85/agentic-workflow/security/advisories" | ||
| }, | ||
| "license": "MIT", | ||
| "keywords": [ | ||
| "agentic-workflow", | ||
| "ooda-loop", | ||
| "goal-oriented", | ||
| "orchestration", | ||
| "claude-plugin", | ||
| "decision-support", | ||
| "situational-awareness" | ||
| ], | ||
| "capabilities": { | ||
| "agents": [ | ||
| "agents/goal-orchestrator.md", | ||
| "agents/observer.md", | ||
| "agents/orienter.md", | ||
| "agents/decider.md", | ||
| "agents/actor.md", | ||
| "agents/loop-reviewer.md", | ||
| "agents/goal-critic.md", | ||
| "agents/signal-deduper.md", | ||
| "agents/risk-scout.md" | ||
| ], | ||
| "skills": [ | ||
| "skills/goal-loop", | ||
| "skills/set-goal", | ||
| "skills/observe", | ||
| "skills/orient", | ||
| "skills/decide", | ||
| "skills/act", | ||
| "skills/review-loop", | ||
| "skills/acceptance-criteria-helper", | ||
| "skills/trace-loop", | ||
| "skills/list-goals", | ||
| "skills/welcome", | ||
| "skills/create-goal", | ||
| "skills/activate-goal", | ||
| "skills/export-trace" | ||
| ], | ||
| "commands": [ | ||
| "commands/goal", | ||
| "commands/create-goal.md", | ||
| "commands/set-goal.md" | ||
| ] | ||
| }, | ||
| "entrypoints": { | ||
| "primary_skill": "goal-loop", | ||
| "primary_command": "/goal:start", | ||
| "method_doc": "docs/method.md", | ||
| "readme": "README.md" | ||
| }, | ||
| "compatibility": { | ||
| "claude_code": ">=1.0.0", | ||
| "adapters": ["codex", "cursor"] | ||
| } | ||
| } | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,25 @@ | ||
| --- | ||
| title: "Codex" | ||
| folder: "plugin-v2/.codex" | ||
| description: "Entry point for Codex-specific delivery mechanics layered on the shared goal-loop plugin rules." | ||
| entry_point: true | ||
| --- | ||
| # Codex | ||
|
|
||
| Codex-specific operating context for the `goal-loop` plugin. [`AGENTS.md`](../AGENTS.md) at the plugin root remains the shared source of truth for every AI coding agent; this folder holds the extra delivery mechanics that help Codex drive a Goal Loop cleanly. | ||
|
|
||
| Read in this order for non-trivial work: | ||
|
|
||
| 1. [`AGENTS.md`](../AGENTS.md) — plugin-wide rules, agent roster, operating conventions. | ||
| 2. [`../memory/constitution.md`](../memory/constitution.md) — governing principles. | ||
| 3. [`../docs/method.md`](../docs/method.md) — the canonical Goal Loop definition. | ||
| 4. [`instructions.md`](instructions.md) — Codex-specific defaults. | ||
| 5. The workflow playbook that matches the task: | ||
| - [`workflows/goal-iteration.md`](workflows/goal-iteration.md) — one end-to-end iteration of the loop. | ||
| - [`workflows/daily-brief.md`](workflows/daily-brief.md) — producing the daily brief for a recurring goal. | ||
|
|
||
| This folder is the Codex adapter layer. It extends but does not override `AGENTS.md` or `docs/method.md`. See [`../docs/tool-adapters.md`](../docs/tool-adapters.md) for the full adapter rationale. | ||
|
|
||
| > When a Codex operation has no matching file under `.codex/workflows/`, open the corresponding `skills/<name>/SKILL.md` and follow its step-by-step block directly. The Claude-Code-specific dispatch language (`AskUserQuestion`, `Task`) maps to "ask the human" and "delegate to a sub-agent" respectively. | ||
|
|
||
| This folder is part of the plugin. Local Codex cache, secrets, or session state should not be committed here. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,67 @@ | ||
| # Codex instructions | ||
|
|
||
| These instructions adapt the shared plugin rules in [`AGENTS.md`](../AGENTS.md) to Codex's operating style. Substantive method rules are not duplicated here — they live in `AGENTS.md` and [`docs/method.md`](../docs/method.md). | ||
|
|
||
| ## How Codex enacts plugin "skills" | ||
|
|
||
| The plugin's skill set lives at `skills/<name>/SKILL.md`. Each skill is written for a Claude Code dispatcher, but Codex has no dispatcher. Two substitutes: | ||
|
|
||
| 1. **Workflows under `.codex/workflows/`** are the Codex-shaped versions of the most-used skills. Run a workflow by opening the file and following its steps verbatim. The workflow names the subagent it consults — Codex roleplays that subagent or sub-dispatches to a downstream agent. | ||
|
|
||
| 2. **For skills without a Codex workflow**, open the `SKILL.md` file directly. Treat the `## What you do, step by step` block as the script. The `## Boundaries` section is the guardrail you must not violate. | ||
|
|
||
| When a workflow conflicts with the underlying `SKILL.md` (it should not — workflows are derived from skills), the `SKILL.md` is authoritative. | ||
|
|
||
| ## Default posture | ||
|
|
||
| - Act as a conductor of the Goal Loop, not a generalist coder. One goal slug at a time. | ||
| - Stay in the current phase. Do not run the next phase agent's work to "get ahead" — phase isolation is enforced by the constitution. | ||
| - Persist state explicitly. Every iteration's artifacts land under `goals/<slug>/` exactly where the templates say. | ||
| - Keep one branch (or one working session) to one goal slug. Switching goals means switching context cleanly. | ||
| - Prefer to drive the full iteration when invited, gating at the goal step and the act step. | ||
|
|
||
| ## Context loading | ||
|
|
||
| Before changing files, read: | ||
|
|
||
| 1. [`AGENTS.md`](../AGENTS.md) — plugin-wide rules. | ||
| 2. [`../memory/constitution.md`](../memory/constitution.md) — governing principles. | ||
| 3. [`../docs/method.md`](../docs/method.md) — the loop's canonical definition. | ||
| 4. The relevant pattern doc under [`../docs/usage-patterns.md`](../docs/usage-patterns.md). | ||
| 5. The active goal's `goals/<slug>/goal-state.md`. | ||
| 6. The relevant Codex workflow under [`workflows/`](workflows/). | ||
|
|
||
| Load scoped customisation guidance from [`../docs/customizing.md`](../docs/customizing.md) only when the task requires extending the plugin. | ||
|
|
||
| ## Workflow conventions | ||
|
|
||
| - **Gate at the goal.** No iteration runs until `goal-state.md` is complete and the human has signed off. Missing intent, constraints, acceptance criteria, mode, observe sources, or act-gate policy is a blocker — route back to the `set-goal` skill. | ||
| - **Gate at the act step.** Before any irreversible action runs, the human must approve the decision set. Pre-authorised reversible runbook items may auto-approve only when the goal's `act_gate` policy explicitly allows it. | ||
| - **One writer per artifact.** Only the conductor writes `goal-state.md`. Each phase agent writes only its own files. If an upstream artifact has a defect, surface it; do not silently fix it. | ||
| - **Cite signals.** Every claim in `orientation.md` references an observation by file and signal index. Every rationale in `decisions.md` traces to a line in orientation. | ||
| - **Log everything.** Skipped, deferred, and rejected items are recorded with rationale. Done-without-evidence is incomplete. | ||
| - **Domain-neutral language.** Examples may be software-shaped, but core artifacts use plain outcome language. Resist commit/branch/test metaphors when the goal is not about code. | ||
|
|
||
| ## GitHub access | ||
|
|
||
| When the goal involves a GitHub repository and access is available, Codex may use the host's GitHub surface (issues, PRs, search). Treat any GitHub mutation (open/close/comment, merge, label, release) as an Act-phase step that the goal's act-gate policy must cover. Read-only GitHub access is part of the observer's tool surface. | ||
|
|
||
| After producing or updating any artifact, report: | ||
|
|
||
| - Goal slug. | ||
| - Current phase + iteration. | ||
| - Artifact path just written. | ||
| - Pending gates (goal gate, act gate for decision-set id N). | ||
| - Next recommended step + the slash command or skill the human would invoke. | ||
|
|
||
| ## Safety rails | ||
|
|
||
| Ask before: | ||
|
|
||
| - Running any action whose `reversible` flag is `false`. | ||
| - Running any action that falls outside the goal's `act_gate` auto-approval scope. | ||
| - Performing destructive filesystem changes (delete, force-overwrite, history rewrites). | ||
| - Posting publicly visible content, moving money, sending external communications, or making any irreversible change to a shared system. | ||
| - Amending `goal-state.md`'s acceptance criteria, constraints, or observe sources — those are goal-level fields under the goal gate. | ||
|
|
||
| Do not ask before normal reads, normal local writes to your assigned phase artifact, or invoking the next phase agent when the orchestrator's procedure says it is time. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,75 @@ | ||
| # Workflow — Daily brief | ||
|
|
||
| A Codex playbook for producing the daily brief for a recurring Goal Loop. For the canonical method see [`../../docs/method.md`](../../docs/method.md); for the pattern see [`../../docs/usage-patterns.md`](../../docs/usage-patterns.md#2-daily-brief-recurring-awareness); for the worked example see [`../../docs/examples/daily-brief.md`](../../docs/examples/daily-brief.md). | ||
|
|
||
| ## When to use | ||
|
|
||
| - An active goal exists at `goals/<slug>/` with `mode: recurring` and `cadence: daily` (or the human triggers the brief on demand). | ||
| - The goal gate is signed. | ||
| - It is the right time to produce today's brief, or the human asked for it explicitly. | ||
|
|
||
| ## When not to use | ||
|
|
||
| - The goal is `one-shot` — that pattern does not produce a brief. | ||
| - The goal's status is `paused`, `cancelled`, or `done`. | ||
|
|
||
| ## Procedure | ||
|
|
||
| ### 1. Confirm the goal slug and the brief window | ||
|
|
||
| - Read `goal-state.md`. Confirm `mode: recurring`, `cadence: daily` (or compatible), and that `brief.md` is the expected output. | ||
| - Determine the brief window: the period the observers should treat as "since last time". For daily briefs, this is normally "since the prior brief's timestamp" — fall back to "last 24 hours" if no prior brief exists. | ||
|
|
||
| ### 2. Observe (parallel where independent) | ||
|
|
||
| - For each entry in `observe_sources`, spawn an observer scoped to that source. Observers run **only against declared sources** — never against an undeclared file (the `observe` skill's Boundaries forbid it; see [`../../skills/observe/SKILL.md`](../../skills/observe/SKILL.md) §Boundaries). | ||
| - Each observer writes `goals/<slug>/observations/<iso-timestamp>--<source-slug>.md`. Raw signals only. | ||
| - **Roll-forward handling without violating Observe boundaries.** The prior `brief.md` is NOT itself an observe source. If you want carry-over to surface in this iteration, either (a) declare `brief-archive` as an `observe_sources` entry (`type: archive`, `target: goals/<slug>/archive/`) in `goal-state.md` via `/goal:amend <slug>` so the observer can legitimately scan prior briefs, or (b) let the **orienter** read the prior `brief.md` directly in Step 3 (orient is allowed to read any artifact under `goals/<slug>/` per its contract; it just must not call out into other observe sources itself). The default daily-brief example uses option (b) — the orienter reads `archive/brief/<YYYY-MM-DD>.md` to compute the "what carried over" delta, no Observe boundary violated. | ||
|
|
||
| ### 3. Orient | ||
|
|
||
| - One orienter reads every observation in the window and the prior `orientation.md`. | ||
| - Writes the refreshed `goals/<slug>/orientation.md`. Every claim cites an observation. | ||
| - Summary highlights what is new since the prior brief, what is blocked, what is at risk. | ||
|
|
||
| ### 4. Decide | ||
|
|
||
| - One decider proposes the recommended-today set. Honour any constraint the goal imposes on set size (e.g. "no more than three recommended-today items"). | ||
| - For each proposal, mark the gate. Most daily-brief proposals are `gate: human` because the brief is advisory. | ||
| - Append the decision-set block to `goals/<slug>/decisions.md`. | ||
|
|
||
| ### 5. Render the brief | ||
|
|
||
| - Read [`../../templates/brief-template.md`](../../templates/brief-template.md). Produce `goals/<slug>/brief.md`: | ||
| - **TL;DR** — three bullets max, the changes that matter and the calls to action. | ||
| - **What's New** — material changes since the prior brief, with observation refs. | ||
| - **Recommended Today** — copy the approved decision set's actions in priority order. | ||
| - **Watching** — open risks, partials, and items rolled forward (the orienter reconstructs this from the prior `archive/brief/<YYYY-MM-DD>.md`). | ||
| - **Optional Actions** — proposals weighed but not promoted, surfaced so the human can pull them in. | ||
| - Archive a dated copy at `goals/<slug>/archive/brief/<YYYY-MM-DD>.md`. The current `brief.md` is overwritten on each cadence run; the archive preserves history (matches the Periodic Notes-compatible date-only filename per [`../../docs/cadence-recipes.md`](../../docs/cadence-recipes.md)). | ||
|
|
||
| ### 6. Act phase — typically skipped for daily briefs | ||
|
|
||
| Daily briefs are advisory: the *human* acts, the loop does not. But `review-loop` preflight ([`../../skills/review-loop/SKILL.md`](../../skills/review-loop/SKILL.md) §Step 1) requires either (a) at least one action log under `goals/<slug>/actions/iter-<n>/` for the current iteration, or (b) an explicit `act: skipped` `## History` row recording the skip reason. Skipping Act without the history record leaves Review dead-ended. | ||
|
|
||
| - **If every decision-set proposal carries `gate: human`** (the typical daily-brief shape), the `decide` skill's act gate resolves to "Reject all" or "Defer to next iteration", and `decide` then dispatches `goal-orchestrator` to set `current_phase: review` and append an `act: skipped — recommended for human action` row to `## History`. Review then runs cleanly with no action artifacts expected. | ||
| - **If `act_gate: never`** is set on the goal (decisions are surfaced but not executed), the same `act: skipped — policy forbids` row is recorded. | ||
| - **Never** jump straight from brief rendering to Review without one of these two paths — the orchestrator's `## History` row is what makes the skip auditable. | ||
|
|
||
| ### 7. Review | ||
|
|
||
| - One loop-reviewer writes `goals/<slug>/reviews/<iso-timestamp>.md`. | ||
|
Luis85 marked this conversation as resolved.
|
||
| - Verify the brief's acceptance criteria are met (e.g. ≤ N recommended-today items, freshness, rollover discipline). | ||
| - Outcome is normally `continue` for recurring goals; emit `close-met` only when the goal's stop condition (recorded in `goal-state.md`) has triggered. | ||
|
|
||
| ## Reporting | ||
|
|
||
| - The path of today's `brief.md` and its archived dated copy. | ||
| - The decision-set id from `decisions.md`. | ||
| - Any items that rolled forward unactioned for more than the threshold the goal declares (if any) — surface as a watch signal. | ||
|
|
||
| ## Safety rails | ||
|
|
||
| - The brief proposes; the human acts. Do not perform any `gate: human` proposal during the daily-brief workflow unless the goal's `act_gate` policy explicitly authorises it. | ||
| - Never silently drop a rolled-forward item. If it is no longer relevant, the brief must say so and explain why. | ||
| - Never edit the archive. The audit trail of past briefs is immutable. | ||
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.