waypoint-codex 0.20.0 → 1.0.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 +18 -37
- package/dist/src/cli.js +1 -1
- package/dist/src/core.js +33 -116
- package/dist/src/docs-index.js +1 -1
- package/dist/src/templates.js +0 -10
- package/package.json +1 -1
- package/templates/.agents/skills/agi-help/SKILL.md +1 -1
- package/templates/.agents/skills/code-guide-audit/SKILL.md +1 -5
- package/templates/.agents/skills/planning/SKILL.md +6 -10
- package/templates/.agents/skills/pr-review/SKILL.md +0 -1
- package/templates/.codex/agents/code-health-reviewer.toml +7 -5
- package/templates/.codex/agents/code-reviewer.toml +7 -5
- package/templates/.codex/agents/plan-reviewer.toml +7 -5
- package/templates/.waypoint/ACTIVE_PLANS.md +7 -7
- package/templates/.waypoint/README.md +5 -8
- package/templates/.waypoint/config.toml +0 -5
- package/templates/.waypoint/docs/README.md +1 -3
- package/templates/.waypoint/scripts/build-docs-index.mjs +25 -11
- package/templates/.waypoint/scripts/prepare-context.mjs +120 -205
- package/templates/WORKSPACE.md +2 -6
- package/templates/managed-agents-block.md +20 -11
- package/dist/src/track-index.js +0 -107
- package/templates/.agents/skills/break-it-qa/SKILL.md +0 -184
- package/templates/.agents/skills/break-it-qa/agents/openai.yaml +0 -4
- package/templates/.agents/skills/conversation-retrospective/SKILL.md +0 -147
- package/templates/.agents/skills/conversation-retrospective/agents/openai.yaml +0 -4
- package/templates/.agents/skills/docs-sync/SKILL.md +0 -78
- package/templates/.agents/skills/docs-sync/agents/openai.yaml +0 -4
- package/templates/.agents/skills/merge-ready-owner/SKILL.md +0 -196
- package/templates/.agents/skills/merge-ready-owner/agents/openai.yaml +0 -4
- package/templates/.agents/skills/pre-pr-hygiene/SKILL.md +0 -83
- package/templates/.agents/skills/pre-pr-hygiene/agents/openai.yaml +0 -4
- package/templates/.agents/skills/work-tracker/SKILL.md +0 -141
- package/templates/.agents/skills/work-tracker/agents/openai.yaml +0 -4
- package/templates/.agents/skills/workspace-compress/SKILL.md +0 -113
- package/templates/.agents/skills/workspace-compress/agents/openai.yaml +0 -4
- package/templates/.waypoint/SOUL.md +0 -71
- package/templates/.waypoint/agent-operating-manual.md +0 -109
- package/templates/.waypoint/scripts/build-track-index.mjs +0 -169
- package/templates/.waypoint/track/README.md +0 -38
- package/templates/.waypoint/track/_template.md +0 -48
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
# Waypoint Agent Operating Manual
|
|
2
|
-
|
|
3
|
-
This repository uses Waypoint as its operating system for Codex.
|
|
4
|
-
|
|
5
|
-
These instructions are mandatory in this repo and override weaker generic guidance unless the user says otherwise.
|
|
6
|
-
|
|
7
|
-
If the repo needs custom AGENTS guidance, write it outside the managed `waypoint:start/end` block in `AGENTS.md`. Treat the managed block as Waypoint-owned and replaceable.
|
|
8
|
-
If a higher-priority instruction conflicts with Waypoint workflow, do not pretend the repo rule happened anyway. State the conflict plainly, explain the consequence, and ask the user for direction when needed.
|
|
9
|
-
|
|
10
|
-
## Session start
|
|
11
|
-
|
|
12
|
-
Run the Waypoint bootstrap only at session start, after compaction, or when the user explicitly asks for it:
|
|
13
|
-
|
|
14
|
-
1. Run `node .waypoint/scripts/prepare-context.mjs`
|
|
15
|
-
2. Read `.waypoint/SOUL.md`
|
|
16
|
-
3. Read this file
|
|
17
|
-
4. Read `.waypoint/WORKSPACE.md`
|
|
18
|
-
5. Read `.waypoint/ACTIVE_PLANS.md`
|
|
19
|
-
6. Read `.waypoint/context/MANIFEST.md`
|
|
20
|
-
7. Read every file listed in that manifest
|
|
21
|
-
|
|
22
|
-
## Repository memory model
|
|
23
|
-
|
|
24
|
-
The repository should contain the context the next agent needs.
|
|
25
|
-
|
|
26
|
-
- user-scoped `AGENTS.md` holds cross-project preferences and standing rules
|
|
27
|
-
- the repo root `AGENTS.md` holds durable repo context and always-on project rules
|
|
28
|
-
- `.waypoint/WORKSPACE.md` holds live execution state
|
|
29
|
-
- `.waypoint/ACTIVE_PLANS.md` holds the currently approved plan and active phase checkpoints
|
|
30
|
-
- `.waypoint/track/` holds detailed execution state for long-running work
|
|
31
|
-
- `.waypoint/docs/` holds durable project knowledge
|
|
32
|
-
- `.waypoint/plans/` holds durable plan docs
|
|
33
|
-
- `.waypoint/context/` holds the generated bootstrap bundle
|
|
34
|
-
|
|
35
|
-
General always-on workflow rules belong in `AGENTS.md` and this manual, not only in optional helper skills. Workflow-specific method detail belongs in the relevant skill. After bootstrap, use progressive disclosure: read only the routed docs and files the current task actually needs.
|
|
36
|
-
|
|
37
|
-
## Working defaults
|
|
38
|
-
|
|
39
|
-
- Fix root causes instead of papering over symptoms.
|
|
40
|
-
- The default for refactors and migrations is contract replacement, not compatibility preservation.
|
|
41
|
-
- Delete obsolete code aggressively. Remove stale branches, dead props, debug logs, compatibility scaffolding, unused files, and legacy paths as part of the change.
|
|
42
|
-
- Large destructive edits are allowed when they are the clearest route to the approved target state.
|
|
43
|
-
- Temporary breakage inside the active phase is acceptable. Do not stop there; finish the phase back to green.
|
|
44
|
-
- Do the level of cleanup the real codebase requires. Do not use generic “stay narrow” heuristics to avoid the root-cause fix.
|
|
45
|
-
- Keep communication concise and direct.
|
|
46
|
-
|
|
47
|
-
## Execution contract
|
|
48
|
-
|
|
49
|
-
Once the user approves a plan or tells you to proceed, that approved scope is the execution contract.
|
|
50
|
-
|
|
51
|
-
- Do not silently narrow, defer, or drop approved work.
|
|
52
|
-
- Execute approved work phase by phase.
|
|
53
|
-
- `WORKSPACE.md` and `ACTIVE_PLANS.md` are live files, not paperwork. Update them during the work, not after.
|
|
54
|
-
- Once scope is approved, execute it without asking for permission again for obvious implementation steps, cleanup, validation, or documentation that the approved work requires.
|
|
55
|
-
- Before reporting completion, reread `ACTIVE_PLANS.md`, the active tracker if one exists, `WORKSPACE.md`, and the relevant routed docs, then compare reality against the approved scope, current phase checkpoint, and acceptance criteria.
|
|
56
|
-
- If that reread shows the work is not complete, keep going.
|
|
57
|
-
|
|
58
|
-
Pause only when:
|
|
59
|
-
- a real blocker prevents forward progress
|
|
60
|
-
- a hidden-risk or non-obvious decision would materially change scope, behavior, cost, or data safety
|
|
61
|
-
- you want to change approved scope or defer approved work
|
|
62
|
-
- the user explicitly redirects, pauses, or narrows the work
|
|
63
|
-
|
|
64
|
-
## Refactors and migrations
|
|
65
|
-
|
|
66
|
-
For migrations and refactors:
|
|
67
|
-
|
|
68
|
-
- do a legacy seam inventory before implementation
|
|
69
|
-
- list every remaining read path, write path, sync or worker path, route contract, frontend consumer, event payload, fixture, and test surface that still depends on the legacy shape
|
|
70
|
-
- give each phase exact grep gates for the legacy symbols being removed
|
|
71
|
-
- do not treat the phase as review-ready or complete while those grep gates still fail
|
|
72
|
-
- when a contract cut changes the expected shape broadly, rewrite affected tests and fixtures in bulk for the new contract instead of dragging legacy test shapes forward through micro-edits
|
|
73
|
-
|
|
74
|
-
## Review and verification
|
|
75
|
-
|
|
76
|
-
Reviewer passes are for real phase boundaries, PR-ready handoff, and final closeout.
|
|
77
|
-
|
|
78
|
-
- Do not run heavyweight review loops after every tiny edit.
|
|
79
|
-
- Do not spend reviewer passes on a phase that still has known legacy seams or grep-gate failures.
|
|
80
|
-
- If reviewers find meaningful issues, fix them, rerun the relevant verification, and use fresh passes when needed.
|
|
81
|
-
|
|
82
|
-
Verify your own work before reporting completion.
|
|
83
|
-
|
|
84
|
-
- Match verification to the real risk surface.
|
|
85
|
-
- For UI work, inspect the real UI and send screenshots when the environment allows it.
|
|
86
|
-
- For backend or scripts, run code and inspect real output.
|
|
87
|
-
- If the result is still incomplete or unproven, keep going.
|
|
88
|
-
|
|
89
|
-
## State and documentation
|
|
90
|
-
|
|
91
|
-
- Update `WORKSPACE.md` whenever the active goal, phase, next step, blocker, checkpoint state, or verification state materially changes.
|
|
92
|
-
- Update `ACTIVE_PLANS.md` whenever the active approved plan, current phase, checkpoint, or approved scope changes.
|
|
93
|
-
- Use `.waypoint/track/` only when `WORKSPACE.md` is no longer enough to keep the work legible.
|
|
94
|
-
- Persist corrections in the right durable layer instead of defaulting to `AGENTS.md`.
|
|
95
|
-
- Update user-scoped `AGENTS.md` only for true cross-project standing rules.
|
|
96
|
-
- Update repo `AGENTS.md` only for durable repo-wide context or always-on project rules.
|
|
97
|
-
- Put workflow-specific corrections in the relevant skill, not in `AGENTS.md`.
|
|
98
|
-
- Update `.waypoint/docs/` for durable project knowledge and `.waypoint/plans/` for durable plan changes.
|
|
99
|
-
|
|
100
|
-
## Final quality bar
|
|
101
|
-
|
|
102
|
-
Before wrapping up, ask:
|
|
103
|
-
|
|
104
|
-
- Did I solve the user's actual problem?
|
|
105
|
-
- Did I finish the approved phase cleanly?
|
|
106
|
-
- Are the live state files current?
|
|
107
|
-
- Would the next agent understand what is going on from the repo?
|
|
108
|
-
|
|
109
|
-
If not, keep going.
|
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
import { existsSync, readFileSync, readdirSync, statSync, writeFileSync } from "node:fs";
|
|
4
|
-
import path from "node:path";
|
|
5
|
-
import { fileURLToPath } from "node:url";
|
|
6
|
-
|
|
7
|
-
const VALID_TRACK_STATUSES = new Set(["active", "blocked", "paused", "done", "archived"]);
|
|
8
|
-
const ACTIVE_TRACK_STATUSES = new Set(["active", "blocked", "paused"]);
|
|
9
|
-
const SKIP_NAMES = new Set(["README.md", "CHANGELOG.md", "LICENSE.md"]);
|
|
10
|
-
|
|
11
|
-
export function findProjectRoot(startDir) {
|
|
12
|
-
let current = path.resolve(startDir);
|
|
13
|
-
while (true) {
|
|
14
|
-
if (existsSync(path.join(current, ".waypoint", "config.toml"))) {
|
|
15
|
-
return current;
|
|
16
|
-
}
|
|
17
|
-
const parent = path.dirname(current);
|
|
18
|
-
if (parent === current) {
|
|
19
|
-
return path.resolve(startDir);
|
|
20
|
-
}
|
|
21
|
-
current = parent;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
function detectProjectRoot() {
|
|
26
|
-
const scriptDir = path.dirname(fileURLToPath(import.meta.url));
|
|
27
|
-
const scriptBasedRoot = findProjectRoot(path.resolve(scriptDir, "../.."));
|
|
28
|
-
if (existsSync(path.join(scriptBasedRoot, ".waypoint", "config.toml"))) {
|
|
29
|
-
return scriptBasedRoot;
|
|
30
|
-
}
|
|
31
|
-
return findProjectRoot(process.cwd());
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
function shouldSkipTrackFile(entry) {
|
|
35
|
-
return SKIP_NAMES.has(entry) || entry.startsWith("_");
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
function parseFrontmatter(filePath) {
|
|
39
|
-
const text = readFileSync(filePath, "utf8");
|
|
40
|
-
if (!text.startsWith("---\n")) {
|
|
41
|
-
return { summary: "", lastUpdated: "", readWhen: [], status: "" };
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
const endIndex = text.indexOf("\n---\n", 4);
|
|
45
|
-
if (endIndex === -1) {
|
|
46
|
-
return { summary: "", lastUpdated: "", readWhen: [], status: "" };
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
const frontmatter = text.slice(4, endIndex);
|
|
50
|
-
let summary = "";
|
|
51
|
-
let lastUpdated = "";
|
|
52
|
-
let status = "";
|
|
53
|
-
const readWhen = [];
|
|
54
|
-
let collectingReadWhen = false;
|
|
55
|
-
|
|
56
|
-
for (const rawLine of frontmatter.split("\n")) {
|
|
57
|
-
const line = rawLine.trim();
|
|
58
|
-
if (line.startsWith("summary:")) {
|
|
59
|
-
summary = line.slice("summary:".length).trim().replace(/^['"]|['"]$/g, "");
|
|
60
|
-
collectingReadWhen = false;
|
|
61
|
-
continue;
|
|
62
|
-
}
|
|
63
|
-
if (line.startsWith("last_updated:")) {
|
|
64
|
-
lastUpdated = line.slice("last_updated:".length).trim().replace(/^['"]|['"]$/g, "");
|
|
65
|
-
collectingReadWhen = false;
|
|
66
|
-
continue;
|
|
67
|
-
}
|
|
68
|
-
if (line.startsWith("status:")) {
|
|
69
|
-
status = line.slice("status:".length).trim().replace(/^['"]|['"]$/g, "").toLowerCase();
|
|
70
|
-
collectingReadWhen = false;
|
|
71
|
-
continue;
|
|
72
|
-
}
|
|
73
|
-
if (line.startsWith("read_when:")) {
|
|
74
|
-
collectingReadWhen = true;
|
|
75
|
-
continue;
|
|
76
|
-
}
|
|
77
|
-
if (collectingReadWhen && line.startsWith("- ")) {
|
|
78
|
-
readWhen.push(line.slice(2).trim());
|
|
79
|
-
continue;
|
|
80
|
-
}
|
|
81
|
-
if (collectingReadWhen && line.length > 0) {
|
|
82
|
-
collectingReadWhen = false;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
return { summary, lastUpdated, readWhen, status };
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
function walkTracks(projectRoot, currentDir, output, invalid) {
|
|
90
|
-
for (const entry of readdirSync(currentDir)) {
|
|
91
|
-
const fullPath = path.join(currentDir, entry);
|
|
92
|
-
const stat = statSync(fullPath);
|
|
93
|
-
if (stat.isDirectory()) {
|
|
94
|
-
walkTracks(projectRoot, fullPath, output, invalid);
|
|
95
|
-
continue;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
if (!entry.endsWith(".md") || shouldSkipTrackFile(entry)) {
|
|
99
|
-
continue;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
const { summary, lastUpdated, readWhen, status } = parseFrontmatter(fullPath);
|
|
103
|
-
if (!summary || !lastUpdated || readWhen.length === 0 || !VALID_TRACK_STATUSES.has(status)) {
|
|
104
|
-
invalid.push(path.relative(projectRoot, fullPath));
|
|
105
|
-
continue;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
output.push({
|
|
109
|
-
path: path.relative(projectRoot, fullPath),
|
|
110
|
-
summary,
|
|
111
|
-
readWhen,
|
|
112
|
-
status,
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
export function renderTracksIndex(projectRoot) {
|
|
118
|
-
const trackDir = path.join(projectRoot, ".waypoint", "track");
|
|
119
|
-
const entries = [];
|
|
120
|
-
const invalidTracks = [];
|
|
121
|
-
|
|
122
|
-
if (existsSync(trackDir)) {
|
|
123
|
-
walkTracks(projectRoot, trackDir, entries, invalidTracks);
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
const lines = [
|
|
127
|
-
"# Tracks Index",
|
|
128
|
-
"",
|
|
129
|
-
"Auto-generated by `.waypoint/scripts/build-track-index.mjs`. Read active trackers when resuming long-running work.",
|
|
130
|
-
"",
|
|
131
|
-
"## .waypoint/track/",
|
|
132
|
-
"",
|
|
133
|
-
];
|
|
134
|
-
|
|
135
|
-
if (entries.length === 0) {
|
|
136
|
-
lines.push("No tracker files found.");
|
|
137
|
-
} else {
|
|
138
|
-
entries.sort((a, b) => a.path.localeCompare(b.path));
|
|
139
|
-
for (const entry of entries) {
|
|
140
|
-
lines.push(`- **${entry.path}** — [${entry.status}] ${entry.summary}`);
|
|
141
|
-
lines.push(` Read when: ${entry.readWhen.join("; ")}`);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
lines.push("");
|
|
146
|
-
return {
|
|
147
|
-
content: `${lines.join("\n")}\n`,
|
|
148
|
-
invalidTracks,
|
|
149
|
-
activeTracks: entries
|
|
150
|
-
.filter((entry) => ACTIVE_TRACK_STATUSES.has(entry.status))
|
|
151
|
-
.map((entry) => entry.path)
|
|
152
|
-
.sort((a, b) => a.localeCompare(b)),
|
|
153
|
-
};
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
export function writeTracksIndex(projectRoot) {
|
|
157
|
-
const outputPath = path.join(projectRoot, ".waypoint", "TRACKS_INDEX.md");
|
|
158
|
-
const rendered = renderTracksIndex(projectRoot);
|
|
159
|
-
writeFileSync(outputPath, rendered.content, "utf8");
|
|
160
|
-
return { outputPath, activeTracks: rendered.activeTracks, invalidTracks: rendered.invalidTracks };
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
const isDirectExecution = process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url);
|
|
164
|
-
|
|
165
|
-
if (isDirectExecution) {
|
|
166
|
-
const projectRoot = detectProjectRoot();
|
|
167
|
-
const { outputPath } = writeTracksIndex(projectRoot);
|
|
168
|
-
console.log(`Wrote ${outputPath}`);
|
|
169
|
-
}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
# Waypoint Trackers
|
|
2
|
-
|
|
3
|
-
This directory holds active execution trackers for long-running work.
|
|
4
|
-
|
|
5
|
-
Use `.waypoint/track/` when the work is too large to fit safely in `WORKSPACE.md`, especially for:
|
|
6
|
-
|
|
7
|
-
- multi-session implementation campaigns
|
|
8
|
-
- broad audits followed by remediation
|
|
9
|
-
- large fix lists or rollout work
|
|
10
|
-
- verification or review loops that will take time to close
|
|
11
|
-
|
|
12
|
-
Tracker files are **execution state**, not general project memory.
|
|
13
|
-
|
|
14
|
-
- Keep durable architecture, decisions, and long-term reference material in `.waypoint/docs/`.
|
|
15
|
-
- Keep `WORKSPACE.md` short and current.
|
|
16
|
-
- Put detailed checklists, per-item status, blockers, and verification progress in `.waypoint/track/`.
|
|
17
|
-
|
|
18
|
-
Every tracker needs YAML frontmatter:
|
|
19
|
-
|
|
20
|
-
```yaml
|
|
21
|
-
---
|
|
22
|
-
summary: One-line description
|
|
23
|
-
last_updated: "2026-03-13 11:38 PDT"
|
|
24
|
-
status: active
|
|
25
|
-
read_when:
|
|
26
|
-
- resuming the workstream
|
|
27
|
-
---
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
Valid tracker statuses:
|
|
31
|
-
|
|
32
|
-
- `active`
|
|
33
|
-
- `blocked`
|
|
34
|
-
- `paused`
|
|
35
|
-
- `done`
|
|
36
|
-
- `archived`
|
|
37
|
-
|
|
38
|
-
`WORKSPACE.md` should point at the active tracker file under `## Active Trackers`.
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
summary: One-line description of the workstream
|
|
3
|
-
last_updated: "2026-03-13 11:38 PDT"
|
|
4
|
-
status: active
|
|
5
|
-
read_when:
|
|
6
|
-
- resuming this workstream
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Tracker Title
|
|
10
|
-
|
|
11
|
-
## Goal
|
|
12
|
-
|
|
13
|
-
What outcome this tracker is trying to reach.
|
|
14
|
-
|
|
15
|
-
## Source
|
|
16
|
-
|
|
17
|
-
- User request, audit, plan, or review thread that kicked off the work.
|
|
18
|
-
|
|
19
|
-
## Current State
|
|
20
|
-
|
|
21
|
-
- [2026-03-13 11:38 PDT] Current truth about the work.
|
|
22
|
-
|
|
23
|
-
## Next
|
|
24
|
-
|
|
25
|
-
- [2026-03-13 11:38 PDT] The next concrete action.
|
|
26
|
-
|
|
27
|
-
## Workstreams
|
|
28
|
-
|
|
29
|
-
### 1. Stream Name
|
|
30
|
-
|
|
31
|
-
- [ ] First task
|
|
32
|
-
- [ ] Second task
|
|
33
|
-
|
|
34
|
-
## Phase Checkpoints
|
|
35
|
-
|
|
36
|
-
- [ ] Checkpoint required before leaving the current phase
|
|
37
|
-
|
|
38
|
-
## Verification
|
|
39
|
-
|
|
40
|
-
- [ ] Verification step
|
|
41
|
-
|
|
42
|
-
## Decisions
|
|
43
|
-
|
|
44
|
-
- [2026-03-13 11:38 PDT] Decision and rationale.
|
|
45
|
-
|
|
46
|
-
## Notes
|
|
47
|
-
|
|
48
|
-
- Useful details that do not belong in `WORKSPACE.md`.
|