waypoint-codex 0.12.1 → 0.13.0

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.md CHANGED
@@ -9,12 +9,11 @@ It exists to solve two problems at the same time:
9
9
 
10
10
  ## What Waypoint is for
11
11
 
12
- Most agent setups break down in one of two ways:
12
+ Waypoint is built for repos where continuity and collaboration both matter.
13
13
 
14
- - the repo has no memory, so the next session starts half-blind
15
- - the repo has too much process in the always-on prompt, so the agent starts sounding like a compliance layer
14
+ It gives the next session real context and keeps the current session clear and useful.
16
15
 
17
- Waypoint is meant to sit in the middle:
16
+ Waypoint adds:
18
17
 
19
18
  - explicit repo-local memory
20
19
  - strong default collaboration
@@ -57,8 +56,9 @@ Waypoint scaffolds a Codex-friendly repo around a few core pieces:
57
56
  - `AGENTS.md` for the startup contract
58
57
  - `.waypoint/MEMORY.md` for durable user/team preferences and collaboration context
59
58
  - `.waypoint/WORKSPACE.md` for live operational state
60
- - `.waypoint/docs/` for durable project memory
61
- - `.waypoint/DOCS_INDEX.md` for docs routing
59
+ - `.waypoint/docs/` for long-lived project docs
60
+ - `.waypoint/plans/` for durable plan documents
61
+ - `.waypoint/DOCS_INDEX.md` for docs and plans routing
62
62
  - `.waypoint/context/` for generated startup context
63
63
  - `.waypoint/track/` for long-running work that truly needs durable progress tracking
64
64
  - `.agents/skills/` for optional structured workflows
@@ -70,7 +70,7 @@ The philosophy is simple:
70
70
  - more explicit repo-local state
71
71
  - stronger default collaboration
72
72
  - investigation before status narration
73
- - procedures as tools, not identity
73
+ - structured workflows that stay in their own tools
74
74
 
75
75
  ## Best fit
76
76
 
@@ -108,6 +108,7 @@ repo/
108
108
  ├── TRACKS_INDEX.md
109
109
  ├── WORKSPACE.md
110
110
  ├── docs/
111
+ ├── plans/
111
112
  ├── track/
112
113
  ├── context/
113
114
  ├── scripts/
@@ -135,12 +136,8 @@ Waypoint ships a strong default skill pack for real coding work:
135
136
 
136
137
  These are repo-local, so the workflow travels with the project.
137
138
 
138
- The important design choice is that they are tools, not default ceremony. Use them when the task calls for them:
139
-
140
- - `planning` when the shape of the work needs real clarification
141
- - `adversarial-review` when you want a deliberate ship-readiness or risky-change second pass
142
- - `work-tracker` when the work will span sessions
143
- - `conversation-retrospective` when there is durable learning worth preserving
139
+ The important design choice is that they stay out of the always-on voice.
140
+ Each skill explains what it is for and when it should be invoked.
144
141
 
145
142
  ## Reviewer agents
146
143
 
@@ -152,13 +149,6 @@ Waypoint scaffolds these reviewer agents by default:
152
149
 
153
150
  They are available for deliberate second passes.
154
151
 
155
- Use them when:
156
-
157
- - the change is risky
158
- - you want extra confidence
159
- - the user explicitly asks for review or ship-readiness
160
- - a PR workflow needs an explicit review pass
161
-
162
152
  ## What makes Waypoint different
163
153
 
164
154
  Waypoint is opinionated, but explicit:
@@ -166,8 +156,9 @@ Waypoint is opinionated, but explicit:
166
156
  - state lives in files you can inspect
167
157
  - docs routing is generated, not guessed from memory
168
158
  - the default contract tells the agent to investigate first
169
- - durable memory is separated into user/team memory, live workspace state, and project docs
170
- - heavy procedure lives in optional skills instead of the always-on voice
159
+ - durable memory is separated into user/team memory, live workspace state, project docs, and plan docs
160
+ - visual explanation stays lightweight: Mermaid in chat and screenshots from real UI inspection
161
+ - heavier workflows stay in optional skills
171
162
 
172
163
  ## Install
173
164
 
@@ -187,7 +178,7 @@ npx waypoint-codex@latest --help
187
178
 
188
179
  - `waypoint init` — scaffold or refresh the repo and, by default, update the global CLI first
189
180
  - `waypoint doctor` — validate health and report drift
190
- - `waypoint sync` — rebuild the docs and tracker indexes
181
+ - `waypoint sync` — rebuild the docs/plans and tracker indexes
191
182
  - `waypoint upgrade` — update the CLI and refresh the current repo using its saved config
192
183
 
193
184
  ## Learn more
