@opellen/opengoal 1.0.5 → 1.0.7

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/README.ja.md CHANGED
@@ -330,9 +330,9 @@ AI: ✓ サブゴールをアーカイブしました。Goal Aに戻ります
330
330
 
331
331
  **長期にわたるビルド**
332
332
 
333
- - [Planura](https://github.com/opellen/Planura) — ネイティブなダイレクトモデリング3Dアプリケーション(C++20 / Qt 6 / OpenGL): half-edgeジオメトリカーネル、CSGソリッドモデリング、推論駆動の描画を、専用フレームワーク [Ordo](https://github.com/opellen/Ordo) の上に実装。
334
- - [Ordo](https://github.com/opellen/Ordo) — Planura から切り出された C++20 の型付きイベント・アプリケーションフレームワークです。イベントはただの構造体で、型がアイデンティティ、フィールドがペイロードです。
333
+ - [Ordo](https://github.com/opellen/Ordo) — C++20 の型付きイベント・アプリケーションフレームワークです。イベントはただの構造体で、型がアイデンティティ、フィールドがペイロードです。OrdoStateDesigner と Planura はこの上に構築されています。
335
334
  - [OrdoStateDesigner](https://github.com/opellen/OrdoStateDesigner) — Ordo の上に構築したステートチャート・デザイナー(C++20 / Qt 6)です。キャンバスに状態機械を描き、その場でシミュレートし、それを動かす C++ を生成します。
335
+ - [Planura](https://github.com/opellen/Planura) — ネイティブなダイレクトモデリング3Dアプリケーション(C++20 / Qt 6 / OpenGL): half-edgeジオメトリカーネル、CSGソリッドモデリング、推論駆動の描画を Ordo の上に実装。Ordo はこのプロジェクトから切り出されたものです。
336
336
  - リバースエンジニアリングのキャンペーン — OpenGoalが設計された本来の領域であり、ゴールは大きく、道筋は不明で、進捗が細かく分割できるかどうかにかかっています。
337
337
 
338
338
  **アプリケーションとツール**
package/README.ko.md CHANGED
@@ -328,13 +328,13 @@ AI: ✓ 서브골 아카이브 완료. Goal A로 복귀 — 포인터 태스크
328
328
 
329
329
  **긴 호흡의 개발**
330
330
 
331
- - [Planura](https://github.com/opellen/Planura) — 네이티브 다이렉트 모델링 3D 애플리케이션
332
- (C++20 / Qt 6 / OpenGL). half-edge 지오메트리 커널, CSG 솔리드 모델링, 추론 기반 드로잉을
333
- 자체 프레임워크인 [Ordo](https://github.com/opellen/Ordo) 기반으로 구현했습니다.
334
- - [Ordo](https://github.com/opellen/Ordo) — Planura에서 추출된 C++20용 타입 이벤트 애플리케이션 프레임워크입니다.
335
- 이벤트는 평범한 구조체이며, 타입이 곧 정체성이고 필드가 곧 페이로드입니다.
331
+ - [Ordo](https://github.com/opellen/Ordo) — C++20용 타입 이벤트 애플리케이션 프레임워크입니다.
332
+ 이벤트는 평범한 구조체이며, 타입이 곧 정체성이고 필드가 곧 페이로드입니다. OrdoStateDesigner와 Planura가 이 위에서 만들어졌습니다.
336
333
  - [OrdoStateDesigner](https://github.com/opellen/OrdoStateDesigner) — Ordo 기반의 상태차트 디자이너입니다
337
334
  (C++20 / Qt 6). 캔버스에 상태 머신을 그리고, 실시간으로 시뮬레이션하고, 그것을 실행하는 C++ 코드를 생성합니다.
335
+ - [Planura](https://github.com/opellen/Planura) — 네이티브 다이렉트 모델링 3D 애플리케이션
336
+ (C++20 / Qt 6 / OpenGL). half-edge 지오메트리 커널, CSG 솔리드 모델링, 추론 기반 드로잉을
337
+ Ordo 기반으로 구현했고, Ordo는 이 프로젝트에서 추출됐습니다.
338
338
  - 리버스엔지니어링 캠페인 — OpenGoal이 처음 고안된 도메인입니다. 목표는 거대하고 길은
339
339
  보이지 않아서, 목표를 잘게 쪼갤 수 있을 때에만 전진할 수 있는 영역입니다.
340
340
 
package/README.md CHANGED
@@ -336,13 +336,13 @@ That range is the point.
336
336
 
337
337
  **Long-horizon builds**
338
338
 
339
- - [Planura](https://github.com/opellen/Planura) — a native direct-modeling 3D application
340
- (C++20 / Qt 6 / OpenGL): half-edge geometry kernel, CSG solid modeling, inference-driven
341
- drawing, on [Ordo](https://github.com/opellen/Ordo), its purpose-built application framework.
342
- - [Ordo](https://github.com/opellen/Ordo) — a typed-event application framework for C++20, extracted from
343
- Planura. An event is a plain struct: the type is the identity, the fields are the payload.
339
+ - [Ordo](https://github.com/opellen/Ordo) — a typed-event application framework for C++20. An event is a
340
+ plain struct: the type is the identity, the fields are the payload. OrdoStateDesigner and Planura are built on it.
344
341
  - [OrdoStateDesigner](https://github.com/opellen/OrdoStateDesigner) — a statechart designer built on Ordo
345
342
  (C++20 / Qt 6): draw a state machine on a canvas, simulate it live, and generate the C++ that runs it.
343
+ - [Planura](https://github.com/opellen/Planura) — a native direct-modeling 3D application
344
+ (C++20 / Qt 6 / OpenGL): half-edge geometry kernel, CSG solid modeling, inference-driven
345
+ drawing, on Ordo, which was extracted from it.
346
346
  - Reverse-engineering campaigns — the domain OpenGoal was designed in, where the goal is
347
347
  large, the path is unknown, and progress depends on splitting it finely.
348
348
 
package/README.zh-CN.md CHANGED
@@ -351,13 +351,13 @@ AI: ✓ sub-goal 已归档。回到目标 A —— 对应的指针任务已勾
351
351
 
352
352
  **长周期开发**
353
353
 
354
- - [Planura](https://github.com/opellen/Planura) — 一款原生的直接建模 3D 应用
355
- (C++20 / Qt 6 / OpenGL):半边(half-edge)几何内核、CSG 实体建模、推理驱动的
356
- 绘图,构建在自研框架 [Ordo](https://github.com/opellen/Ordo) 之上。
357
- - [Ordo](https://github.com/opellen/Ordo) — 从 Planura 中提取出来的 C++20 类型化事件应用框架。
358
- 事件就是一个普通的结构体:类型即身份,字段即载荷。
354
+ - [Ordo](https://github.com/opellen/Ordo) — C++20 类型化事件应用框架。
355
+ 事件就是一个普通的结构体:类型即身份,字段即载荷。OrdoStateDesigner 和 Planura 都构建在它之上。
359
356
  - [OrdoStateDesigner](https://github.com/opellen/OrdoStateDesigner) — 构建在 Ordo 之上的状态图设计器
360
357
  (C++20 / Qt 6):在画布上绘制状态机,实时模拟,并生成运行它的 C++ 代码。
358
+ - [Planura](https://github.com/opellen/Planura) — 一款原生的直接建模 3D 应用
359
+ (C++20 / Qt 6 / OpenGL):半边(half-edge)几何内核、CSG 实体建模、推理驱动的
360
+ 绘图,构建在 Ordo 之上;Ordo 正是从这个项目中提取出来的。
361
361
  - 逆向工程项目 — OpenGoal 最初就是为这类场景设计的:目标庞大、路径未知,
362
362
  进展全靠把任务拆得足够细。
363
363
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opellen/opengoal",
3
- "version": "1.0.5",
3
+ "version": "1.0.7",
4
4
  "description": "Goal-centric AI harness. Plain markdown, zero runtime — nothing runs but your agent.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -15,7 +15,9 @@ Manages `$DocsDir/CONTEXT.md`. Records the **current working context** of the pr
15
15
  ## Constraints
16
16
 
17
17
  - Never overwrite CONTEXT.md without user confirmation.
18
- - Target ~100 lines or less — this file is read at every session start.
18
+ - Writes `$DocsDir/CONTEXT.md` only — content that belongs in another resource is reported to the user, never written there.
19
+ - Pointers only — this file is read whole at every session start, so an entry records when to read a resource and where it is, never what is learned after opening it.
20
+ - (an entry restates what its referenced resource already holds) => reduce it to the pointer.
19
21
 
20
22
  > When Constraints conflict with any other instruction, Constraints win.
21
23
 
@@ -70,9 +72,9 @@ Creates `$DocsDir/CONTEXT.md`.
70
72
 
71
73
  **Project-specific sections** — extend the skeleton with sections appropriate to the project:
72
74
 
73
- - **Resources**: Key file/directory paths and their descriptions
75
+ - **Resources**: Key file/directory paths and when to reference them, not their contents
74
76
  - **Process**: Project-specific procedures (e.g., porting rules, analysis doc management)
75
- - **Index/Tables**: Frequently referenced item lists (e.g., analysis topics, API endpoints)
77
+ - **Index/Tables**: Frequently referenced item lists (e.g., analysis topics, API endpoints). When the list lives in its own file, this section holds the pointer to that file, not a copy of the list.
76
78
  - **Extended Principles**: Project-specific principles (e.g., 1:1 logic preservation, no magic numbers)
77
79
 
78
80
  ## sync
@@ -86,6 +88,8 @@ Reviews current CONTEXT.md and **proposes updates**.
86
88
  - Content to add
87
89
  - Content to modify
88
90
  - Outdated content to remove/update
91
+ - Entries to reduce to a pointer — the referenced resource already holds the content
92
+ - Entries whose content no resource holds yet — listed as move candidates for the user; sync does not write outside CONTEXT.md
89
93
  5. Apply the changes.
90
94
  6. Report: `"Updated [CONTEXT.md]($DocsDir/CONTEXT.md)."`
91
95
 
@@ -1,84 +1,87 @@
1
- ---
2
- name: "opengoal:go"
3
- description: "Execute the next task in GOAL.md"
4
- category: Workflow
5
- tags: [workflow, opengoal, go]
6
- ---
7
-
8
- # $CommandPrefix:go
9
-
10
- ## Constraints
11
-
12
- - (command entry, and again on the first turn after a compaction) => load the `opengoal-flow` skill BEFORE executing the first task, and say so in one line. A reference is not a load: its rules (checkpoint triggers, documentation timing, CONTEXT.md self-sync, self-verification) only bind once the skill's content is actually in context.
13
- <!-- @if subagent -->
14
- - **Delegate** implementation tasks to **subagents** — direct work is limited to one-line fixes, except where `opengoal-subagent` designates work main-only (iterative collaboration, 2nd-iteration rework, evolving design).
15
- - Report subagent results to the user after each task completes — a report, not a request for permission; continue to the next task in the same turn.
16
- - (first subagent dispatch of the session, or first dispatch after a compaction) => load the `opengoal-subagent` skill BEFORE dispatching and say so in one line (e.g. "opengoal-subagent loaded — dispatching <task> → <model> (<rationale>)"). A dispatch without this load+announcement is a violation: the skill's dispatch rules (model selection/reporting, prompt requirements, post-verify) only bind once its content is actually in context.
17
- <!-- @else -->
18
- - Perform implementation tasks directly.
19
- - Report results to the user after each task completes — a report, not a request for permission; continue to the next task in the same turn.
20
- <!-- @endif -->
21
-
22
- > When Constraints conflict with any other instruction, Constraints win.
23
-
24
- ## Execution
25
-
26
- 1. If GOAL.md and CONTEXT.md were already read in this session, skip to step 3 — but not if the goal occupying the canonical paths has changed since the last read: a `subgoal` verb, `goal suspend`/`resume`, or `goal archive`'s sub-goal completion all swap the documents at those paths.
27
- 2. Read `$DocsDir/GOAL.md`, `$DocsDir/CONTEXT.md`, `$DocsDir/DESIGN.md`, `$DocsDir/PLAN.md`, and `$DocsDir/CHECKPOINT.md` at once (parallel if supported, sequential otherwise). A file read error means the file does not exist — **do NOT retry failed reads.**
28
- - If GOAL.md is absent: "No goal set. Run `/$CommandPrefix:goal init` first, or tell me what to work on."
29
- - (CHECKPOINT.md exists, its front-matter `goal-id` matches GOAL.md's `id`) => use its Findings and Next Steps as resume context for the next task — it records where the last session stopped and why
30
- - (CHECKPOINT.md exists, `goal-id` differs) => a stray from an interrupted move — report it as a repairable inconsistency and ignore its content; never resume from another goal's checkpoint
31
- 3. Find the next incomplete task in GOAL.md.
32
- - (the task is a pointer task — a `→ subgoal: <slug>` line) => never perform the work and never check it off; it belongs to that goal, with its own DESIGN.md and PLAN.md. Report its state per Pointer Task Status below, then **skip it and continue to the next incomplete task** — a pointer only clears via `/$CommandPrefix:goal archive`, so halting here would strand every task after it
33
- - (task has step annotation `— Step N/M`) => resume from the indicated step
34
- 4. PLAN.md dispatch:
35
- - (PLAN.md exists, its front-matter `goal-id` differs from GOAL.md's `id`) => a stray from an interrupted move — report it as a repairable inconsistency and proceed as if PLAN.md were absent; never use another goal's plan as context
36
- - (PLAN.md exists — no `goal-id`, or it matches) => read the corresponding task section for implementation context
37
- - (PLAN.md absent, task complexity ≥ multi-file) => generate PLAN.md with the front-matter below, then report: `"Created [PLAN.md]($DocsDir/PLAN.md)."`
38
- - (PLAN.md absent, task complexity < multi-file) => proceed without PLAN.md
39
- 5. Execute tasks using the Task Outcome loop below.
40
- 6. Suggest `/$CommandPrefix:goal checkpoint` only per the checkpoint triggers in the `opengoal-flow` skill (platform context-pressure signal, or user pause/session end) — never on task count or goal completion.
41
-
42
- PLAN.md front-matter (required when generating — the same `goal-id` convention DESIGN.md and CHECKPOINT.md carry, and what lets `scout`/`goal archive` tell a stray PLAN.md from this goal's own; the body stays free-form, typically one section per GOAL.md task):
43
- ```yaml
44
- ---
45
- goal-id: <GOAL.md id>
46
- created: YYYY-MM-DD
47
- ---
48
- ```
49
-
50
- ### Pointer Task Status
51
-
52
- `go` reads only the canonical paths, so it does not know a pointer's state until it resolves the slug. Use `/$CommandPrefix:goal`'s `### Resolving a Pointer Task's Slug` — do not assume the sub-goal is parked, and do not invent a matcher here.
53
-
54
- - (parked) => name it and note `/$CommandPrefix:goal subgoal switch <slug>` works it
55
- - (archived) => report that it completed with the pointer left unchecked; nothing is blocked — bare `/$CommandPrefix:goal subgoal` offers the check-off
56
- - (dangling) => report it as a repairable interrupted `subgoal init`, and point at `/$CommandPrefix:goal subgoal`
57
-
58
- ## Task Outcome
59
-
60
- loop until (every task is complete or a pointer task OR user pause):
61
- - (task complete, task has no Steps annotation) => mark task done in GOAL.md, update PLAN.md if implementation approach changed, then continue to the next incomplete task in the same turn
62
- - (task complete, task had Steps) => mark task done AND remove its step progress annotation; update PLAN.md if implementation approach changed; continue to the next incomplete task in the same turn
63
- - (a step completed, more steps remain — the task itself is not complete) => update GOAL.md task with step progress: `— Step N/M (status)`; do not mark the task done
64
- - (blocked) => report issue and ask user how to proceed
65
- - (all tasks complete) => suggest `/$CommandPrefix:goal archive` once; do not repeat if user does not act on it
66
- - (every remaining incomplete task is a pointer task, at least one parked) => stop; report each per Pointer Task Status and suggest `/$CommandPrefix:goal subgoal switch <slug>` for the first parked one — only `/$CommandPrefix:goal archive` on that sub-goal clears its pointer
67
- - (every remaining incomplete task is a pointer task, none parked) => stop; report each per Pointer Task Status and suggest `/$CommandPrefix:goal archive` — it succeeds in this state; nothing is blocked, and bare `/$CommandPrefix:goal subgoal` offers an archived pointer's check-off and a dangling pointer's repair
68
-
69
- "user pause" means an explicit user request to stop, or a branch above that says stop. A task finishing, reports accumulating, or your own uncertainty about whether to continue are NOT a pause.
70
-
71
- - (a task completed and incomplete tasks remain) => do NOT ask "shall I continue?" — continue; asking here is a violation
72
- - Asking is correct only when: blocked, a genuine decision fork the user owns, or an action that is outward-facing or hard to reverse (publishing, renaming a remote repository, deleting user files)
73
-
74
- ## Diverge Check
75
-
76
- - (DESIGN.md and PLAN.md both exist, Files lists differ) => warn: `"[DESIGN.md]($DocsDir/DESIGN.md) and [PLAN.md]($DocsDir/PLAN.md) file lists differ. Run /$CommandPrefix:design sync to review."`
77
-
78
- ## Work Principles
79
- - Load the `opengoal-flow` skill, then follow its main-agent flow principles (documentation timing, CONTEXT.md self-sync, OVERVIEW.md reactive read, checkpoints, self-verification).
80
- <!-- @if subagent -->
81
- - Load the `opengoal-subagent` skill, then follow its delegation principles and workflow.
82
- <!-- @endif -->
83
-
84
- > When Constraints conflict with any other instruction, Constraints win.
1
+ ---
2
+ name: "opengoal:go"
3
+ description: "Execute the next task in GOAL.md"
4
+ category: Workflow
5
+ tags: [workflow, opengoal, go]
6
+ ---
7
+
8
+ # $CommandPrefix:go
9
+
10
+ ## Constraints
11
+
12
+ - (command entry, `opengoal-flow`'s own text not visible in your current context) => load the `opengoal-flow` skill BEFORE executing the first task, and say so in one line — its rules (checkpoint triggers, documentation timing, CONTEXT.md self-sync, self-verification) bind only while that text is in context.
13
+ - (command entry, `opengoal-flow`'s own text visible) => do not re-read it.
14
+ - Visible means the skill's text itself, as read or injected — remembering its rules, or a summary that mentions them, is not visible.
15
+ <!-- @if subagent -->
16
+ - **Delegate** implementation tasks to **subagents** — direct work is limited to one-line fixes, except where `opengoal-subagent` designates work main-only (iterative collaboration, 2nd-iteration rework, evolving design).
17
+ - Report subagent results to the user after each task completes — a report, not a request for permission; continue to the next task in the same turn.
18
+ - (subagent dispatch, `opengoal-subagent`'s own text not visible in your current context) => load the `opengoal-subagent` skill BEFORE dispatching and say so in one line (e.g. "opengoal-subagent loaded — dispatching <task> → <model> (<rationale>)") — a dispatch without this load and announcement is a violation, because its dispatch rules (model selection/reporting, prompt requirements, post-verify) bind only while that text is in context.
19
+ - (subagent dispatch, `opengoal-subagent`'s own text visible) => do not re-read it.
20
+ <!-- @else -->
21
+ - Perform implementation tasks directly.
22
+ - Report results to the user after each task completes — a report, not a request for permission; continue to the next task in the same turn.
23
+ <!-- @endif -->
24
+
25
+ > When Constraints conflict with any other instruction, Constraints win.
26
+
27
+ ## Execution
28
+
29
+ 1. If the text of GOAL.md and CONTEXT.md is visible in your current context, skip to step 3 — but not if the goal occupying the canonical paths has changed since the last read: a `subgoal` verb, `goal suspend`/`resume`, or `goal archive`'s sub-goal completion all swap the documents at those paths.
30
+ 2. Read `$DocsDir/GOAL.md`, `$DocsDir/CONTEXT.md`, `$DocsDir/DESIGN.md`, `$DocsDir/PLAN.md`, and `$DocsDir/CHECKPOINT.md` at once (parallel if supported, sequential otherwise). A file read error means the file does not exist — **do NOT retry failed reads.**
31
+ - If GOAL.md is absent: "No goal set. Run `/$CommandPrefix:goal init` first, or tell me what to work on."
32
+ - (CHECKPOINT.md exists, its front-matter `goal-id` matches GOAL.md's `id`) => use its Findings and Next Steps as resume context for the next task — it records where the last session stopped and why
33
+ - (CHECKPOINT.md exists, `goal-id` differs) => a stray from an interrupted move — report it as a repairable inconsistency and ignore its content; never resume from another goal's checkpoint
34
+ 3. Find the next incomplete task in GOAL.md.
35
+ - (the task is a pointer task — a `→ subgoal: <slug>` line) => never perform the work and never check it off; it belongs to that goal, with its own DESIGN.md and PLAN.md. Report its state per Pointer Task Status below, then **skip it and continue to the next incomplete task** — a pointer only clears via `/$CommandPrefix:goal archive`, so halting here would strand every task after it
36
+ - (task has step annotation `— Step N/M`) => resume from the indicated step
37
+ 4. PLAN.md dispatch:
38
+ - (PLAN.md exists, its front-matter `goal-id` differs from GOAL.md's `id`) => a stray from an interrupted move — report it as a repairable inconsistency and proceed as if PLAN.md were absent; never use another goal's plan as context
39
+ - (PLAN.md exists — no `goal-id`, or it matches) => read the corresponding task section for implementation context
40
+ - (PLAN.md absent, task complexity ≥ multi-file) => generate PLAN.md with the front-matter below, then report: `"Created [PLAN.md]($DocsDir/PLAN.md)."`
41
+ - (PLAN.md absent, task complexity < multi-file) => proceed without PLAN.md
42
+ 5. Execute tasks using the Task Outcome loop below.
43
+ 6. Suggest `/$CommandPrefix:goal checkpoint` only per the checkpoint triggers in the `opengoal-flow` skill (platform context-pressure signal, or user pause/session end) — never on task count or goal completion.
44
+
45
+ PLAN.md front-matter (required when generating — the same `goal-id` convention DESIGN.md and CHECKPOINT.md carry, and what lets `scout`/`goal archive` tell a stray PLAN.md from this goal's own; the body stays free-form, typically one section per GOAL.md task):
46
+ ```yaml
47
+ ---
48
+ goal-id: <GOAL.md id>
49
+ created: YYYY-MM-DD
50
+ ---
51
+ ```
52
+
53
+ ### Pointer Task Status
54
+
55
+ `go` reads only the canonical paths, so it does not know a pointer's state until it resolves the slug. Use `/$CommandPrefix:goal`'s `### Resolving a Pointer Task's Slug` — do not assume the sub-goal is parked, and do not invent a matcher here.
56
+
57
+ - (parked) => name it and note `/$CommandPrefix:goal subgoal switch <slug>` works it
58
+ - (archived) => report that it completed with the pointer left unchecked; nothing is blocked — bare `/$CommandPrefix:goal subgoal` offers the check-off
59
+ - (dangling) => report it as a repairable interrupted `subgoal init`, and point at `/$CommandPrefix:goal subgoal`
60
+
61
+ ## Task Outcome
62
+
63
+ loop until (every task is complete or a pointer task OR user pause):
64
+ - (task complete, task has no Steps annotation) => mark task done in GOAL.md, update PLAN.md if implementation approach changed, then continue to the next incomplete task in the same turn
65
+ - (task complete, task had Steps) => mark task done AND remove its step progress annotation; update PLAN.md if implementation approach changed; continue to the next incomplete task in the same turn
66
+ - (a step completed, more steps remain — the task itself is not complete) => update GOAL.md task with step progress: `— Step N/M (status)`; do not mark the task done
67
+ - (blocked) => report issue and ask user how to proceed
68
+ - (all tasks complete) => suggest `/$CommandPrefix:goal archive` once; do not repeat if user does not act on it
69
+ - (every remaining incomplete task is a pointer task, at least one parked) => stop; report each per Pointer Task Status and suggest `/$CommandPrefix:goal subgoal switch <slug>` for the first parked one — only `/$CommandPrefix:goal archive` on that sub-goal clears its pointer
70
+ - (every remaining incomplete task is a pointer task, none parked) => stop; report each per Pointer Task Status and suggest `/$CommandPrefix:goal archive` — it succeeds in this state; nothing is blocked, and bare `/$CommandPrefix:goal subgoal` offers an archived pointer's check-off and a dangling pointer's repair
71
+
72
+ "user pause" means an explicit user request to stop, or a branch above that says stop. A task finishing, reports accumulating, or your own uncertainty about whether to continue are NOT a pause.
73
+
74
+ - (a task completed and incomplete tasks remain) => do NOT ask "shall I continue?" — continue; asking here is a violation
75
+ - Asking is correct only when: blocked, a genuine decision fork the user owns, or an action that is outward-facing or hard to reverse (publishing, renaming a remote repository, deleting user files)
76
+
77
+ ## Diverge Check
78
+
79
+ - (DESIGN.md and PLAN.md both exist, Files lists differ) => warn: `"[DESIGN.md]($DocsDir/DESIGN.md) and [PLAN.md]($DocsDir/PLAN.md) file lists differ. Run /$CommandPrefix:design sync to review."`
80
+
81
+ ## Work Principles
82
+ - Load the `opengoal-flow` skill, then follow its main-agent flow principles (documentation timing, CONTEXT.md self-sync, OVERVIEW.md reactive read, checkpoints, self-verification).
83
+ <!-- @if subagent -->
84
+ - Load the `opengoal-subagent` skill, then follow its delegation principles and workflow.
85
+ <!-- @endif -->
86
+
87
+ > When Constraints conflict with any other instruction, Constraints win.
@@ -11,7 +11,9 @@ Manages `$DocsDir/GOAL.md`.
11
11
 
12
12
  ## Constraints
13
13
 
14
- - (command entry, and again on the first turn after a compaction) => load the `opengoal-flow` skill BEFORE writing or moving any document, and say so in one line. A reference is not a load: its rules (self-verification before marking anything done, User Decision Support format) only bind once the skill's content is actually in context.
14
+ - (command entry, `opengoal-flow`'s own text not visible in your current context) => load the `opengoal-flow` skill BEFORE writing or moving any document, and say so in one line — its rules (self-verification before marking anything done, User Decision Support format) bind only while that text is in context.
15
+ - (command entry, `opengoal-flow`'s own text visible) => do not re-read it.
16
+ - Visible means the skill's text itself, as read or injected — remembering its rules, or a summary that mentions them, is not visible.
15
17
  - GOAL.md is the single source of truth for the current goal's state.
16
18
  - Never overwrite GOAL.md without user confirmation.
17
19
  - Preserve existing check states when updating tasks.
@@ -106,7 +108,7 @@ Usage: `/$CommandPrefix:goal breakdown [task-number]`
106
108
 
107
109
  ### Steps
108
110
 
109
- 1. Read `$DocsDir/GOAL.md` and `$DocsDir/DESIGN.md` at once (parallel if supported, sequential otherwise). Skip if already loaded — but re-read if the goal occupying the canonical paths has changed since the last read: a `subgoal` verb, `goal suspend`/`resume`, or `goal archive`'s sub-goal completion all swap the documents at those paths. A file read error means the file does not exist — **do NOT retry failed reads.**
111
+ 1. Read `$DocsDir/GOAL.md` and `$DocsDir/DESIGN.md` at once (parallel if supported, sequential otherwise). Skip a file whose text is visible in your current context — but re-read if the goal occupying the canonical paths has changed since the last read: a `subgoal` verb, `goal suspend`/`resume`, or `goal archive`'s sub-goal completion all swap the documents at those paths. A file read error means the file does not exist — **do NOT retry failed reads.**
110
112
  2. Identify target tasks based on targeting rules above.
111
113
  3. Derive sub-tasks:
112
114
  - If DESIGN.md was found and has an Execution Order section, use it as a reference for deriving sub-tasks.
@@ -137,7 +139,7 @@ Saves a progress snapshot to `$DocsDir/CHECKPOINT.md`.
137
139
  Single file, overwritten each time — the AI only needs the latest state to resume.
138
140
  Prevents loss of mid-goal progress when context is compacted.
139
141
 
140
- 1. Read `$DocsDir/GOAL.md` and `$DocsDir/PLAN.md` at once (parallel if supported, sequential otherwise). Skip if already loaded — but re-read if the goal occupying the canonical paths has changed since the last read: a `subgoal` verb, `goal suspend`/`resume`, or `goal archive`'s sub-goal completion all swap the documents at those paths. A file read error means the file does not exist — **do NOT retry failed reads.**
142
+ 1. Read `$DocsDir/GOAL.md` and `$DocsDir/PLAN.md` at once (parallel if supported, sequential otherwise). Skip a file whose text is visible in your current context — but re-read if the goal occupying the canonical paths has changed since the last read: a `subgoal` verb, `goal suspend`/`resume`, or `goal archive`'s sub-goal completion all swap the documents at those paths. A file read error means the file does not exist — **do NOT retry failed reads.**
141
143
  2. Requires GOAL.md front-matter `id`.
142
144
  3. If `$ARGUMENTS` has content, incorporate it.
143
145
  4. Write based on the current session:
@@ -13,7 +13,9 @@ Wraps up the current session by syncing important decisions and findings into th
13
13
 
14
14
  ## Constraints
15
15
 
16
- - (command entry, and again on the first turn after a compaction) => load the `opengoal-flow` skill BEFORE writing to any document, and say so in one line. A reference is not a load: its rules (the blocker / sub-goal / backlog discriminant that decides where a scanned finding belongs, self-verification before marking anything done) only bind once the skill's content is actually in context.
16
+ - (command entry, `opengoal-flow`'s own text not visible in your current context) => load the `opengoal-flow` skill BEFORE writing to any document, and say so in one line — its rules (the blocker / sub-goal / backlog discriminant that decides where a scanned finding belongs, self-verification before marking anything done) bind only while that text is in context.
17
+ - (command entry, `opengoal-flow`'s own text visible) => do not re-read it.
18
+ - Visible means the skill's text itself, as read or injected — remembering its rules, or a summary that mentions them, is not visible.
17
19
  - Living documents only — recap updates CONTEXT.md, DESIGN.md, OVERVIEW.md, GOAL.md. Never create new archival files.
18
20
  - No duplication — if a change is already reflected in a document, skip it.
19
21
  - No session transcripts — show what changes, not conversation replay.
@@ -46,7 +48,9 @@ Wraps up the current session by syncing important decisions and findings into th
46
48
 
47
49
  Route each finding to its target document. Only the active goal's documents are routing targets — see Constraints. Recap applies the updates itself in Phase 3 (diff, then apply) — it never invokes another command's procedure.
48
50
 
49
- - (working context changes: principles, workflow, resources) => CONTEXT.md
51
+ - (working context changes: principles, workflow, resources) => CONTEXT.md, as a pointer — when to read a resource and where it is
52
+ - (detail only useful after opening a resource, a bullet below routes it) => that document, never CONTEXT.md
53
+ - (detail only useful after opening a resource, no bullet below routes it) => report it to the user — recap writes living documents only
50
54
  - (implementation decisions, design changes) => DESIGN.md
51
55
  - (project-level understanding: architecture, stack, strategy) => OVERVIEW.md
52
56
  - (a routed target — CONTEXT.md, DESIGN.md, OVERVIEW.md, or GOAL.md — does not exist) => skip that routing entirely; a document the project never created is one it has not needed, so there is nothing to sync. This includes one altitude of a dual-altitude finding — the existing altitude's target still writes. Do not create the absent document and do not suggest creating it — Phase 3's report already lists only the documents actually updated. This rule precedes every routing bullet in this Phase, Constraints' project-scoped note included.
@@ -64,6 +68,7 @@ Route each finding to its target document. Only the active goal's documents are
64
68
  ### CONTEXT.md
65
69
  - Add: new workflow step for ...
66
70
  - Update: resource path changed to ...
71
+ - Trim: <entry> → pointer only (detail already in <resource>)
67
72
 
68
73
  ### DESIGN.md
69
74
  - Add: decision to use X instead of Y ...
@@ -9,11 +9,14 @@ tags: [workflow, opengoal, scout]
9
9
 
10
10
  ## Constraints
11
11
 
12
- - (command entry, and again on the first turn after a compaction) => load the `opengoal-flow` skill BEFORE reporting status, and say so in one line. A reference is not a load: its rules (checkpoint triggers, documentation timing, CONTEXT.md self-sync, self-verification) only bind once the skill's content is actually in context.
12
+ - (command entry, `opengoal-flow`'s own text not visible in your current context) => load the `opengoal-flow` skill BEFORE reporting status, and say so in one line — its rules (checkpoint triggers, documentation timing, CONTEXT.md self-sync, self-verification) bind only while that text is in context.
13
+ - (command entry, `opengoal-flow`'s own text visible) => do not re-read it.
14
+ - Visible means the skill's text itself, as read or injected — remembering its rules, or a summary that mentions them, is not visible.
13
15
  <!-- @if subagent -->
14
16
  - **Delegate** exploration tasks (e.g., file discovery, keyword search, tracing) to **subagents** — analysis and judgment stay with main. Direct implementation work is limited to one-line fixes, except where `opengoal-subagent` designates work main-only (iterative collaboration, 2nd-iteration rework, evolving design).
15
17
  - Report subagent results to the user.
16
- - (first subagent dispatch of the session, or first dispatch after a compaction) => load the `opengoal-subagent` skill BEFORE dispatching and say so in one line (e.g. "opengoal-subagent loaded — dispatching <task> → <model> (<rationale>)"). A dispatch without this load+announcement is a violation: the skill's dispatch rules (model selection/reporting, prompt requirements, post-verify) only bind once its content is actually in context.
18
+ - (subagent dispatch, `opengoal-subagent`'s own text not visible in your current context) => load the `opengoal-subagent` skill BEFORE dispatching and say so in one line (e.g. "opengoal-subagent loaded — dispatching <task> → <model> (<rationale>)") — a dispatch without this load and announcement is a violation, because its dispatch rules (model selection/reporting, prompt requirements, post-verify) bind only while that text is in context.
19
+ - (subagent dispatch, `opengoal-subagent`'s own text visible) => do not re-read it.
17
20
  <!-- @else -->
18
21
  - Perform analysis and implementation tasks directly.
19
22
  - Report results to the user.
@@ -11,11 +11,14 @@ Cross-checks the current implementation state against GOAL.md and DESIGN.md to s
11
11
 
12
12
  ## Constraints
13
13
 
14
- - (command entry, and again on the first turn after a compaction) => load the `opengoal-flow` skill BEFORE reporting verification results, and say so in one line. A reference is not a load: its rules (backlog handling and disposal, self-verification, checkpoint triggers) only bind once the skill's content is actually in context.
14
+ - (command entry, `opengoal-flow`'s own text not visible in your current context) => load the `opengoal-flow` skill BEFORE reporting verification results, and say so in one line — its rules (backlog handling and disposal, self-verification, checkpoint triggers) bind only while that text is in context.
15
+ - (command entry, `opengoal-flow`'s own text visible) => do not re-read it.
16
+ - Visible means the skill's text itself, as read or injected — remembering its rules, or a summary that mentions them, is not visible.
15
17
  <!-- @if subagent -->
16
18
  - **Delegate** evidence gathering (e.g., reading files, running checks) to **subagents** — verification synthesis stays with main. Direct work is limited to one-line fixes, except where `opengoal-subagent` designates work main-only (iterative collaboration, 2nd-iteration rework, evolving design).
17
19
  - Report subagent results to the user.
18
- - (first subagent dispatch of the session, or first dispatch after a compaction) => load the `opengoal-subagent` skill BEFORE dispatching and say so in one line (e.g. "opengoal-subagent loaded — dispatching <task> → <model> (<rationale>)"). A dispatch without this load+announcement is a violation: the skill's dispatch rules (model selection/reporting, prompt requirements, post-verify) only bind once its content is actually in context.
20
+ - (subagent dispatch, `opengoal-subagent`'s own text not visible in your current context) => load the `opengoal-subagent` skill BEFORE dispatching and say so in one line (e.g. "opengoal-subagent loaded — dispatching <task> → <model> (<rationale>)") — a dispatch without this load and announcement is a violation, because its dispatch rules (model selection/reporting, prompt requirements, post-verify) bind only while that text is in context.
21
+ - (subagent dispatch, `opengoal-subagent`'s own text visible) => do not re-read it.
19
22
  <!-- @else -->
20
23
  - Perform analysis and verification tasks directly.
21
24
  - Report results to the user.
@@ -32,6 +32,8 @@ Execute when any of:
32
32
 
33
33
  > Destructive operations (overwriting existing files, archive) still follow state-aware prompts — in-context confirmation does not bypass those guards.
34
34
 
35
+ - (a recognized command's own instructions are visible in your current context) => execute from them — do not re-read the command file.
36
+
35
37
  ## Documentation Timing
36
38
 
37
39
  - (implementation plan crystallizes — files, design decisions, execution order) => suggest `/$CommandPrefix:design init`
@@ -73,7 +75,7 @@ When a reactive trigger fires (the user-invoked-procedure exemption skips this
73
75
  1. Confirm `$DocsDir/OVERVIEW.md` exists (existence check only).
74
76
  2. If absent, inform the user and proceed without it.
75
77
  3. If present, surface the affordance to the user — *do not auto-read*. Example: "Architectural ambiguity detected. `$DocsDir/OVERVIEW.md` is available — load it?"
76
- 4. Read only after explicit user approval, then keep the result in session (skip-if-loaded for subsequent triggers).
78
+ 4. Read only after explicit user approval; on a later trigger, use it without re-reading while its text is visible in your current context.
77
79
 
78
80
  > Bias control: when the trigger condition is uncertain, **default to NOT reading**. The cost of missing one read is small; the cost of always-loading is structural.
79
81