ridgeline 0.9.0 → 0.11.2
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/LICENSE +201 -21
- package/README.md +311 -133
- package/dist/agents/core/designer.md +38 -0
- package/dist/agents/core/direction-advisor.md +129 -0
- package/dist/agents/core/plan-reviewer.md +3 -1
- package/dist/agents/core/planner.md +22 -0
- package/dist/agents/core/retro-refiner.md +54 -0
- package/dist/agents/core/reviewer.md +27 -0
- package/dist/agents/specialists/design-specialist.md +93 -0
- package/dist/agents/specialists/reference-finder.md +70 -0
- package/dist/agents/specialists/visual-reviewer.md +103 -0
- package/dist/cli.js +168 -25
- package/dist/cli.js.map +1 -1
- package/dist/commands/auto.d.ts +21 -0
- package/dist/commands/auto.js +211 -0
- package/dist/commands/auto.js.map +1 -0
- package/dist/commands/build.js +3 -3
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/create.d.ts +13 -2
- package/dist/commands/create.js +59 -12
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/design.d.ts +9 -0
- package/dist/commands/design.js +267 -57
- package/dist/commands/design.js.map +1 -1
- package/dist/commands/directions.d.ts +13 -0
- package/dist/commands/directions.js +389 -0
- package/dist/commands/directions.js.map +1 -0
- package/dist/commands/ingest.d.ts +23 -0
- package/dist/commands/ingest.js +109 -0
- package/dist/commands/ingest.js.map +1 -0
- package/dist/commands/input.d.ts +21 -0
- package/dist/commands/input.js +83 -7
- package/dist/commands/input.js.map +1 -1
- package/dist/commands/qa-workflow.d.ts +19 -0
- package/dist/commands/qa-workflow.js +24 -1
- package/dist/commands/qa-workflow.js.map +1 -1
- package/dist/commands/retro-refine.d.ts +6 -0
- package/dist/commands/retro-refine.js +166 -0
- package/dist/commands/retro-refine.js.map +1 -0
- package/dist/commands/shape.d.ts +13 -0
- package/dist/commands/shape.js +112 -46
- package/dist/commands/shape.js.map +1 -1
- package/dist/commands/spec.d.ts +8 -0
- package/dist/commands/spec.js +8 -2
- package/dist/commands/spec.js.map +1 -1
- package/dist/engine/claude/claude.exec.js +1 -1
- package/dist/engine/claude/claude.exec.js.map +1 -1
- package/dist/engine/claude/sandbox.d.ts +2 -2
- package/dist/engine/claude/sandbox.greywall.js +4 -4
- package/dist/engine/claude/sandbox.greywall.js.map +1 -1
- package/dist/engine/claude/sandbox.js +2 -8
- package/dist/engine/claude/sandbox.js.map +1 -1
- package/dist/engine/claude/sandbox.types.d.ts +1 -1
- package/dist/engine/detect/index.d.ts +1 -0
- package/dist/engine/detect/index.js +13 -5
- package/dist/engine/detect/index.js.map +1 -1
- package/dist/engine/pipeline/build.exec.js +1 -1
- package/dist/engine/pipeline/build.exec.js.map +1 -1
- package/dist/engine/pipeline/ensemble.exec.js +2 -2
- package/dist/engine/pipeline/ensemble.exec.js.map +1 -1
- package/dist/engine/pipeline/phase.sequence.d.ts +17 -0
- package/dist/engine/pipeline/phase.sequence.js +107 -7
- package/dist/engine/pipeline/phase.sequence.js.map +1 -1
- package/dist/engine/pipeline/plan.exec.js +1 -1
- package/dist/engine/pipeline/plan.exec.js.map +1 -1
- package/dist/engine/pipeline/plan.review.js +2 -2
- package/dist/engine/pipeline/plan.review.js.map +1 -1
- package/dist/engine/pipeline/prompt.document.d.ts +5 -5
- package/dist/engine/pipeline/prompt.document.js +36 -39
- package/dist/engine/pipeline/prompt.document.js.map +1 -1
- package/dist/engine/pipeline/refine.exec.js +1 -1
- package/dist/engine/pipeline/refine.exec.js.map +1 -1
- package/dist/engine/pipeline/research.exec.js +3 -3
- package/dist/engine/pipeline/research.exec.js.map +1 -1
- package/dist/engine/pipeline/review.exec.js +1 -1
- package/dist/engine/pipeline/review.exec.js.map +1 -1
- package/dist/engine/pipeline/specify.exec.d.ts +6 -0
- package/dist/engine/pipeline/specify.exec.js +18 -5
- package/dist/engine/pipeline/specify.exec.js.map +1 -1
- package/dist/references/download.d.ts +30 -0
- package/dist/references/download.js +223 -0
- package/dist/references/download.js.map +1 -0
- package/dist/sensors/a11y.js +1 -1
- package/dist/sensors/a11y.js.map +1 -1
- package/dist/sensors/index.d.ts +10 -0
- package/dist/sensors/playwright.d.ts +6 -1
- package/dist/sensors/playwright.js +72 -50
- package/dist/sensors/playwright.js.map +1 -1
- package/dist/src/__tests__/cli.deep-ensemble-deprecation.test.js +64 -0
- package/dist/src/__tests__/cli.preflight-order.test.js +43 -0
- package/dist/src/__tests__/cli.preflight-wiring.test.js +87 -0
- package/dist/src/__tests__/cli.specialist-timeout-wiring.test.js +82 -0
- package/dist/src/__tests__/config.test.js +195 -0
- package/dist/src/__tests__/git.test.js +161 -0
- package/dist/src/catalog/__tests__/build-catalog.test.js +174 -0
- package/dist/src/catalog/__tests__/extract-metadata.test.js +108 -0
- package/dist/src/catalog/__tests__/parse-conventions.test.js +92 -0
- package/dist/src/catalog/__tests__/resolve-asset-dir.test.js +114 -0
- package/dist/src/catalog/build-catalog.js +305 -0
- package/dist/src/catalog/classify.js +189 -0
- package/dist/src/catalog/extract-metadata.js +174 -0
- package/dist/src/catalog/pack-sprites.js +106 -0
- package/dist/src/catalog/parse-conventions.js +85 -0
- package/dist/src/catalog/resolve-asset-dir.js +95 -0
- package/dist/src/catalog/types.js +2 -0
- package/dist/src/catalog/vision-describe.js +158 -0
- package/dist/src/cli.js +532 -0
- package/dist/src/commands/__tests__/build.test.js +223 -0
- package/dist/src/commands/__tests__/clean.test.js +12 -0
- package/dist/src/commands/__tests__/directions.test.js +165 -0
- package/dist/src/commands/__tests__/dry-run.test.js +119 -0
- package/dist/src/commands/__tests__/input.test.js +138 -0
- package/dist/src/commands/__tests__/plan.test.js +156 -0
- package/dist/src/commands/__tests__/qa-workflow.test.js +158 -0
- package/dist/src/commands/__tests__/refine.test.js +149 -0
- package/dist/src/commands/__tests__/research.test.js +156 -0
- package/dist/src/commands/__tests__/rewind.test.js +107 -0
- package/dist/src/commands/__tests__/shape.runtime.test.js +49 -0
- package/dist/src/commands/__tests__/spec.test.js +168 -0
- package/dist/src/commands/__tests__/ui.test.js +101 -0
- package/dist/src/commands/build.js +378 -0
- package/dist/src/commands/catalog.js +140 -0
- package/dist/src/commands/check.js +10 -0
- package/dist/src/commands/clean.js +8 -0
- package/dist/src/commands/create.js +130 -0
- package/dist/src/commands/design.js +411 -0
- package/dist/src/commands/directions.js +191 -0
- package/dist/src/commands/dry-run.js +65 -0
- package/dist/src/commands/index.js +13 -0
- package/dist/src/commands/ingest.js +104 -0
- package/dist/src/commands/input.js +129 -0
- package/dist/src/commands/plan.js +111 -0
- package/dist/src/commands/qa-workflow.js +162 -0
- package/dist/src/commands/refine.js +103 -0
- package/dist/src/commands/research.js +152 -0
- package/dist/src/commands/retrospective.js +125 -0
- package/dist/src/commands/rewind.js +79 -0
- package/dist/src/commands/shape.js +317 -0
- package/dist/src/commands/spec.js +143 -0
- package/dist/src/commands/ui.js +95 -0
- package/dist/src/config.js +115 -0
- package/dist/src/engine/__tests__/worktree.test.js +109 -0
- package/dist/src/engine/claude/__tests__/agent.prompt.test.js +83 -0
- package/dist/src/engine/claude/__tests__/claude.exec.stable.test.js +244 -0
- package/dist/src/engine/claude/__tests__/claude.exec.test.js +247 -0
- package/dist/src/engine/claude/__tests__/sandbox.greywall.test.js +180 -0
- package/dist/src/engine/claude/__tests__/sandbox.test.js +46 -0
- package/dist/src/engine/claude/__tests__/stable.prompt.test.js +280 -0
- package/dist/src/engine/claude/__tests__/stream.display.test.js +204 -0
- package/dist/src/engine/claude/__tests__/stream.parse.test.js +220 -0
- package/dist/src/engine/claude/__tests__/stream.result.test.js +121 -0
- package/dist/src/engine/claude/agent.prompt.js +49 -0
- package/dist/src/engine/claude/claude.exec.js +245 -0
- package/dist/src/engine/claude/sandbox.greywall.js +117 -0
- package/dist/src/engine/claude/sandbox.js +37 -0
- package/dist/src/engine/claude/sandbox.types.js +2 -0
- package/dist/src/engine/claude/stable.prompt.js +136 -0
- package/dist/src/engine/claude/stream.display.js +103 -0
- package/dist/src/engine/claude/stream.parse.js +100 -0
- package/dist/src/engine/claude/stream.result.js +65 -0
- package/dist/src/engine/claude/stream.types.js +22 -0
- package/dist/src/engine/detect/__tests__/detect.test.js +165 -0
- package/dist/src/engine/detect/index.js +159 -0
- package/dist/src/engine/discovery/__tests__/agent.registry.resolution.test.js +44 -0
- package/dist/src/engine/discovery/__tests__/agent.registry.test.js +164 -0
- package/dist/src/engine/discovery/__tests__/agent.scan.test.js +134 -0
- package/dist/src/engine/discovery/__tests__/plugin.scan.test.js +228 -0
- package/dist/src/engine/discovery/__tests__/skill.check.test.js +102 -0
- package/dist/src/engine/discovery/agent.registry.js +158 -0
- package/dist/src/engine/discovery/agent.scan.js +97 -0
- package/dist/src/engine/discovery/plugin.scan.js +136 -0
- package/dist/src/engine/discovery/skill.check.js +144 -0
- package/dist/src/engine/index.js +29 -0
- package/dist/src/engine/pipeline/__tests__/build.exec.test.js +189 -0
- package/dist/src/engine/pipeline/__tests__/ensemble.exec.test.js +317 -0
- package/dist/src/engine/pipeline/__tests__/extract-json.test.js +37 -0
- package/dist/src/engine/pipeline/__tests__/phase.graph.test.js +125 -0
- package/dist/src/engine/pipeline/__tests__/phase.sequence.cache-tokens.test.js +184 -0
- package/dist/src/engine/pipeline/__tests__/phase.sequence.required-tools.test.js +36 -0
- package/dist/src/engine/pipeline/__tests__/phase.sequence.required-views.test.js +69 -0
- package/dist/src/engine/pipeline/__tests__/phase.sequence.sensors.test.js +198 -0
- package/dist/src/engine/pipeline/__tests__/phase.sequence.test.js +272 -0
- package/dist/src/engine/pipeline/__tests__/pipeline.shared.test.js +284 -0
- package/dist/src/engine/pipeline/__tests__/plan.exec.test.js +119 -0
- package/dist/src/engine/pipeline/__tests__/prompt.document.test.js +61 -0
- package/dist/src/engine/pipeline/__tests__/review.exec.test.js +199 -0
- package/dist/src/engine/pipeline/__tests__/specialist.verdict.test.js +192 -0
- package/dist/src/engine/pipeline/__tests__/worktree.parallel.test.js +124 -0
- package/dist/src/engine/pipeline/build.exec.js +111 -0
- package/dist/src/engine/pipeline/ensemble.exec.js +584 -0
- package/dist/src/engine/pipeline/phase.graph.js +101 -0
- package/dist/src/engine/pipeline/phase.sequence.js +441 -0
- package/dist/src/engine/pipeline/pipeline.shared.js +187 -0
- package/dist/src/engine/pipeline/plan.exec.js +58 -0
- package/dist/src/engine/pipeline/plan.review.js +182 -0
- package/dist/src/engine/pipeline/prompt.document.js +49 -0
- package/dist/src/engine/pipeline/refine.exec.js +91 -0
- package/dist/src/engine/pipeline/research.exec.js +215 -0
- package/dist/src/engine/pipeline/review.exec.js +112 -0
- package/dist/src/engine/pipeline/sensors.collect.js +33 -0
- package/dist/src/engine/pipeline/specialist.verdict.js +188 -0
- package/dist/src/engine/pipeline/specify.exec.js +460 -0
- package/dist/src/engine/pipeline/worktree.parallel.js +121 -0
- package/dist/src/engine/worktree.js +98 -0
- package/dist/src/git.js +98 -0
- package/dist/src/references/__tests__/download.test.js +156 -0
- package/dist/src/references/download.js +222 -0
- package/dist/src/sensors/__tests__/a11y.test.js +169 -0
- package/dist/src/sensors/__tests__/contrast.test.js +91 -0
- package/dist/src/sensors/__tests__/index.test.js +53 -0
- package/dist/src/sensors/__tests__/playwright.test.js +381 -0
- package/dist/src/sensors/__tests__/vision.test.js +104 -0
- package/dist/src/sensors/a11y.js +133 -0
- package/dist/src/sensors/contrast.js +116 -0
- package/dist/src/sensors/index.js +2 -0
- package/dist/src/sensors/playwright.js +287 -0
- package/dist/src/sensors/vision.js +124 -0
- package/dist/src/shapes/__tests__/detect.test.js +131 -0
- package/dist/src/shapes/detect.js +86 -0
- package/dist/src/stores/__tests__/budget.test.js +129 -0
- package/dist/src/stores/__tests__/feedback.io.test.js +103 -0
- package/dist/src/stores/__tests__/feedback.verdict.test.js +227 -0
- package/dist/src/stores/__tests__/handoff.test.js +99 -0
- package/dist/src/stores/__tests__/inputs.test.js +131 -0
- package/dist/src/stores/__tests__/phases.test.js +213 -0
- package/dist/src/stores/__tests__/settings.test.js +255 -0
- package/dist/src/stores/__tests__/state.test.js +667 -0
- package/dist/src/stores/__tests__/tags.test.js +68 -0
- package/dist/src/stores/__tests__/trajectory.test.js +125 -0
- package/dist/src/stores/budget.js +78 -0
- package/dist/src/stores/feedback.format.js +70 -0
- package/dist/src/stores/feedback.io.js +63 -0
- package/dist/src/stores/feedback.parse.js +122 -0
- package/dist/src/stores/feedback.verdict.js +10 -0
- package/dist/src/stores/handoff.js +80 -0
- package/dist/src/stores/index.js +47 -0
- package/dist/src/stores/inputs.js +63 -0
- package/dist/src/stores/phases.js +101 -0
- package/dist/src/stores/settings.js +188 -0
- package/dist/src/stores/state.js +442 -0
- package/dist/src/stores/tags.js +33 -0
- package/dist/src/stores/trajectory.js +70 -0
- package/dist/src/types.js +2 -0
- package/dist/src/ui/__tests__/color.test.js +106 -0
- package/dist/src/ui/__tests__/contrast.test.js +53 -0
- package/dist/src/ui/__tests__/no-raw-ansi.test.js +73 -0
- package/dist/src/ui/__tests__/output.test.js +30 -0
- package/dist/src/ui/__tests__/preflight.caching.test.js +59 -0
- package/dist/src/ui/__tests__/preflight.install-hint.test.js +66 -0
- package/dist/src/ui/__tests__/preflight.test.js +216 -0
- package/dist/src/ui/__tests__/prompt.test.js +48 -0
- package/dist/src/ui/__tests__/spinner.test.js +179 -0
- package/dist/src/ui/__tests__/transcript.test.js +68 -0
- package/dist/src/ui/color.js +45 -0
- package/dist/src/ui/contrast.js +93 -0
- package/dist/src/ui/dashboard/__tests__/a11y.test.js +64 -0
- package/dist/src/ui/dashboard/__tests__/css.test.js +96 -0
- package/dist/src/ui/dashboard/__tests__/disconnect.test.js +76 -0
- package/dist/src/ui/dashboard/__tests__/events.test.js +40 -0
- package/dist/src/ui/dashboard/__tests__/html.test.js +80 -0
- package/dist/src/ui/dashboard/__tests__/no-watchfile.test.js +60 -0
- package/dist/src/ui/dashboard/__tests__/offline.test.js +49 -0
- package/dist/src/ui/dashboard/__tests__/reduced-motion.test.js +36 -0
- package/dist/src/ui/dashboard/__tests__/server.test.js +317 -0
- package/dist/src/ui/dashboard/__tests__/snapshot.test.js +82 -0
- package/dist/src/ui/dashboard/__tests__/watcher.test.js +81 -0
- package/dist/src/ui/dashboard/client.js +280 -0
- package/dist/src/ui/dashboard/css.js +340 -0
- package/dist/src/ui/dashboard/events.js +39 -0
- package/dist/src/ui/dashboard/favicon.js +19 -0
- package/dist/src/ui/dashboard/hex.js +15 -0
- package/dist/src/ui/dashboard/html.js +68 -0
- package/dist/src/ui/dashboard/server.js +256 -0
- package/dist/src/ui/dashboard/snapshot.js +70 -0
- package/dist/src/ui/dashboard/tokens.js +24 -0
- package/dist/src/ui/dashboard/watcher.js +237 -0
- package/dist/src/ui/index.js +13 -0
- package/dist/src/ui/logger.js +70 -0
- package/dist/src/ui/output.js +41 -0
- package/dist/src/ui/preflight.js +158 -0
- package/dist/src/ui/preflight.toolprobe.js +117 -0
- package/dist/src/ui/prompt.js +48 -0
- package/dist/src/ui/spinner.js +175 -0
- package/dist/src/ui/summary.js +93 -0
- package/dist/src/ui/transcript.js +69 -0
- package/dist/src/utils/__tests__/atomic-write.test.js +69 -0
- package/dist/src/utils/__tests__/file-lock.test.js +81 -0
- package/dist/src/utils/__tests__/flavour-removed.test.js +76 -0
- package/dist/src/utils/atomic-write.js +61 -0
- package/dist/src/utils/file-lock.js +94 -0
- package/dist/src/utils/flavour-removed.js +43 -0
- package/dist/stores/feedback.parse.js +1 -1
- package/dist/stores/feedback.parse.js.map +1 -1
- package/dist/stores/settings.d.ts +8 -1
- package/dist/stores/settings.js +13 -1
- package/dist/stores/settings.js.map +1 -1
- package/dist/stores/state.d.ts +4 -0
- package/dist/stores/state.js +22 -1
- package/dist/stores/state.js.map +1 -1
- package/dist/test/e2e/helpers.js +117 -0
- package/dist/test/e2e/pipeline.test.js +122 -0
- package/dist/test/e2e/planner.test.js +271 -0
- package/dist/test/factories.js +57 -0
- package/dist/test/setup.js +99 -0
- package/dist/types.d.ts +6 -0
- package/dist/ui/dashboard/events.d.ts +3 -6
- package/dist/ui/dashboard/events.js +24 -29
- package/dist/ui/dashboard/events.js.map +1 -1
- package/dist/ui/dashboard/server.js +1 -1
- package/dist/ui/dashboard/server.js.map +1 -1
- package/dist/ui/preflight.js +3 -0
- package/dist/ui/preflight.js.map +1 -1
- package/dist/utils/cli-args.d.ts +21 -0
- package/dist/utils/cli-args.js +81 -0
- package/dist/utils/cli-args.js.map +1 -0
- package/dist/vitest.config.js +11 -0
- package/dist/vitest.e2e.config.js +13 -0
- package/package.json +16 -4
package/README.md
CHANGED
|
@@ -5,40 +5,60 @@
|
|
|
5
5
|
Build harness for long-horizon software execution using AI agents.
|
|
6
6
|
|
|
7
7
|
Ridgeline decomposes large software ideas into phased builds using a
|
|
8
|
-
multi-agent pipeline (shaper, designer, specifier,
|
|
9
|
-
builder, reviewer) driven by the Claude CLI. It
|
|
10
|
-
tracks costs, and supports resumable
|
|
8
|
+
multi-agent pipeline (shaper, direction-advisor, designer, specifier,
|
|
9
|
+
researcher, refiner, planner, builder, reviewer) driven by the Claude CLI. It
|
|
10
|
+
manages state through git checkpoints, tracks costs, and supports resumable
|
|
11
|
+
execution when things go wrong.
|
|
11
12
|
|
|
12
13
|
## How it works
|
|
13
14
|
|
|
14
15
|
1. **Shape** -- describe what you want built. The shaper agent analyzes your
|
|
15
|
-
codebase and asks clarifying questions to produce a structured shape
|
|
16
|
-
2. **
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
16
|
+
codebase and asks clarifying questions to produce a structured `shape.md`.
|
|
17
|
+
2. **Directions** (optional, web-visual builds only) -- the
|
|
18
|
+
direction-advisor agent generates 2-3 differentiated visual direction
|
|
19
|
+
options as self-contained HTML demos under `directions/<NN>-<slug>/`. Each
|
|
20
|
+
direction lives in a different visual school with a named reference work.
|
|
21
|
+
You open the demos in a browser and pick one; the picked direction's
|
|
22
|
+
`tokens.md` and `brief.md` seed the design Q&A.
|
|
23
|
+
3. **Design** (optional) -- the designer agent establishes a visual design
|
|
24
|
+
system (`design.md`) through interactive Q&A. If reference imagery is
|
|
25
|
+
named, the reference-finder pulls representative images into
|
|
26
|
+
`references/<slug>/` and writes a `visual-anchors.md` the downstream
|
|
27
|
+
stages read. Auto-runs the asset catalog if assets exist, and injects
|
|
28
|
+
catalog context (detected style, palette, resolution) into the design
|
|
29
|
+
conversation. Works at build level or project level.
|
|
30
|
+
4. **Specify** -- an ensemble of three specialist agents (completeness,
|
|
31
|
+
clarity, pragmatism) drafts spec proposals, then a synthesizer merges
|
|
32
|
+
them into `spec.md`, `constraints.md`, and optionally `taste.md`.
|
|
33
|
+
5. **Research** (optional) -- an ensemble of research specialists (academic,
|
|
24
34
|
ecosystem, competitive) investigates the spec using web sources, then a
|
|
25
|
-
synthesizer merges findings into `research.md`. A gap analysis agenda
|
|
26
|
-
runs before specialist dispatch to focus research on spec gaps.
|
|
27
|
-
accumulate across iterations rather than being overwritten. A
|
|
28
|
-
single-agent mode is also available. See
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
35
|
+
synthesizer merges findings into `research.md`. A gap analysis agenda
|
|
36
|
+
step runs before specialist dispatch to focus research on spec gaps.
|
|
37
|
+
Findings accumulate across iterations rather than being overwritten. A
|
|
38
|
+
`--quick` single-agent mode is also available. See
|
|
39
|
+
[Research and Refine](docs/research.md).
|
|
40
|
+
6. **Refine** (optional) -- the refiner agent rewrites `spec.md`
|
|
41
|
+
incorporating research findings and writes `spec.changelog.md`
|
|
42
|
+
documenting what changed. Additive by default -- adds insights without
|
|
43
|
+
removing user-authored content.
|
|
44
|
+
7. **Plan** -- an ensemble of three specialist planners (simplicity,
|
|
45
|
+
thoroughness, velocity) proposes phase decompositions, then a
|
|
46
|
+
synthesizer merges them into numbered phase files with acceptance
|
|
47
|
+
criteria. An adversarial plan-reviewer audits the result and triggers a
|
|
48
|
+
one-shot revision if issues are found.
|
|
49
|
+
8. **Build** -- for each phase the builder agent implements the spec inside
|
|
50
|
+
your repo, then creates a git checkpoint.
|
|
51
|
+
9. **Review** -- the reviewer agent (read-only) checks the output against
|
|
52
|
+
the acceptance criteria and returns a structured verdict. For phases
|
|
53
|
+
that touch visual code, it dispatches the visual-reviewer specialist to
|
|
54
|
+
score rendered output against taste fidelity, motion discipline,
|
|
55
|
+
hierarchy, conventions, and anti-slop. On failure, the harness generates
|
|
56
|
+
a feedback file from the verdict for the builder's next attempt.
|
|
57
|
+
10. **Retry or advance** -- failed phases are retried up to a configurable
|
|
58
|
+
limit; passing phases hand off context to the next one.
|
|
59
|
+
|
|
60
|
+
For a one-shot kickoff from an existing PRD/RFC/design doc (no Q&A), see
|
|
61
|
+
the [`ingest`](#ridgeline-ingest-build-name-input) command.
|
|
42
62
|
|
|
43
63
|
## Install
|
|
44
64
|
|
|
@@ -51,32 +71,45 @@ npm install -g ridgeline
|
|
|
51
71
|
Ridgeline requires the [Claude CLI](https://docs.anthropic.com/en/docs/claude-code)
|
|
52
72
|
to be installed and authenticated.
|
|
53
73
|
|
|
54
|
-
For sandboxing (recommended), install
|
|
74
|
+
For sandboxing (recommended), install
|
|
75
|
+
[Greywall](https://github.com/GreyhavenHQ/greywall) on macOS or Linux:
|
|
76
|
+
`brew install greywall`. Provides domain-level network allowlisting and
|
|
77
|
+
filesystem isolation.
|
|
55
78
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
- **Linux:** [bubblewrap](https://github.com/containers/bubblewrap) --
|
|
60
|
-
`apt install bubblewrap` (full network block + read-only filesystem)
|
|
61
|
-
|
|
62
|
-
Sandboxing is on by default when a provider is detected. No flags needed.
|
|
79
|
+
Sandboxing is on by default when Greywall is detected. The default mode is
|
|
80
|
+
`semi-locked`; pass `--sandbox=strict` for tighter isolation or
|
|
81
|
+
`--sandbox=off` to disable.
|
|
63
82
|
|
|
64
83
|
## Quick start
|
|
65
84
|
|
|
66
85
|
```sh
|
|
67
|
-
#
|
|
86
|
+
# Step-through (one stage per invocation)
|
|
68
87
|
ridgeline my-feature "Build a REST API for task management"
|
|
69
88
|
|
|
89
|
+
# Unattended end-to-end (--auto)
|
|
90
|
+
# Build name auto-derived from the input path (./idea.md → my-feature build "idea")
|
|
91
|
+
ridgeline ./idea.md --auto
|
|
92
|
+
|
|
93
|
+
# Full power: research + parallel directions + inspiration-driven picker
|
|
94
|
+
ridgeline ./idea.md --auto --research --directions 4 --inspiration ~/my-pics/
|
|
95
|
+
|
|
70
96
|
# Or run each stage individually
|
|
71
97
|
ridgeline shape my-feature "Build a REST API for task management"
|
|
98
|
+
ridgeline directions my-feature # optional: pick a visual direction (web-visual only)
|
|
72
99
|
ridgeline design my-feature # optional: establish visual design system
|
|
73
100
|
ridgeline spec my-feature
|
|
74
|
-
ridgeline research my-feature
|
|
101
|
+
ridgeline research my-feature # optional: enrich spec with web research
|
|
75
102
|
ridgeline refine my-feature # optional: merge research into spec
|
|
76
103
|
ridgeline plan my-feature
|
|
77
|
-
ridgeline dry-run my-feature
|
|
104
|
+
ridgeline dry-run my-feature # preview before committing
|
|
78
105
|
ridgeline build my-feature
|
|
79
106
|
|
|
107
|
+
# One-shot kickoff from an existing spec doc (no Q&A)
|
|
108
|
+
ridgeline ingest my-feature ./path/to/PRD.md
|
|
109
|
+
|
|
110
|
+
# Refine the original input doc using lessons from learnings.md
|
|
111
|
+
ridgeline retro-refine my-feature
|
|
112
|
+
|
|
80
113
|
# Catalog media assets (images, audio, video, text)
|
|
81
114
|
ridgeline catalog my-feature --classify --describe
|
|
82
115
|
|
|
@@ -86,6 +119,9 @@ ridgeline build my-feature
|
|
|
86
119
|
# Rewind to an earlier stage and redo from there
|
|
87
120
|
ridgeline rewind my-feature --to spec
|
|
88
121
|
|
|
122
|
+
# Open the localhost dashboard for a build
|
|
123
|
+
ridgeline ui my-feature
|
|
124
|
+
|
|
89
125
|
# Clean up stale worktrees from failed builds
|
|
90
126
|
ridgeline clean
|
|
91
127
|
```
|
|
@@ -94,103 +130,199 @@ ridgeline clean
|
|
|
94
130
|
|
|
95
131
|
### `ridgeline [build-name] [input]` (default)
|
|
96
132
|
|
|
97
|
-
|
|
98
|
-
(shape → spec → plan → build
|
|
99
|
-
|
|
133
|
+
Without `--auto`, advances the build through the next incomplete required
|
|
134
|
+
pipeline stage (shape → spec → plan → build). With `--auto`, drives the
|
|
135
|
+
entire pipeline end-to-end including retrospective and (by default)
|
|
136
|
+
retro-refine. Accepts all flags from the individual commands.
|
|
137
|
+
|
|
138
|
+
The first positional argument is treated as the build name **unless** it
|
|
139
|
+
resolves to an existing file or directory on disk, in which case it's
|
|
140
|
+
treated as input and the build name is derived from `path.basename`.
|
|
141
|
+
Both `ridgeline my-name ./idea.md --auto` and `ridgeline ./idea.md
|
|
142
|
+
--auto` work.
|
|
143
|
+
|
|
144
|
+
| Flag | Default | Description |
|
|
145
|
+
|------|---------|-------------|
|
|
146
|
+
| `--auto` | off | Run the full orchestrator end-to-end without Q&A |
|
|
147
|
+
| `--stop-after <stage>` | `build` | In `--auto`, halt after this stage (`shape\|design\|spec\|plan\|build`) |
|
|
148
|
+
| `--no-refine` | off | In `--auto`, skip retro-refine at end of run |
|
|
149
|
+
| `--research [N]` | off | In `--auto`, run N research+refine iterations (default 1) |
|
|
150
|
+
| `--directions [N]` | off | In `--auto`, run N parallel design-specialists then a picker (default 3) |
|
|
151
|
+
| `--inspiration <src>` | none | Inspiration source for the directions picker (file/dir/text) |
|
|
152
|
+
| `--model <name>` | from settings, else `opus` | Model for all stages |
|
|
153
|
+
| `--timeout <minutes>` | `10` | Max duration per turn |
|
|
154
|
+
| `--max-budget-usd <n>` | none | Halt if cumulative cost exceeds this |
|
|
155
|
+
| `--max-retries <n>` | `2` | Max reviewer retry loops per phase |
|
|
156
|
+
| `--check <command>` | from constraints | Baseline check command |
|
|
157
|
+
| `--check-timeout <seconds>` | `1200` | Max duration for check command |
|
|
158
|
+
| `--constraints <path>` | auto | Path to constraints file |
|
|
159
|
+
| `--taste <path>` | auto | Path to taste file |
|
|
160
|
+
| `--context <text>` | none | Extra context appended to builder and planner prompts |
|
|
161
|
+
| `--sandbox <mode>` | `semi-locked` | Sandbox mode: `off`, `semi-locked`, or `strict` |
|
|
162
|
+
| `--specialists <n>` | `3` | Ensemble specialists per stage (1, 2, or 3) |
|
|
163
|
+
| `--thorough` | -- | Alias for `--specialists 3` (the default) |
|
|
164
|
+
| `-y, --yes` | off | Skip the preflight confirmation prompt |
|
|
165
|
+
|
|
166
|
+
In `--auto` mode the pipeline always produces a `design.md` (even for
|
|
167
|
+
non-visual builds, where it's a short placeholder) so downstream agents
|
|
168
|
+
have a consistent slot for visual data. After a successful build, a
|
|
169
|
+
retrospective runs and is appended to `learnings.md`; then
|
|
170
|
+
`retro-refine` produces a refined version of the input doc at
|
|
171
|
+
`<build-dir>/refined-input.md` for use in a re-run.
|
|
100
172
|
|
|
101
173
|
### `ridgeline shape [build-name] [input]`
|
|
102
174
|
|
|
103
|
-
Gathers project context through interactive Q&A and codebase analysis.
|
|
104
|
-
`shape.md` in the build directory. Accepts an optional input
|
|
105
|
-
path to an existing document or a natural language
|
|
175
|
+
Gathers project context through interactive Q&A and codebase analysis.
|
|
176
|
+
Produces `shape.md` in the build directory. Accepts an optional input
|
|
177
|
+
argument -- a file path to an existing document or a natural language
|
|
178
|
+
description.
|
|
106
179
|
|
|
107
180
|
| Flag | Default | Description |
|
|
108
181
|
|------|---------|-------------|
|
|
109
|
-
| `--model <name>` | `opus` | Model for shaper agent |
|
|
182
|
+
| `--model <name>` | from settings, else `opus` | Model for shaper agent |
|
|
110
183
|
| `--timeout <minutes>` | `10` | Max duration per turn |
|
|
111
|
-
|
|
184
|
+
|
|
185
|
+
### `ridgeline directions [build-name]`
|
|
186
|
+
|
|
187
|
+
Generates differentiated visual direction options before the design Q&A.
|
|
188
|
+
Web-visual shapes only — exits no-op for backend / non-visual builds and
|
|
189
|
+
warns/skips for game-visual / print-layout.
|
|
190
|
+
|
|
191
|
+
In **interactive mode** (default), the direction-advisor produces N
|
|
192
|
+
directions in one call and prompts the user to pick by id. Each
|
|
193
|
+
direction lives in a separate visual school (with a named reference
|
|
194
|
+
work) under `directions/<NN>-<slug>/`, containing `brief.md`,
|
|
195
|
+
`tokens.md`, and a `demo/index.html`.
|
|
196
|
+
|
|
197
|
+
In **`--auto` mode**, the harness dispatches N parallel
|
|
198
|
+
`design-specialist` subagents — each generates one direction in a
|
|
199
|
+
distinct visual school — then `direction-advisor` runs in picker mode
|
|
200
|
+
to choose the best fit against `--inspiration`. If no inspiration is
|
|
201
|
+
provided or the picker returns ambiguous, it falls back to an
|
|
202
|
+
interactive prompt.
|
|
203
|
+
|
|
204
|
+
| Flag | Default | Description |
|
|
205
|
+
|------|---------|-------------|
|
|
206
|
+
| `--auto` | off | Run parallel specialists + auto picker (uses `--inspiration`) |
|
|
207
|
+
| `--inspiration <src>` | none | File, directory, or inline text the picker matches against |
|
|
208
|
+
| `--model <name>` | from settings, else `opus` | Model for direction-advisor agent |
|
|
209
|
+
| `--timeout <minutes>` | `15` | Max duration in minutes |
|
|
210
|
+
| `--count <n>` | from settings, else `2` | Number of directions to generate |
|
|
211
|
+
| `--thorough` | -- | Alias for `--count 3` |
|
|
212
|
+
| `--skip` | -- | Explicit no-op (skip direction generation) |
|
|
213
|
+
| `-y, --yes` | off | Skip the preflight confirmation prompt |
|
|
214
|
+
|
|
215
|
+
Typical cost is $2-5 per run with opus (interactive); $1.50-$2.50 per
|
|
216
|
+
specialist in `--auto` mode.
|
|
112
217
|
|
|
113
218
|
### `ridgeline design [build-name]`
|
|
114
219
|
|
|
115
|
-
Establishes or updates a visual design system through interactive Q&A.
|
|
116
|
-
`design.md` in the build directory (or project-level if no build
|
|
117
|
-
If an asset directory exists but no catalog has been
|
|
118
|
-
auto-run and its summary (detected style, palette,
|
|
119
|
-
breakdown) is injected into the designer's context.
|
|
220
|
+
Establishes or updates a visual design system through interactive Q&A.
|
|
221
|
+
Produces `design.md` in the build directory (or project-level if no build
|
|
222
|
+
name is given). If an asset directory exists but no catalog has been
|
|
223
|
+
built, the catalog is auto-run and its summary (detected style, palette,
|
|
224
|
+
resolution, category breakdown) is injected into the designer's context.
|
|
225
|
+
If `directions/picked.txt` exists, the picked direction's tokens seed the
|
|
226
|
+
Q&A defaults; if `references/visual-anchors.md` exists, it is loaded as
|
|
227
|
+
additional context.
|
|
120
228
|
|
|
121
229
|
| Flag | Default | Description |
|
|
122
230
|
|------|---------|-------------|
|
|
123
|
-
| `--model <name>` | `opus` | Model for designer agent |
|
|
231
|
+
| `--model <name>` | from settings, else `opus` | Model for designer agent |
|
|
124
232
|
| `--timeout <minutes>` | `10` | Max duration per turn |
|
|
125
|
-
| `--flavour <name-or-path>` | none | Agent flavour: built-in name or path to custom agents |
|
|
126
233
|
|
|
127
|
-
### `ridgeline spec [build-name]`
|
|
234
|
+
### `ridgeline spec [build-name] [input]`
|
|
128
235
|
|
|
129
|
-
Runs the specifier ensemble:
|
|
130
|
-
pragmatism
|
|
131
|
-
`spec.md`, `constraints.md`,
|
|
236
|
+
Runs the specifier ensemble: specialist agents (completeness, clarity,
|
|
237
|
+
pragmatism, plus visual-coherence for visual shapes) draft proposals in
|
|
238
|
+
parallel, then a synthesizer merges them into `spec.md`, `constraints.md`,
|
|
239
|
+
and optionally `taste.md`. Optionally accepts an `input` argument -- a
|
|
240
|
+
path to a file (convention: `idea.md`) or raw text -- which the
|
|
241
|
+
synthesizer treats as authoritative source material to preserve alongside
|
|
242
|
+
`shape.md`.
|
|
132
243
|
|
|
133
244
|
| Flag | Default | Description |
|
|
134
245
|
|------|---------|-------------|
|
|
135
|
-
| `--model <name>` | `opus` | Model for specifier agents |
|
|
246
|
+
| `--model <name>` | from settings, else `opus` | Model for specifier agents |
|
|
136
247
|
| `--timeout <minutes>` | `10` | Max duration per turn |
|
|
137
248
|
| `--max-budget-usd <n>` | none | Halt if cumulative cost exceeds this |
|
|
138
|
-
| `--
|
|
249
|
+
| `--specialists <n>` | `3` | Number of specialists (1, 2, or 3) |
|
|
250
|
+
| `--thorough` | -- | Alias for `--specialists 3` (the default) |
|
|
251
|
+
|
|
252
|
+
### `ridgeline ingest [build-name] [input]`
|
|
253
|
+
|
|
254
|
+
One-shot non-interactive pipeline kickoff. Converts a freeform spec --
|
|
255
|
+
either a single file (PRD, RFC, design doc) or a directory of related
|
|
256
|
+
markdown/text files -- into `shape.md`, `spec.md`, `constraints.md`,
|
|
257
|
+
`taste.md`, plus `design.md` when visual shapes match, in a single run
|
|
258
|
+
with no Q&A. The synthesizer flags inferred facts in a `## Inferred /
|
|
259
|
+
Gaps` section per output file so you can patch holes by editing the
|
|
260
|
+
markdown rather than answering chat questions, before running `plan`.
|
|
261
|
+
|
|
262
|
+
| Flag | Default | Description |
|
|
263
|
+
|------|---------|-------------|
|
|
264
|
+
| `--model <name>` | from settings, else `opus` | Model for shaper, designer, and specifier |
|
|
265
|
+
| `--timeout <minutes>` | `10` | Max duration per turn |
|
|
266
|
+
| `--max-budget-usd <n>` | none | Halt if cumulative cost exceeds this |
|
|
267
|
+
| `--specialists <n>` | `3` | Number of specialists (1, 2, or 3) |
|
|
139
268
|
|
|
140
269
|
### `ridgeline research [build-name]`
|
|
141
270
|
|
|
142
|
-
Researches the spec using web sources. Produces `research.md` in the
|
|
143
|
-
directory. Optional step between `spec` and `plan`. See
|
|
271
|
+
Researches the spec using web sources. Produces `research.md` in the
|
|
272
|
+
build directory. Optional step between `spec` and `plan`. See
|
|
144
273
|
[Research and Refine](docs/research.md) for details.
|
|
145
274
|
|
|
146
275
|
| Flag | Default | Description |
|
|
147
276
|
|------|---------|-------------|
|
|
148
|
-
| `--model <name>` | `opus` | Model for research agents |
|
|
277
|
+
| `--model <name>` | from settings, else `opus` | Model for research agents |
|
|
149
278
|
| `--timeout <minutes>` | `15` | Max duration per agent |
|
|
150
279
|
| `--max-budget-usd <n>` | none | Halt if cumulative cost exceeds this |
|
|
151
280
|
| `--quick` | off | Run a single random specialist instead of the full ensemble |
|
|
152
281
|
| `--auto [iterations]` | off | Auto-loop: research + refine for N iterations (default 2) |
|
|
153
|
-
| `--
|
|
282
|
+
| `--specialists <n>` | `3` | Number of specialists (1, 2, or 3) |
|
|
154
283
|
|
|
155
284
|
### `ridgeline refine [build-name]`
|
|
156
285
|
|
|
157
|
-
Merges `research.md` findings into `spec.md`. Run after reviewing or
|
|
158
|
-
`research.md`.
|
|
286
|
+
Merges `research.md` findings into `spec.md`. Run after reviewing or
|
|
287
|
+
editing `research.md`.
|
|
159
288
|
|
|
160
289
|
| Flag | Default | Description |
|
|
161
290
|
|------|---------|-------------|
|
|
162
|
-
| `--model <name>` | `opus` | Model for refiner agent |
|
|
291
|
+
| `--model <name>` | from settings, else `opus` | Model for refiner agent |
|
|
163
292
|
| `--timeout <minutes>` | `10` | Max duration |
|
|
164
|
-
| `--flavour <name-or-path>` | none | Agent flavour: built-in name or path to custom agents |
|
|
165
293
|
|
|
166
294
|
### `ridgeline plan [build-name]`
|
|
167
295
|
|
|
168
|
-
Runs the planner ensemble: three specialist planners (simplicity,
|
|
169
|
-
velocity) propose phase decompositions in parallel, then a
|
|
170
|
-
them into numbered phase files (`01-slug.md`,
|
|
171
|
-
build's `phases/` directory.
|
|
296
|
+
Runs the planner ensemble: three specialist planners (simplicity,
|
|
297
|
+
thoroughness, velocity) propose phase decompositions in parallel, then a
|
|
298
|
+
synthesizer merges them into numbered phase files (`01-slug.md`,
|
|
299
|
+
`02-slug.md`, ...) stored in the build's `phases/` directory. An
|
|
300
|
+
adversarial plan-reviewer audits the synthesized plan and triggers a
|
|
301
|
+
one-shot revision if it surfaces issues. Phase specs may declare a
|
|
302
|
+
`## Required Views` section (visual builds) and a `## Required Tools`
|
|
303
|
+
section (any build); the harness probes each before its phase runs.
|
|
172
304
|
|
|
173
305
|
| Flag | Default | Description |
|
|
174
306
|
|------|---------|-------------|
|
|
175
|
-
| `--model <name>` | `opus` | Model for planner agents |
|
|
307
|
+
| `--model <name>` | from settings, else `opus` | Model for planner agents |
|
|
176
308
|
| `--timeout <minutes>` | `120` | Max planning duration |
|
|
177
309
|
| `--constraints <path>` | auto | Path to constraints file |
|
|
178
310
|
| `--taste <path>` | auto | Path to taste file |
|
|
179
|
-
| `--
|
|
311
|
+
| `--specialists <n>` | `3` | Number of specialists (1, 2, or 3) |
|
|
180
312
|
|
|
181
313
|
### `ridgeline dry-run [build-name]`
|
|
182
314
|
|
|
183
|
-
Displays the execution plan without invoking builders or reviewers.
|
|
184
|
-
the same flags as `plan`.
|
|
315
|
+
Displays the execution plan without invoking builders or reviewers.
|
|
316
|
+
Accepts the same flags as `plan`.
|
|
185
317
|
|
|
186
318
|
### `ridgeline build [build-name]`
|
|
187
319
|
|
|
188
|
-
Executes the full build pipeline: build each phase, evaluate, retry on
|
|
189
|
-
and advance on success.
|
|
320
|
+
Executes the full build pipeline: build each phase, evaluate, retry on
|
|
321
|
+
failure, and advance on success.
|
|
190
322
|
|
|
191
323
|
| Flag | Default | Description |
|
|
192
324
|
|------|---------|-------------|
|
|
193
|
-
| `--model <name>` | `opus` | Model for builder and reviewer |
|
|
325
|
+
| `--model <name>` | from settings, else `opus` | Model for builder and reviewer |
|
|
194
326
|
| `--timeout <minutes>` | `120` | Max duration per phase |
|
|
195
327
|
| `--check-timeout <seconds>` | `1200` | Max duration for check command |
|
|
196
328
|
| `--max-retries <n>` | `2` | Max reviewer retry loops per phase |
|
|
@@ -199,13 +331,13 @@ and advance on success.
|
|
|
199
331
|
| `--constraints <path>` | auto | Path to constraints file |
|
|
200
332
|
| `--taste <path>` | auto | Path to taste file |
|
|
201
333
|
| `--context <text>` | none | Extra context appended to builder and planner prompts |
|
|
202
|
-
| `--
|
|
203
|
-
| `--
|
|
334
|
+
| `--sandbox <mode>` | `semi-locked` | Sandbox mode: `off`, `semi-locked`, or `strict` |
|
|
335
|
+
| `--no-structured-log` | off | Disable structured logging to `log.jsonl` |
|
|
204
336
|
|
|
205
337
|
The build command automatically resumes from the last successful phase if
|
|
206
|
-
previous state exists. Each build runs in an isolated git worktree --
|
|
207
|
-
phases are reflected back to your branch, and failed builds
|
|
208
|
-
intact for inspection.
|
|
338
|
+
previous state exists. Each build runs in an isolated git worktree --
|
|
339
|
+
completed phases are reflected back to your branch, and failed builds
|
|
340
|
+
leave the worktree intact for inspection.
|
|
209
341
|
|
|
210
342
|
### `ridgeline rewind <build-name>`
|
|
211
343
|
|
|
@@ -217,29 +349,32 @@ Resets pipeline state to a given stage and deletes downstream artifacts.
|
|
|
217
349
|
|
|
218
350
|
### `ridgeline catalog [build-name]`
|
|
219
351
|
|
|
220
|
-
Indexes media assets into `asset-catalog.json`
|
|
221
|
-
feeds into the design and build phases. Supports images, audio,
|
|
222
|
-
files. The catalog pipeline runs in
|
|
223
|
-
|
|
224
|
-
1. **Deterministic metadata** (always runs)
|
|
225
|
-
file metadata (size, hash, dimensions for images), detects
|
|
226
|
-
tileable textures, infers category from directory
|
|
227
|
-
conventions (e.g., `characters/knight-walk.png`
|
|
228
|
-
subject "knight", state "walk"). Computes
|
|
229
|
-
aggregates (detected style, palette,
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
352
|
+
Indexes media assets into `asset-catalog.json` -- a structured metadata
|
|
353
|
+
file that feeds into the design and build phases. Supports images, audio,
|
|
354
|
+
video, and text files. The catalog pipeline runs in tiers:
|
|
355
|
+
|
|
356
|
+
1. **Deterministic metadata** (always runs) -- scans the asset directory,
|
|
357
|
+
extracts file metadata (size, hash, dimensions for images), detects
|
|
358
|
+
spritesheets and tileable textures, infers category from directory
|
|
359
|
+
structure and filename conventions (e.g., `characters/knight-walk.png`
|
|
360
|
+
→ category "characters", subject "knight", state "walk"). Computes
|
|
361
|
+
project-wide visual identity aggregates (detected style, palette,
|
|
362
|
+
resolution).
|
|
363
|
+
2. **Classification** (with `--classify`) -- assigns categories to
|
|
364
|
+
uncategorized files. Filename heuristics run first (e.g., `bg_*` →
|
|
365
|
+
backgrounds, `sfx_*` → sfx). Files that don't match any pattern fall
|
|
366
|
+
through to AI classification using Claude vision for images or text
|
|
367
|
+
prompts for other media types.
|
|
368
|
+
3. **Vision enrichment** (with `--describe`) -- uses Claude vision to add
|
|
369
|
+
semantic descriptions, facing direction, pose, style tags, and
|
|
370
|
+
animation type for image assets. Layout and UI assets are
|
|
371
|
+
auto-described regardless of the flag.
|
|
372
|
+
4. **Sprite packing** (with `--pack`) -- groups image assets by category
|
|
373
|
+
and packs them into 2048×2048 sprite atlases with PixiJS-compatible
|
|
374
|
+
JSON metadata. Backgrounds and layout references are excluded.
|
|
375
|
+
|
|
376
|
+
The catalog is incremental -- unchanged files (by content hash) are
|
|
377
|
+
skipped on subsequent runs unless `--force` is set.
|
|
243
378
|
|
|
244
379
|
| Flag | Default | Description |
|
|
245
380
|
|------|---------|-------------|
|
|
@@ -249,7 +384,7 @@ subsequent runs unless `--force` is set.
|
|
|
249
384
|
| `--pack` | off | Generate sprite atlases after cataloging |
|
|
250
385
|
| `--batch` | off | Batch multiple images per vision call |
|
|
251
386
|
| `--force` | off | Re-process all assets ignoring content hash |
|
|
252
|
-
| `--model <name>` | `opus` | Model for vision and classification |
|
|
387
|
+
| `--model <name>` | from settings, else `opus` | Model for vision and classification |
|
|
253
388
|
| `--timeout <minutes>` | `5` | Max duration per AI call |
|
|
254
389
|
|
|
255
390
|
Asset directory is resolved in order: `--asset-dir` flag,
|
|
@@ -258,38 +393,58 @@ Asset directory is resolved in order: `--asset-dir` flag,
|
|
|
258
393
|
|
|
259
394
|
### `ridgeline retrospective [build-name]`
|
|
260
395
|
|
|
261
|
-
Analyzes a completed build and extracts learnings for future builds.
|
|
262
|
-
trajectory log, budget, state, and any feedback files, then
|
|
263
|
-
insights to `.ridgeline/learnings.md`. Future builds
|
|
264
|
-
learnings if the file exists.
|
|
396
|
+
Analyzes a completed build and extracts learnings for future builds.
|
|
397
|
+
Reads the trajectory log, budget, state, and any feedback files, then
|
|
398
|
+
appends structured insights to `.ridgeline/learnings.md`. Future builds
|
|
399
|
+
automatically pick up these learnings if the file exists.
|
|
265
400
|
|
|
266
401
|
| Flag | Default | Description |
|
|
267
402
|
|------|---------|-------------|
|
|
268
|
-
| `--model <name>` | `opus` | Model for retrospective agent |
|
|
403
|
+
| `--model <name>` | from settings, else `opus` | Model for retrospective agent |
|
|
269
404
|
| `--timeout <minutes>` | `10` | Max duration |
|
|
270
|
-
| `--flavour <name-or-path>` | none | Agent flavour: built-in name or path to custom agents |
|
|
271
405
|
|
|
272
|
-
### `ridgeline
|
|
406
|
+
### `ridgeline retro-refine [build-name]`
|
|
273
407
|
|
|
274
|
-
|
|
275
|
-
|
|
408
|
+
Reads `.ridgeline/learnings.md` plus the build's spec/constraints/taste
|
|
409
|
+
and any phase feedback, then writes a refined version of the original
|
|
410
|
+
input doc to `<build-dir>/refined-input.md`. The original input is never
|
|
411
|
+
mutated — the refined doc is a separate file the user can review and
|
|
412
|
+
copy back over the source for a re-run that starts from a sharper spec.
|
|
413
|
+
Runs automatically at the tail of `--auto` (unless `--no-refine`); also
|
|
414
|
+
runnable manually after `retrospective`.
|
|
276
415
|
|
|
277
416
|
| Flag | Default | Description |
|
|
278
417
|
|------|---------|-------------|
|
|
279
|
-
| `--
|
|
418
|
+
| `--model <name>` | from settings, else `opus` | Model for retro-refiner agent |
|
|
419
|
+
| `--timeout <minutes>` | `10` | Max duration |
|
|
420
|
+
|
|
421
|
+
### `ridgeline ui [build-name]`
|
|
422
|
+
|
|
423
|
+
Opens a localhost dashboard for monitoring a build. If no build name is
|
|
424
|
+
given, the most recently active build is selected. Streams trajectory
|
|
425
|
+
events, budget, and phase status in real time.
|
|
426
|
+
|
|
427
|
+
| Flag | Default | Description |
|
|
428
|
+
|------|---------|-------------|
|
|
429
|
+
| `--port <number>` | `4411` | Port to bind (falls back to next free port if taken) |
|
|
430
|
+
|
|
431
|
+
### `ridgeline check`
|
|
432
|
+
|
|
433
|
+
Reports project prerequisites and tooling status.
|
|
280
434
|
|
|
281
435
|
### `ridgeline clean`
|
|
282
436
|
|
|
283
|
-
Removes all build worktrees under `.ridgeline/worktrees/` and their
|
|
284
|
-
WIP branches. Use this after inspecting a failed build.
|
|
437
|
+
Removes all build worktrees under `.ridgeline/worktrees/` and their
|
|
438
|
+
associated WIP branches. Use this after inspecting a failed build.
|
|
285
439
|
|
|
286
440
|
## Build directory structure
|
|
287
441
|
|
|
288
442
|
```text
|
|
289
443
|
.ridgeline/
|
|
290
|
-
├── settings.json # Optional project-level config (network allowlist, etc.)
|
|
444
|
+
├── settings.json # Optional project-level config (model, sandbox, network allowlist, etc.)
|
|
291
445
|
├── design.md # Optional project-level visual design system
|
|
292
446
|
├── learnings.md # Optional accumulated build learnings (from retrospective)
|
|
447
|
+
├── directions/ # Optional project-level visual direction options
|
|
293
448
|
├── worktrees/ # Git worktrees for active builds
|
|
294
449
|
│ └── <build-name>/ # Isolated working directory per build
|
|
295
450
|
└── builds/<build-name>/
|
|
@@ -301,6 +456,16 @@ WIP branches. Use this after inspecting a failed build.
|
|
|
301
456
|
├── research.md # Optional research findings (from researcher)
|
|
302
457
|
├── spec.changelog.md # Optional changelog of spec refinements
|
|
303
458
|
├── asset-catalog.json # Optional indexed media assets (from catalog)
|
|
459
|
+
├── directions/ # Optional visual direction options (from direction-advisor)
|
|
460
|
+
│ ├── 01-<slug>/
|
|
461
|
+
│ │ ├── brief.md
|
|
462
|
+
│ │ ├── tokens.md
|
|
463
|
+
│ │ └── demo/index.html
|
|
464
|
+
│ ├── 02-<slug>/
|
|
465
|
+
│ └── picked.txt # The id of the user-picked direction
|
|
466
|
+
├── references/ # Optional reference imagery (from reference-finder)
|
|
467
|
+
│ ├── <slug>/ # Downloaded image files
|
|
468
|
+
│ └── visual-anchors.md # Per-anchor descriptions for downstream stages
|
|
304
469
|
├── phases/
|
|
305
470
|
│ ├── 01-scaffold.md
|
|
306
471
|
│ ├── 01-scaffold.feedback.md # Generated by harness on review failure
|
|
@@ -309,6 +474,7 @@ WIP branches. Use this after inspecting a failed build.
|
|
|
309
474
|
├── state.json # Phase statuses, retries, timestamps, git tags
|
|
310
475
|
├── budget.json # Per-invocation cost tracking
|
|
311
476
|
├── trajectory.jsonl # Event log (plan/build/eval start/complete)
|
|
477
|
+
├── log.jsonl # Optional structured log
|
|
312
478
|
└── handoff.md # Context passed to the next phase
|
|
313
479
|
```
|
|
314
480
|
|
|
@@ -320,23 +486,35 @@ Constraint and taste files are resolved in order:
|
|
|
320
486
|
2. Build-level (`.ridgeline/builds/<build-name>/constraints.md`)
|
|
321
487
|
3. Project-level (`.ridgeline/constraints.md`)
|
|
322
488
|
|
|
323
|
-
Project-level settings (
|
|
324
|
-
|
|
489
|
+
Project-level settings (default model, sandbox extras, directions count,
|
|
490
|
+
specialist count, network allowlist, etc.) are loaded from
|
|
491
|
+
`.ridgeline/settings.json`. See [SECURITY.md](SECURITY.md) for details
|
|
492
|
+
on the sandbox model.
|
|
325
493
|
|
|
326
494
|
## Development
|
|
327
495
|
|
|
328
496
|
```sh
|
|
329
497
|
npm install
|
|
330
|
-
npm run build
|
|
331
|
-
npm run dev
|
|
332
|
-
npm
|
|
333
|
-
npm run
|
|
334
|
-
npm run
|
|
335
|
-
npm run
|
|
336
|
-
npm run
|
|
337
|
-
npm run
|
|
498
|
+
npm run build # Compile TypeScript and copy agent prompts
|
|
499
|
+
npm run dev # Watch mode
|
|
500
|
+
npm run check # Single command for the full quality pipeline
|
|
501
|
+
npm run check:bail # Stop at the first failing step
|
|
502
|
+
npm run check:json # Machine-readable summary on stdout (for agents)
|
|
503
|
+
npm run check:all # Default checks plus stryker mutation testing
|
|
504
|
+
npm run test:unit # Unit tests only (vitest)
|
|
505
|
+
npm run test:e2e # End-to-end tests
|
|
506
|
+
npm run test:watch # Watch mode
|
|
338
507
|
```
|
|
339
508
|
|
|
509
|
+
`npm run check` is the canonical pre-commit gate. It runs eight checks
|
|
510
|
+
(typecheck, oxlint with type-aware tsgolint, ast-grep structural rules,
|
|
511
|
+
agnix agent metadata, fallow dead code / duplication / complexity,
|
|
512
|
+
markdownlint, cspell, and vitest), captures per-tool output to
|
|
513
|
+
`.check/`, and writes a normalized `summary.json` for agent ingestion.
|
|
514
|
+
See [docs/development-checks.md](docs/development-checks.md) for the
|
|
515
|
+
full breakdown, output schema, and how to add new structural rules or
|
|
516
|
+
words to the spell-check dictionary.
|
|
517
|
+
|
|
340
518
|
## License
|
|
341
519
|
|
|
342
|
-
[
|
|
520
|
+
[Apache 2.0](LICENSE)
|