package/dist/src/cli.js CHANGED
@@ -29,7 +29,7 @@ function printHelp() {
29
29
  Commands:
30
30
  init Initialize a repository with Waypoint scaffolding (auto-updates CLI unless skipped)
31
31
  doctor Validate repository health and report drift
32
- sync Rebuild docs and tracker indexes
32
+ sync Rebuild docs/plans and tracker indexes
33
33
  upgrade Update the global Waypoint CLI and refresh this repo using existing config
34
34
  `);
35
35
  }
package/dist/src/core.js CHANGED
@@ -8,6 +8,7 @@ const DEFAULT_CONFIG_PATH = ".waypoint/config.toml";
8
8
  const DEFAULT_DOCS_DIR = ".waypoint/docs";
9
9
  const DEFAULT_DOCS_INDEX = ".waypoint/DOCS_INDEX.md";
10
10
  const DEFAULT_MEMORY = ".waypoint/MEMORY.md";
11
+ const DEFAULT_PLANS_DIR = ".waypoint/plans";
11
12
  const DEFAULT_TRACK_DIR = ".waypoint/track";
12
13
  const DEFAULT_TRACKS_INDEX = ".waypoint/TRACKS_INDEX.md";
13
14
  const DEFAULT_WORKSPACE = ".waypoint/WORKSPACE.md";
@@ -28,7 +29,6 @@ const LEGACY_WAYPOINT_GITIGNORE_RULES = new Set([
28
29
  ".agents/skills/docs-sync/",
29
30
  ".agents/skills/code-guide-audit/",
30
31
  ".agents/skills/adversarial-review/",
31
- ".agents/skills/visual-explanations/",
32
32
  ".agents/skills/break-it-qa/",
33
33
  ".agents/skills/frontend-context-interview/",
34
34
  ".agents/skills/backend-context-interview/",
@@ -39,6 +39,7 @@ const LEGACY_WAYPOINT_GITIGNORE_RULES = new Set([
39
39
  ".agents/skills/pre-pr-hygiene/",
40
40
  ".agents/skills/pr-review/",
41
41
  ".waypoint/config.toml",
42
+ ".waypoint/MEMORY.md",
42
43
  ".waypoint/README.md",
43
44
  ".waypoint/SOUL.md",
44
45
  ".waypoint/WORKSPACE.md",
@@ -51,7 +52,6 @@ const LEGACY_WAYPOINT_GITIGNORE_RULES = new Set([
51
52
  ".waypoint/scripts/",
52
53
  ".waypoint/track/",
53
54
  ".waypoint/*",
54
- "!.waypoint/MEMORY.md",
55
55
  "!.waypoint/docs/",
56
56
  "!.waypoint/docs/**",
57
57
  ".waypoint/docs/README.md",
@@ -63,7 +63,6 @@ const SHIPPED_SKILL_NAMES = [
63
63
  "docs-sync",
64
64
  "code-guide-audit",
65
65
  "adversarial-review",
66
- "visual-explanations",
67
66
  "break-it-qa",
68
67
  "conversation-retrospective",
69
68
  "workspace-compress",
@@ -83,6 +82,18 @@ const TIMESTAMPED_WORKSPACE_SECTIONS = new Set([
83
82
  "## Done Recently",
84
83
  ]);
85
84
  const TIMESTAMPED_ENTRY_PATTERN = /^(?:[-*]|\d+\.)\s+\[\d{4}-\d{2}-\d{2} \d{2}:\d{2} [A-Z]{2,5}\]/;
85
+ function docsIndexSections(projectRoot, config) {
86
+ return [
87
+ {
88
+ heading: ".waypoint/docs/",
89
+ dir: path.join(projectRoot, config?.docs_dir ?? DEFAULT_DOCS_DIR),
90
+ },
91
+ {
92
+ heading: ".waypoint/plans/",
93
+ dir: path.join(projectRoot, config?.plans_dir ?? DEFAULT_PLANS_DIR),
94
+ },
95
+ ];
96
+ }
86
97
  function ensureDir(dirPath) {
87
98
  mkdirSync(dirPath, { recursive: true });
88
99
  }
@@ -316,21 +327,23 @@ export function initRepository(projectRoot, options) {
316
327
  }));
317
328
  writeIfMissing(path.join(projectRoot, DEFAULT_WORKSPACE), readTemplate("WORKSPACE.md"));
318
329
  ensureDir(path.join(projectRoot, DEFAULT_DOCS_DIR));
330
+ ensureDir(path.join(projectRoot, DEFAULT_PLANS_DIR));
319
331
  ensureDir(path.join(projectRoot, DEFAULT_TRACK_DIR));
320
332
  writeIfMissing(path.join(projectRoot, ".waypoint/docs/README.md"), readTemplate(".waypoint/docs/README.md"));
321
333
  writeIfMissing(path.join(projectRoot, ".waypoint/docs/code-guide.md"), readTemplate(".waypoint/docs/code-guide.md"));
334
+ writeIfMissing(path.join(projectRoot, ".waypoint/plans/README.md"), readTemplate(".waypoint/plans/README.md"));
322
335
  upsertManagedBlock(path.join(projectRoot, "AGENTS.md"), readTemplate("managed-agents-block.md"));
323
336
  scaffoldSkills(projectRoot);
324
337
  scaffoldOptionalCodex(projectRoot);
325
338
  appendGitignoreSnippet(projectRoot);
326
- const docsIndex = renderDocsIndex(projectRoot, path.join(projectRoot, DEFAULT_DOCS_DIR));
339
+ const docsIndex = renderDocsIndex(projectRoot, docsIndexSections(projectRoot));
327
340
  const tracksIndex = renderTracksIndex(projectRoot, path.join(projectRoot, DEFAULT_TRACK_DIR));
328
341
  writeText(path.join(projectRoot, DEFAULT_DOCS_INDEX), `${docsIndex.content}\n`);
329
342
  writeText(path.join(projectRoot, DEFAULT_TRACKS_INDEX), `${tracksIndex.content}\n`);
330
343
  return [
331
344
  "Initialized Waypoint scaffold",
332
345
  "Installed managed AGENTS block",
333
- "Created .waypoint/MEMORY.md, .waypoint/WORKSPACE.md, .waypoint/docs/, and .waypoint/track/ scaffold",
346
+ "Created .waypoint/MEMORY.md, .waypoint/WORKSPACE.md, .waypoint/docs/, .waypoint/plans/, and .waypoint/track/ scaffold",
334
347
  "Installed repo-local Waypoint skills",
335
348
  "Installed coding/reviewer agents and project Codex config",
336
349
  "Generated .waypoint/DOCS_INDEX.md and .waypoint/TRACKS_INDEX.md",
@@ -459,9 +472,10 @@ export function doctorRepository(projectRoot) {
459
472
  });
460
473
  }
461
474
  }
462
- const docsDir = path.join(projectRoot, config.docs_dir ?? DEFAULT_DOCS_DIR);
463
475
  const docsIndexPath = path.join(projectRoot, config.docs_index_file ?? DEFAULT_DOCS_INDEX);
464
- const docsIndex = renderDocsIndex(projectRoot, docsDir);
476
+ const docsDir = path.join(projectRoot, config.docs_dir ?? DEFAULT_DOCS_DIR);
477
+ const plansDir = path.join(projectRoot, config.plans_dir ?? DEFAULT_PLANS_DIR);
478
+ const docsIndex = renderDocsIndex(projectRoot, docsIndexSections(projectRoot, config));
465
479
  const trackDir = path.join(projectRoot, DEFAULT_TRACK_DIR);
466
480
  const tracksIndexPath = path.join(projectRoot, DEFAULT_TRACKS_INDEX);
467
481
  const tracksIndex = renderTracksIndex(projectRoot, trackDir);
@@ -474,6 +488,15 @@ export function doctorRepository(projectRoot) {
474
488
  paths: [docsDir],
475
489
  });
476
490
  }
491
+ if (!existsSync(plansDir)) {
492
+ findings.push({
493
+ severity: "error",
494
+ category: "docs",
495
+ message: ".waypoint/plans/ directory is missing.",
496
+ remediation: "Run `waypoint init` to scaffold plans.",
497
+ paths: [plansDir],
498
+ });
499
+ }
477
500
  for (const relPath of docsIndex.invalidDocs) {
478
501
  findings.push({
479
502
  severity: "warn",
@@ -488,7 +511,7 @@ export function doctorRepository(projectRoot) {
488
511
  severity: "warn",
489
512
  category: "docs",
490
513
  message: ".waypoint/DOCS_INDEX.md is missing.",
491
- remediation: "Run `waypoint sync` to generate the docs index.",
514
+ remediation: "Run `waypoint sync` to generate the docs/plans index.",
492
515
  paths: [docsIndexPath],
493
516
  });
494
517
  }
@@ -497,7 +520,7 @@ export function doctorRepository(projectRoot) {
497
520
  severity: "warn",
498
521
  category: "docs",
499
522
  message: ".waypoint/DOCS_INDEX.md is stale.",
500
- remediation: "Run `waypoint sync` to rebuild the docs index.",
523
+ remediation: "Run `waypoint sync` to rebuild the docs/plans index.",
501
524
  paths: [docsIndexPath],
502
525
  });
503
526
  }
@@ -585,9 +608,8 @@ export function doctorRepository(projectRoot) {
585
608
  }
586
609
  export function syncRepository(projectRoot) {
587
610
  const config = loadWaypointConfig(projectRoot);
588
- const docsDir = path.join(projectRoot, config.docs_dir ?? DEFAULT_DOCS_DIR);
589
611
  const docsIndexPath = path.join(projectRoot, config.docs_index_file ?? DEFAULT_DOCS_INDEX);
590
- const docsIndex = renderDocsIndex(projectRoot, docsDir);
612
+ const docsIndex = renderDocsIndex(projectRoot, docsIndexSections(projectRoot, config));
591
613
  const trackDir = path.join(projectRoot, DEFAULT_TRACK_DIR);
592
614
  const tracksIndexPath = path.join(projectRoot, DEFAULT_TRACKS_INDEX);
593
615
  const tracksIndex = renderTracksIndex(projectRoot, trackDir);
@@ -73,29 +73,40 @@ function walkDocs(projectRoot, currentDir, output, invalid) {
73
73
  output.push({ path: relPath, summary, readWhen });
74
74
  }
75
75
  }
76
- export function renderDocsIndex(projectRoot, docsDir) {
76
+ function collectDocEntries(projectRoot, docsDir) {
77
77
  const entries = [];
78
78
  const invalidDocs = [];
79
79
  if (existsSync(docsDir)) {
80
80
  walkDocs(projectRoot, docsDir, entries, invalidDocs);
81
81
  }
82
+ return { entries, invalidDocs };
83
+ }
84
+ export function renderDocsIndex(projectRoot, sections) {
82
85
  const lines = [
83
86
  "# Docs Index",
84
87
  "",
85
- "Auto-generated by `waypoint sync` / `waypoint doctor`. Read matching docs before working on a task.",
86
- "",
87
- "## .waypoint/docs/",
88
+ "Auto-generated by `waypoint sync` / `waypoint doctor`. Read matching docs and plans before working on a task.",
88
89
  "",
89
90
  ];
90
- if (entries.length === 0) {
91
- lines.push("No routable docs found.");
92
- }
93
- else {
94
- for (const entry of entries.sort((a, b) => a.path.localeCompare(b.path))) {
95
- lines.push(`- **${entry.path}** — ${entry.summary}`);
96
- lines.push(` Read when: ${entry.readWhen.join("; ")}`);
91
+ const invalidDocs = [];
92
+ for (const section of sections) {
93
+ const { entries, invalidDocs: sectionInvalidDocs } = collectDocEntries(projectRoot, section.dir);
94
+ invalidDocs.push(...sectionInvalidDocs);
95
+ lines.push(`## ${section.heading}`);
96
+ lines.push("");
97
+ if (entries.length === 0) {
98
+ lines.push("No routable docs found.");
97
99
  }
100
+ else {
101
+ for (const entry of entries.sort((a, b) => a.path.localeCompare(b.path))) {
102
+ lines.push(`- **${entry.path}** — ${entry.summary}`);
103
+ lines.push(` Read when: ${entry.readWhen.join("; ")}`);
104
+ }
105
+ }
106
+ lines.push("");
107
+ }
108
+ if (sections.length === 0) {
109
+ lines.push("No routable docs found.");
98
110
  }
