waypoint-codex 0.12.2 → 0.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -23
- package/dist/src/cli.js +1 -1
- package/dist/src/core.js +33 -9
- package/dist/src/docs-index.js +23 -12
- package/package.json +1 -1
- package/templates/.agents/skills/conversation-retrospective/SKILL.md +2 -1
- package/templates/.agents/skills/planning/SKILL.md +3 -3
- package/templates/.agents/skills/planning/agents/openai.yaml +1 -1
- package/templates/.gitignore.snippet +0 -1
- package/templates/.waypoint/README.md +3 -2
- package/templates/.waypoint/agent-operating-manual.md +8 -22
- package/templates/.waypoint/config.toml +1 -0
- package/templates/.waypoint/docs/README.md +3 -2
- package/templates/.waypoint/plans/README.md +26 -0
- package/templates/.waypoint/scripts/build-docs-index.mjs +32 -14
- package/templates/managed-agents-block.md +5 -9
- package/templates/.agents/skills/visual-explanations/SKILL.md +0 -100
- package/templates/.agents/skills/visual-explanations/agents/openai.yaml +0 -4
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
|
-
|
|
12
|
+
Waypoint is built for repos where continuity and collaboration both matter.
|
|
13
13
|
|
|
14
|
-
|
|
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
|
|
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
|
|
61
|
-
- `.waypoint/
|
|
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
|
-
-
|
|
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
|
|
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
|
|
170
|
-
-
|
|
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";
|
|
@@ -63,7 +64,6 @@ const SHIPPED_SKILL_NAMES = [
|
|
|
63
64
|
"docs-sync",
|
|
64
65
|
"code-guide-audit",
|
|
65
66
|
"adversarial-review",
|
|
66
|
-
"visual-explanations",
|
|
67
67
|
"break-it-qa",
|
|
68
68
|
"conversation-retrospective",
|
|
69
69
|
"workspace-compress",
|
|
@@ -83,6 +83,18 @@ const TIMESTAMPED_WORKSPACE_SECTIONS = new Set([
|
|
|
83
83
|
"## Done Recently",
|
|
84
84
|
]);
|
|
85
85
|
const TIMESTAMPED_ENTRY_PATTERN = /^(?:[-*]|\d+\.)\s+\[\d{4}-\d{2}-\d{2} \d{2}:\d{2} [A-Z]{2,5}\]/;
|
|
86
|
+
function docsIndexSections(projectRoot, config) {
|
|
87
|
+
return [
|
|
88
|
+
{
|
|
89
|
+
heading: ".waypoint/docs/",
|
|
90
|
+
dir: path.join(projectRoot, config?.docs_dir ?? DEFAULT_DOCS_DIR),
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
heading: ".waypoint/plans/",
|
|
94
|
+
dir: path.join(projectRoot, config?.plans_dir ?? DEFAULT_PLANS_DIR),
|
|
95
|
+
},
|
|
96
|
+
];
|
|
97
|
+
}
|
|
86
98
|
function ensureDir(dirPath) {
|
|
87
99
|
mkdirSync(dirPath, { recursive: true });
|
|
88
100
|
}
|
|
@@ -295,6 +307,7 @@ export function initRepository(projectRoot, options) {
|
|
|
295
307
|
".agents/skills/waypoint-frontmatter",
|
|
296
308
|
".agents/skills/waypoint-explore",
|
|
297
309
|
".agents/skills/waypoint-research",
|
|
310
|
+
".agents/skills/visual-explanations",
|
|
298
311
|
".codex/agents/explorer.toml",
|
|
299
312
|
".codex/agents/reviewer.toml",
|
|
300
313
|
".codex/agents/architect.toml",
|
|
@@ -316,21 +329,23 @@ export function initRepository(projectRoot, options) {
|
|
|
316
329
|
}));
|
|
317
330
|
writeIfMissing(path.join(projectRoot, DEFAULT_WORKSPACE), readTemplate("WORKSPACE.md"));
|
|
318
331
|
ensureDir(path.join(projectRoot, DEFAULT_DOCS_DIR));
|
|
332
|
+
ensureDir(path.join(projectRoot, DEFAULT_PLANS_DIR));
|
|
319
333
|
ensureDir(path.join(projectRoot, DEFAULT_TRACK_DIR));
|
|
320
334
|
writeIfMissing(path.join(projectRoot, ".waypoint/docs/README.md"), readTemplate(".waypoint/docs/README.md"));
|
|
321
335
|
writeIfMissing(path.join(projectRoot, ".waypoint/docs/code-guide.md"), readTemplate(".waypoint/docs/code-guide.md"));
|
|
336
|
+
writeIfMissing(path.join(projectRoot, ".waypoint/plans/README.md"), readTemplate(".waypoint/plans/README.md"));
|
|
322
337
|
upsertManagedBlock(path.join(projectRoot, "AGENTS.md"), readTemplate("managed-agents-block.md"));
|
|
323
338
|
scaffoldSkills(projectRoot);
|
|
324
339
|
scaffoldOptionalCodex(projectRoot);
|
|
325
340
|
appendGitignoreSnippet(projectRoot);
|
|
326
|
-
const docsIndex = renderDocsIndex(projectRoot,
|
|
341
|
+
const docsIndex = renderDocsIndex(projectRoot, docsIndexSections(projectRoot));
|
|
327
342
|
const tracksIndex = renderTracksIndex(projectRoot, path.join(projectRoot, DEFAULT_TRACK_DIR));
|
|
328
343
|
writeText(path.join(projectRoot, DEFAULT_DOCS_INDEX), `${docsIndex.content}\n`);
|
|
329
344
|
writeText(path.join(projectRoot, DEFAULT_TRACKS_INDEX), `${tracksIndex.content}\n`);
|
|
330
345
|
return [
|
|
331
346
|
"Initialized Waypoint scaffold",
|
|
332
347
|
"Installed managed AGENTS block",
|
|
333
|
-
"Created .waypoint/MEMORY.md, .waypoint/WORKSPACE.md, .waypoint/docs/, and .waypoint/track/ scaffold",
|
|
348
|
+
"Created .waypoint/MEMORY.md, .waypoint/WORKSPACE.md, .waypoint/docs/, .waypoint/plans/, and .waypoint/track/ scaffold",
|
|
334
349
|
"Installed repo-local Waypoint skills",
|
|
335
350
|
"Installed coding/reviewer agents and project Codex config",
|
|
336
351
|
"Generated .waypoint/DOCS_INDEX.md and .waypoint/TRACKS_INDEX.md",
|
|
@@ -459,9 +474,10 @@ export function doctorRepository(projectRoot) {
|
|
|
459
474
|
});
|
|
460
475
|
}
|
|
461
476
|
}
|
|
462
|
-
const docsDir = path.join(projectRoot, config.docs_dir ?? DEFAULT_DOCS_DIR);
|
|
463
477
|
const docsIndexPath = path.join(projectRoot, config.docs_index_file ?? DEFAULT_DOCS_INDEX);
|
|
464
|
-
const
|
|
478
|
+
const docsDir = path.join(projectRoot, config.docs_dir ?? DEFAULT_DOCS_DIR);
|
|
479
|
+
const plansDir = path.join(projectRoot, config.plans_dir ?? DEFAULT_PLANS_DIR);
|
|
480
|
+
const docsIndex = renderDocsIndex(projectRoot, docsIndexSections(projectRoot, config));
|
|
465
481
|
const trackDir = path.join(projectRoot, DEFAULT_TRACK_DIR);
|
|
466
482
|
const tracksIndexPath = path.join(projectRoot, DEFAULT_TRACKS_INDEX);
|
|
467
483
|
const tracksIndex = renderTracksIndex(projectRoot, trackDir);
|
|
@@ -474,6 +490,15 @@ export function doctorRepository(projectRoot) {
|
|
|
474
490
|
paths: [docsDir],
|
|
475
491
|
});
|
|
476
492
|
}
|
|
493
|
+
if (!existsSync(plansDir)) {
|
|
494
|
+
findings.push({
|
|
495
|
+
severity: "error",
|
|
496
|
+
category: "docs",
|
|
497
|
+
message: ".waypoint/plans/ directory is missing.",
|
|
498
|
+
remediation: "Run `waypoint init` to scaffold plans.",
|
|
499
|
+
paths: [plansDir],
|
|
500
|
+
});
|
|
501
|
+
}
|
|
477
502
|
for (const relPath of docsIndex.invalidDocs) {
|
|
478
503
|
findings.push({
|
|
479
504
|
severity: "warn",
|
|
@@ -488,7 +513,7 @@ export function doctorRepository(projectRoot) {
|
|
|
488
513
|
severity: "warn",
|
|
489
514
|
category: "docs",
|
|
490
515
|
message: ".waypoint/DOCS_INDEX.md is missing.",
|
|
491
|
-
remediation: "Run `waypoint sync` to generate the docs index.",
|
|
516
|
+
remediation: "Run `waypoint sync` to generate the docs/plans index.",
|
|
492
517
|
paths: [docsIndexPath],
|
|
493
518
|
});
|
|
494
519
|
}
|
|
@@ -497,7 +522,7 @@ export function doctorRepository(projectRoot) {
|
|
|
497
522
|
severity: "warn",
|
|
498
523
|
category: "docs",
|
|
499
524
|
message: ".waypoint/DOCS_INDEX.md is stale.",
|
|
500
|
-
remediation: "Run `waypoint sync` to rebuild the docs index.",
|
|
525
|
+
remediation: "Run `waypoint sync` to rebuild the docs/plans index.",
|
|
501
526
|
paths: [docsIndexPath],
|
|
502
527
|
});
|
|
503
528
|
}
|
|
@@ -585,9 +610,8 @@ export function doctorRepository(projectRoot) {
|
|
|
585
610
|
}
|
|
586
611
|
export function syncRepository(projectRoot) {
|
|
587
612
|
const config = loadWaypointConfig(projectRoot);
|
|
588
|
-
const docsDir = path.join(projectRoot, config.docs_dir ?? DEFAULT_DOCS_DIR);
|
|
589
613
|
const docsIndexPath = path.join(projectRoot, config.docs_index_file ?? DEFAULT_DOCS_INDEX);
|
|
590
|
-
const docsIndex = renderDocsIndex(projectRoot,
|
|
614
|
+
const docsIndex = renderDocsIndex(projectRoot, docsIndexSections(projectRoot, config));
|
|
591
615
|
const trackDir = path.join(projectRoot, DEFAULT_TRACK_DIR);
|
|
592
616
|
const tracksIndexPath = path.join(projectRoot, DEFAULT_TRACKS_INDEX);
|
|
593
617
|
const tracksIndex = renderTracksIndex(projectRoot, trackDir);
|
package/dist/src/docs-index.js
CHANGED
|
@@ -73,29 +73,40 @@ function walkDocs(projectRoot, currentDir, output, invalid) {
|
|
|
73
73
|
output.push({ path: relPath, summary, readWhen });
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
|
-
|
|
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
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
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
|
@@ -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,
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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/."
|
|
@@ -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
|
|
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
|
|
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
|
-
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
@@ -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
|
|
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
|
-
|
|
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
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
lines.push(
|
|
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
|
-
|
|
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
|
|
73
|
-
When an explanation
|
|
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
|
|
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
|
-
-
|
|
98
|
-
- Use
|
|
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."
|