99
- lines.push("");
100
111
  return { content: `${lines.join("\n")}`, invalidDocs };
101
112
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "waypoint-codex",
3
- "version": "0.12.1",
3
+ "version": "0.13.0",
4
4
  "description": "Codex-native repository operating system: scaffolding, docs routing, repo-local skills, doctor, and sync.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -43,7 +43,8 @@ Treat explicit user feedback as a high-priority signal. If the user corrected th
43
43
 
44
44
  Write durable knowledge to the smallest truthful home the repo already uses:
45
45
 
46
- - the main docs or knowledge layer for architecture, behavior, decisions, debugging knowledge, durable plans, and reusable operating guidance
46
+ - the main docs or knowledge layer for architecture, behavior, decisions, debugging knowledge, and reusable operating guidance
47
+ - the repo's plans layer for durable implementation, rollout, migration, or investigation plans
47
48
  - the repo's standing guidance file for durable project context or long-lived working rules
48
49
  - the repo's live handoff or workspace file for current state, blockers, and immediate next steps
49
50
  - the repo's tracker or execution-log layer when the conversation created or materially changed a long-running workstream
@@ -6,7 +6,7 @@ description: >
6
6
  implementation work. Ask multiple rounds of clarifying questions about product behavior,
7
7
  user expectations, edge cases, and architecture; explore the repo deeply before deciding;
8
8
  do not waste questions on implementation details that can be learned directly from the
9
- code or routed docs; and write the final plan into `.waypoint/docs/` so it persists in the repo.
9
+ code or routed docs; and write the final plan into `.waypoint/plans/` so it persists in the repo.
10
10
  ---
11
11
 
12
12
  # Planning
@@ -36,7 +36,7 @@ Before planning:
36
36
 
37
37
  The plan belongs in the repo, not only in chat.
38
38
 
39
- - Write or update a durable plan doc under `.waypoint/docs/`.
39
+ - Write or update a durable plan doc under `.waypoint/plans/`.
40
40
  - Choose the smallest routed location that matches the work, such as a project plan, implementation plan, or focused design note.
41
41
  - If a relevant plan doc already exists, update it instead of creating a competing one.
42
42
  - Make sure the doc remains discoverable through the routed docs layer.
@@ -127,7 +127,7 @@ Before presenting the plan, verify against real code:
127
127
  - No pretending you verified something you didn't
128
128
 
129
129
  If the change touches durable project behavior, include docs/workspace updates in the plan.
130
- Write or update the durable plan doc under `.waypoint/docs/` as part of the skill, not as an optional follow-up.
130
+ Write or update the durable plan doc under `.waypoint/plans/` as part of the skill, not as an optional follow-up.
131
131
 
132
132
  ## External APIs
133
133
 
@@ -1,4 +1,4 @@
1
1
  interface:
2
2
  display_name: "Planning"
3
3
  short_description: "Interview, explore, and write an implementation-ready plan into the repo"
4
- default_prompt: "Use $planning to deeply explore the repository, interview for the product and architectural details that materially affect the work, and write an implementation-ready plan into .waypoint/docs/."
4
+ default_prompt: "Use $planning to deeply explore the repository, interview for the product and architectural details that materially affect the work, and write an implementation-ready plan into .waypoint/plans/."
@@ -9,7 +9,6 @@
9
9
  .agents/skills/docs-sync/
10
10
  .agents/skills/code-guide-audit/
11
11
  .agents/skills/adversarial-review/
12
- .agents/skills/visual-explanations/
13
12
  .agents/skills/break-it-qa/
14
13
  .agents/skills/frontend-context-interview/
15
14
  .agents/skills/backend-context-interview/
@@ -20,6 +19,7 @@
20
19
  .agents/skills/pre-pr-hygiene/
21
20
  .agents/skills/pr-review/
22
21
  .waypoint/config.toml
22
+ .waypoint/MEMORY.md
23
23
  .waypoint/README.md
24
24
  .waypoint/SOUL.md
25
25
  .waypoint/WORKSPACE.md
@@ -5,10 +5,11 @@ Repo-local Waypoint configuration and project memory files.
5
5
  - `MEMORY.md` — durable user/team preferences, collaboration context, and stable product defaults
6
6
  - `config.toml` — Waypoint feature toggles and file locations
7
7
  - `WORKSPACE.md` — live operational state; new or materially revised entries in multi-topic sections are timestamped
8
- - `DOCS_INDEX.md` — generated docs routing map
8
+ - `DOCS_INDEX.md` — generated docs and plans routing map
9
9
  - `SOUL.md` — agent identity and working values
10
10
  - `agent-operating-manual.md` — required session workflow
11
- - `docs/` — Waypoint-managed project memory (architecture, decisions, debugging knowledge, durable plans); routable docs use `summary`, `last_updated`, and `read_when` frontmatter
11
+ - `docs/` — Waypoint-managed long-lived project memory (architecture, decisions, debugging knowledge); routable docs use `summary`, `last_updated`, and `read_when` frontmatter
12
+ - `plans/` — durable implementation, rollout, and migration plans; routable plans use `summary`, `last_updated`, and `read_when` frontmatter
12
13
  - `agents/` — agent prompt files that Waypoint's reviewer agents can read and follow
13
14
  - `context/` — generated session context bundle
14
15
  - `scripts/` — repo-local Waypoint helper scripts
@@ -38,7 +38,8 @@ The repository should contain the context the next agent needs.
38
38
  - `.waypoint/MEMORY.md` is the durable user/team memory layer: collaboration preferences, stable defaults, and long-lived context that should survive across sessions
39
39
  - `.waypoint/WORKSPACE.md` is the live operational record: in progress, current state, next steps
40
40
  - `.waypoint/track/` is the optional execution-tracking layer for active long-running work that genuinely needs durable progress state
41
- - `.waypoint/docs/` is the durable project memory: architecture, decisions, integration notes, debugging knowledge, and durable plans
41
+ - `.waypoint/docs/` is the durable project memory: architecture, decisions, integration notes, and debugging knowledge
42
+ - `.waypoint/plans/` is the durable planning layer: implementation plans, rollout plans, migration plans, and other task-shaped plans worth keeping
42
43
  - `.waypoint/context/` is the generated session context bundle: current git/PR/doc/track index state
43
44
 
44
45
  If something important lives only in your head or in the chat transcript, the repo is under-documented.
@@ -54,10 +55,11 @@ If something important lives only in your head or in the chat transcript, the re
54
55
  - Update `.waypoint/MEMORY.md` only when you learned a durable user/team preference, collaboration rule, or stable product default.
55
56
  - Update `.waypoint/WORKSPACE.md` as live execution state when progress meaningfully changes. In multi-topic sections, prefix new or materially revised bullets with a local timestamp like `[2026-03-06 20:10 PST]`.
56
57
  - For large multi-step work that is likely to span sessions or needs durable progress state, create or update a tracker in `.waypoint/track/`, keep detailed execution state there, and point at it from `## Active Trackers` in `.waypoint/WORKSPACE.md`.
57
- - Update `.waypoint/docs/` when durable knowledge changes, and refresh each changed routable doc's `last_updated` field.
58
+ - Update `.waypoint/docs/` when durable project knowledge changes, update `.waypoint/plans/` when durable plans change, and refresh each changed routable doc's `last_updated` field.
58
59
  - Rebuild `.waypoint/DOCS_INDEX.md` whenever routable docs change.
59
60
  - Rebuild `.waypoint/TRACKS_INDEX.md` whenever tracker files change.
60
61
  - Keep most work in the main agent. Use skills, trackers, `coding-agent`, or reviewer agents when they clearly add leverage, not as default ceremony.
62
+ - Let skills carry their own invocation guidance. The always-on contract should only keep the high-level rule: use repo-local skills deliberately when they help the current task.
61
63
  - When spawning `coding-agent`, default to `fork_context: false` and choose the model/reasoning pair that fits the slice. Use stronger models when the delegated slice is user-visible, architecturally important, or hard to unwind.
62
64
  - When spawning reviewer agents or other non-`coding-agent` subagents, explicitly set `fork_context: false` and choose the model/reasoning pair that matches the risk and importance of the second pass.
63
65
  - Use the repo-local skills and reviewer agents deliberately, not reflexively.
@@ -67,11 +69,10 @@ If something important lives only in your head or in the chat transcript, the re
67
69
  - When waiting on reviewers, subagents, CI, automated review, or external jobs that you deliberately chose to start, wait as long as required. There is no fixed timeout where waiting itself becomes the problem.
68
70
  - Never interrupt in-flight work just to force a partial result, salvage something quickly, or avoid making the user wait longer.
69
71
  - Only stop waiting when the work has actually finished, clearly failed, or the user explicitly redirects the work.
70
- - When browser work is part of reproduction or verification, send screenshots of the relevant UI states to the user so they can visually confirm what you observed.
72
+ - When browser work, app inspection, or other interactive UI work is part of reproduction, inspection, or verification, send screenshots of the relevant UI states to the user so they can visually confirm what you observed.
71
73
  - Capture the states that matter, such as the broken state, the fixed state, or an important intermediate state that explains the issue.
72
74
  - If the current environment cannot provide screenshots, state that explicitly instead of silently omitting visual evidence.
73
75
  - When an explanation would be clearer visually, prefer Mermaid diagrams directly in chat for flows, architecture, state, and plans instead of over-explaining in prose.
74
- - Use `visual-explanations` when the explanation needs a richer generated image or an annotated screenshot rather than only text or Mermaid.
75
76
 
76
77
  ## Execution autonomy
77
78
 
@@ -100,25 +101,10 @@ Document the things the next agent cannot safely infer from raw code alone:
100
101
  - integration behavior
101
102
  - invariants and constraints
102
103
  - debugging and operational knowledge
103
- - active plans and next steps
104
+ - durable plans when they are useful beyond the current chat
104
105
 
105
106
  Do not document every trivial implementation detail. Document the non-obvious, durable, or operationally important parts.
106
107
 
107
- ## When to use Waypoint skills
108
-
109
- - `planning` when a non-trivial change needs deliberate scoping, clarified behavior, or a durable implementation plan
110
- - `work-tracker` when large multi-step work is likely to span sessions or needs durable progress tracking in `.waypoint/track/`
111
- - `docs-sync` when routed docs may be stale, missing, or inconsistent with the codebase
112
- - `code-guide-audit` when a specific feature or file set needs a targeted coding-guide compliance check
113
- - `adversarial-review` when the user asks for a final review pass, asks whether something is ready to ship, or when the risk warrants a deliberate second-pass review loop
114
- - `visual-explanations` when a generated image or annotated screenshot would explain the work more clearly than prose alone; Mermaid diagrams do not need a skill
115
- - `conversation-retrospective` when the user asks to save what was learned, when a major work piece produced durable learnings worth preserving, or when a skill clearly needs improvement based on what happened
116
- - `break-it-qa` when a browser-facing feature should be attacked with invalid inputs, refreshes, repeated clicks, wrong action order, or other adversarial manual QA
117
- - `frontend-ship-audit` and `backend-ship-audit` when the user explicitly requests a ship-readiness audit
118
- - `workspace-compress` after meaningful chunks or before pausing when the live handoff needs cleanup
119
- - `pre-pr-hygiene` before pushing or opening/updating a PR for substantial work when you want an explicit hygiene pass
120
- - `pr-review` once a PR has active review comments or automated review in progress
121
-
122
108
  ## When to use the agent pack
123
109
 
124
110
  Waypoint scaffolds these focused specialists by default:
@@ -130,7 +116,7 @@ Waypoint scaffolds these focused specialists by default:
130
116
 
131
117
  ## Plan Review
132
118
 
133
- Use `plan-reviewer` when a plan includes meaningful design choices, multiple work phases, migrations, or non-obvious tradeoffs and you want an independent challenge before committing.
119
+ Plan review is available when an independent challenge would materially improve a non-trivial plan.
134
120
 
135
121
  - Skip it for tiny obvious plans or when no plan will be presented.
136
122
  - Use a fresh `plan-reviewer` agent for each pass. After you read its findings, close it instead of reusing the old reviewer thread.
@@ -138,7 +124,7 @@ Use `plan-reviewer` when a plan includes meaningful design choices, multiple wor
138
124
 
139
125
  ## Review Loop
140
126
 
141
- Use `adversarial-review` when you deliberately want a closeout loop for ship-readiness, a final review request, or a risky change. It is a tool, not the default voice of the system.
127
+ Deliberate closeout review is available when you want a second pass for ship-readiness, a final review request, or a risky change. It is a tool, not the default voice of the system.
142
128
 
143
129
  - If you use it, follow the skill's loop fully: define the reviewable slice, run the needed reviewers, wait for the outputs, fix meaningful findings, and rerun fresh passes when warranted.
144
130
  - Treat reviewer agents as one-shot workers. Once a reviewer returns its findings, read the result and close it.
@@ -2,6 +2,7 @@ version = 1
2
2
  profile = "__PROFILE__"
3
3
  workspace_file = ".waypoint/WORKSPACE.md"
4
4
  docs_dir = ".waypoint/docs"
5
+ plans_dir = ".waypoint/plans"
5
6
  docs_index_file = ".waypoint/DOCS_INDEX.md"
6
7
 
7
8
  [features]
@@ -9,10 +9,11 @@ Put the durable context here that the next agent will need to continue the work:
9
9
  - integration notes
10
10
  - invariants and constraints
11
11
  - debugging knowledge
12
- - active plans that should survive beyond one session
13
12
 
14
13
  These are **project docs**, not Waypoint internals.
15
14
 
15
+ Put durable implementation and rollout plans in `.waypoint/plans/`.
16
+
16
17
  Do not use `.waypoint/docs/` as the execution tracker layer for active long-running work. That belongs under `.waypoint/track/`.
17
18
 
18
19
  Every routable doc needs YAML frontmatter:
@@ -26,4 +27,4 @@ read_when:
26
27
  ---
27
28
  ```
28
29
 
29
- Refresh `last_updated` whenever you materially change a doc. `DOCS_INDEX.md` is generated from the docs here.
30
+ Refresh `last_updated` whenever you materially change a doc. `DOCS_INDEX.md` is generated from both `.waypoint/docs/` and `.waypoint/plans/`.
@@ -0,0 +1,26 @@
1
+ # Waypoint Plans
2
+
3
+ This directory is for durable plan documents.
4
+
5
+ Put plans here when they should stay in the repo beyond the current chat:
6
+
7
+ - implementation plans
8
+ - rollout plans
9
+ - migration plans
10
+ - investigation plans
11
+ - other task-specific design docs that are still useful after the session ends
12
+
13
+ Keep long-lived reference docs in `.waypoint/docs/`.
14
+
15
+ Every routable plan needs YAML frontmatter:
16
+
17
+ ```yaml
18
+ ---
19
+ summary: One-line description
20
+ last_updated: "2026-03-06 20:10 PST"
21
+ read_when:
22
+ - task cue
23
+ ---
24
+ ```
25
+
26
+ Refresh `last_updated` whenever you materially change a plan. `DOCS_INDEX.md` is generated from both `.waypoint/docs/` and `.waypoint/plans/`.
@@ -107,34 +107,52 @@ function walkDocs(projectRoot, currentDir, output) {
107
107
  }
108
108
  }
109
109
 
110
- export function renderDocsIndex(projectRoot) {
111
- const docsDir = path.join(projectRoot, ".waypoint", "docs");
110
+ function collectDocEntries(projectRoot, docsDir) {
112
111
  const entries = [];
113
112
 
114
113
  if (existsSync(docsDir)) {
115
114
  walkDocs(projectRoot, docsDir, entries);
116
115
  }
117
116
 
117
+ return entries;
118
+ }
119
+
120
+ export function renderDocsIndex(projectRoot) {
121
+ const sections = [
122
+ {
123
+ heading: ".waypoint/docs/",
124
+ dir: path.join(projectRoot, ".waypoint", "docs"),
125
+ },
126
+ {
127
+ heading: ".waypoint/plans/",
128
+ dir: path.join(projectRoot, ".waypoint", "plans"),
129
+ },
130
+ ];
131
+
118
132
  const lines = [
119
133
  "# Docs Index",
120
134
  "",
121
- "Auto-generated by `.waypoint/scripts/build-docs-index.mjs`. Read matching docs before working on a task.",
122
- "",
123
- "## .waypoint/docs/",
135
+ "Auto-generated by `.waypoint/scripts/build-docs-index.mjs`. Read matching docs and plans before working on a task.",
124
136
  "",
125
137
  ];
126
138
 
127
- if (entries.length === 0) {
128
- lines.push("No routable docs found.");
129
- } else {
130
- entries.sort((a, b) => a.path.localeCompare(b.path));
131
- for (const entry of entries) {
132
- lines.push(`- **${entry.path}** ${entry.summary}`);
133
- lines.push(` Read when: ${entry.readWhen.join("; ")}`);
139
+ for (const section of sections) {
140
+ const entries = collectDocEntries(projectRoot, section.dir);
141
+ lines.push(`## ${section.heading}`);
142
+ lines.push("");
143
+
144
+ if (entries.length === 0) {
145
+ lines.push("No routable docs found.");
146
+ } else {
147
+ entries.sort((a, b) => a.path.localeCompare(b.path));
148
+ for (const entry of entries) {
149
+ lines.push(`- **${entry.path}** — ${entry.summary}`);
150
+ lines.push(` Read when: ${entry.readWhen.join("; ")}`);
151
+ }
134
152
  }
135
- }
136
153
 
137
- lines.push("");
154
+ lines.push("");
155
+ }
138
156
  return `${lines.join("\n")}\n`;
139
157
  }
140
158
 
@@ -69,8 +69,8 @@ Prefer existing persisted context over re-interviewing the user.
69
69
 
70
70
  If the user approves a plan or explicitly tells you to proceed, treat that as authorization to execute the work end to end. Do not stop mid-implementation for incremental permission unless a real blocker, hidden-risk decision, or explicit user redirect requires a pause.
71
71
  When work is in flight elsewhere — reviewer agents, subagents, CI, automated review, external jobs, or other waiting periods — wait as long as required. There is no fixed waiting limit, and slowness alone is not a reason to interrupt or abandon the work.
72
- When using a browser to reproduce a bug, verify behavior, or confirm that a fix works, send the user screenshots of the relevant UI states so they can see the evidence directly. If screenshots are not possible in the current environment, say so explicitly.
73
- When an explanation would be clearer as a visual than as prose, bias toward visual artifacts. Prefer Mermaid diagrams directly in chat for flows, architecture, state, and plans; use `visual-explanations` for richer generated images and for annotated screenshots that call out concrete UI states.
72
+ When you use a browser, app, or other interactive UI to inspect, reproduce, or verify something, send the user screenshots of the relevant states so they can see what you saw. If screenshots are not possible in the current environment, say so explicitly.
73
+ When an explanation is clearer visually, use Mermaid diagrams directly in chat for flows, architecture, state, and plans.
74
74
 
75
75
  Delivery expectations:
76
76
  - Before you start, decide what "done" means for the task. Set your own finish line and use it as your checklist while you work.
@@ -92,16 +92,12 @@ Delivery expectations:
92
92
  Working rules:
93
93
  - Keep `.waypoint/WORKSPACE.md` current as the live execution state, with timestamped new or materially revised entries in multi-topic sections
94
94
  - Keep `.waypoint/MEMORY.md` for durable user/team preferences, collaboration context, and stable product defaults; keep task status and active execution state out of it
95
- - Update `.waypoint/docs/` when behavior or durable project knowledge changes, and refresh `last_updated` on touched routable docs
95
+ - Update `.waypoint/docs/` when durable project knowledge changes, update `.waypoint/plans/` when a durable plan changes, and refresh `last_updated` on touched routable docs
96
96
  - Keep most work in the main agent. Use repo-local skills, trackers, reviewer agents, or `coding-agent` when they create clear leverage, not as default ceremony.
97
- - Use `work-tracker` when work is likely to span sessions or needs durable progress tracking.
98
- - Use review and ship-readiness skills such as `adversarial-review`, `pre-pr-hygiene`, `pr-review`, `frontend-ship-audit`, and `backend-ship-audit` when the user asks for them, when you are about to ship or open a PR, or when the risk clearly warrants a deliberate second pass.
99
- - Use `plan-reviewer` or other reviewer agents when an independent challenge would materially improve the result, not before every plan or fix by default.
100
- - Use `visual-explanations` when a generated image or annotated screenshot would explain the work more clearly than prose alone; Mermaid diagrams can be written directly in chat without invoking a skill.
97
+ - Let repo-local skills describe their own triggers. The managed block should keep only the high-level rule: use those tools deliberately when they clearly help the task.
98
+ - Use reviewer agents when an independent second pass would materially improve the result, not before every plan or fix by default.
101
99
  - Treat `plan-reviewer`, `code-reviewer`, and `code-health-reviewer` as one-shot agents: once a reviewer returns findings, close it; if another pass is needed later, spawn a fresh reviewer instead of reusing the old thread
102
- - Before pushing or opening/updating a PR for substantial work, use `pre-pr-hygiene`
103
100
  - If you created a PR earlier in the current session and need to push more work, first confirm that PR is still open. If it is closed, create a fresh branch from `origin/main` and open a fresh PR instead of pushing more commits to the old PR branch
104
- - Use `pr-review` once a PR has active review comments or automated review in progress
105
101
  - Treat the generated context bundle as required session bootstrap, not optional reference material
106
102
  - After plan approval, own the execution through implementation, verification, and necessary repo-memory updates before surfacing a final completion report
107
103
  <!-- waypoint:end -->
@@ -1,100 +0,0 @@
1
- ---
2
- name: visual-explanations
3
- description: Create generated images or annotated screenshots when a visual artifact would explain a concept, design, flow, comparison, or observed UI state more clearly than prose alone. Use for concept cards, visual summaries, mockups, labeled screenshots, timelines, comparisons, and other explanation-first visuals. Do not use this skill when a simple Mermaid diagram in chat is sufficient.
4
- ---
5
-
6
- # Visual Explanations
7
-
8
- Use this skill when the explanation itself should become a visual artifact.
9
-
10
- Mermaid does not need this skill. If a Mermaid diagram in chat is enough, use Mermaid directly and stop here.
11
-
12
- ## Step 1: Pick The Right Visual
13
-
14
- - Use Mermaid directly for flows, architecture, plans, state machines, and other text-native diagrams.
15
- - Use an annotated screenshot when you need to explain a real UI state, call out a specific element, or show evidence from an actual screen.
16
- - Use a generated image when Mermaid is too rigid and the explanation needs custom layout, stronger composition, a side-by-side comparison, a concept card, a rough mockup, or a more designed visual summary.
17
-
18
- Do not make an image just because you can. Use the lightest visual that makes the explanation clearer.
19
-
20
- ## Step 2: Define The Message First
21
-
22
- Before drawing anything, write down:
23
-
24
- - the one main point the visual should communicate
25
- - which audience it is for
26
- - whether it is evidence, explanation, or a conceptual sketch
27
-
28
- One image should usually explain one idea.
29
-
30
- ## Step 3: Gather Source Material
31
-
32
- For annotated screenshots:
33
-
34
- - capture the real UI state first
35
- - keep the untouched source screenshot available until the annotated version is verified
36
- - identify the exact element or area that the callout should reference
37
-
38
- For generated images:
39
-
40
- - list the minimum facts, labels, or comparison points that must appear
41
- - sketch the rough composition in words before building it
42
- - prefer using the repo's existing facts or screenshots over inventing fake details
43
-
44
- If the image is conceptual rather than a faithful representation of current UI, label it clearly in the visual or in the accompanying text.
45
-
46
- ## Step 4: Build With Simple, Deterministic Tools
47
-
48
- Prefer straightforward local approaches:
49
-
50
- - SVG for cards, timelines, comparisons, and lightweight custom layouts
51
- - HTML/CSS rendered to an image when layout fidelity matters
52
- - image-editing tools such as ImageMagick or Pillow for callouts, arrows, labels, crops, and overlays
53
- - browser screenshots when the source needs to be a real page or app state
54
-
55
- Do not over-engineer the rendering path. Favor the most reliable approach available in the current environment.
56
-
57
- ## Step 5: Design For Clarity
58
-
59
- - highlight the exact thing you are explaining
60
- - keep callout text short
61
- - use large, legible type
62
- - use strong contrast
63
- - leave enough whitespace so the image still scans quickly
64
- - prefer one or two callouts over covering the image in labels
65
- - crop or frame the relevant area when the full screen adds noise
66
-
67
- Good visuals feel obvious at a glance.
68
-
69
- ## Step 6: Verify The Output Yourself
70
-
71
- Before sending the image:
72
-
73
- - open or inspect the rendered result
74
- - confirm it is not blank, clipped, washed out, or too tiny to read
75
- - confirm arrows and labels point at the intended target
76
- - confirm the image still makes sense without a long paragraph underneath it
77
-
78
- Do not trust the generation step blindly.
79
-
80
- ## Step 7: Deliver Cleanly
81
-
82
- - show the image directly in chat
83
- - add one to three sentences that explain what the user should notice
84
- - prefer a single strong visual over a pile of mediocre ones
85
-
86
- If the artifact is only for the current conversation, store it in a temp or scratch location. If the user wants a durable asset in the repo, place it in the repo's normal docs or asset structure instead of inventing a new convention.
87
-
88
- ## Gotchas
89
-
90
- - Do not make an image when Mermaid or a short paragraph would already explain the point cleanly.
91
- - Do not annotate a screenshot until you have verified the source screenshot actually shows the right state.
92
- - Do not bury the main message under too many callouts or labels. One image should usually explain one thing.
93
- - Do not present a conceptual mockup as if it were a real current UI state. Label it clearly when it is illustrative.
94
- - Do not trust the rendering step blindly; clipped text, tiny labels, and misplaced arrows are common failure modes.
95
-
96
- ## Keep This Skill Sharp
97
-
98
- - Add new gotchas when the same visual clarity problem, screenshot mistake, or rendering failure keeps showing up.
99
- - Tighten the description if the skill fires when Mermaid would have been enough or misses real requests for annotated screenshots and concept cards.
100
- - If the same layout patterns or annotation helpers keep repeating, move them into reusable assets or scripts instead of rebuilding them from scratch.
@@ -1,4 +0,0 @@
1
- interface:
2
- display_name: "Visual Explanations"
3
- short_description: "Create generated images and annotated screenshots"
4
- default_prompt: "Use $visual-explanations to create a generated image or annotated screenshot when a visual artifact would explain the point more clearly than prose alone. Prefer Mermaid directly when a simple in-chat diagram is enough."