Project page on Ghost Who Codes
LCLP is a lightweight human-plus-LLM process for shaping, planning,
executing, and reviewing software changes across durable and temporary context
layers.
This repository contains:
- the exported process definition, templates, and prompts in process/
- the exported bootstrap and retrofit guidance in bootstrap/
- the exported runtime skeleton in templates/workflow/
- repo-local reference docs in docs/
- repo-local worked examples in examples/
- optional released tracker source in
cmd/lclp-track/
Choose the entrypoint that matches your situation:
- I want the AI to choose the next valid phase for one change: process/RUN_LCLP_FOR_CHANGE.md
- I want to run the phases manually: process/README.md
- I need manual copy/install guidance for another repository, or I want to build the optional tracker: INSTALL_INTO_REPO_PROMPT.md
- I need to bootstrap durable context in an existing repository: bootstrap/README.md
- I want to see a complete worked example first: examples/README.md
LCLP keeps durable context distinct from temporary change work.
Durable layers:
- product specs
- technical specs
- decision logs
Temporary layers:
- change proposals
- plan sets
- checkpoint plans
- execution and review summaries
That split is the point of the process: durable docs stay stable, while day-to-day change work can move quickly without overwriting long-lived context.
There are two different scopes in this project:
- private development repo: this repo, including maintainer-only material such as examples, docs, tests, and any private governance material kept outside the install boundary
- installed target repo: the unrelated user repo that receives copied LCLP material
Only part of this repo should be copied into a target repo.
Exported/installable boundary:
bootstrap/: copied into the target repo as-isprocess/: copied into the target repo as-istemplates/workflow/: copied into the target repo asworkflow/cmd/lclp-track/: optional released source/tooling, built separately only if wanted
Repo-local source material:
docs/: maintainer and design-reference notes; not copied into target reposexamples/: curated reference artifacts; not copied into target reposscripts/: source-repo helpers; not copied into target repostest/: source-repo validation; not copied into target repos
The main runtime artifact families are:
workflow/bootstrap/workflow/specs/product/workflow/specs/technical/workflow/roadmaps/proposals/workflow/roadmaps/plans/workflow/logs/checkpoints/
Boundary:
process/defines how the process works- this repo's
templates/workflow/directory is the starter tree - an installed copy's
workflow/directory stores the artifacts created while running it docs/,examples/,scripts/, andtest/stay in this source repo
If the repository already has enough durable product and technical context, use this order:
- allocate or confirm a slug with
process/roadmaps/proposals/ALLOCATE_PROPOSAL_SLUG_PROMPT.mdif the user has not already supplied one - draft the proposal with
process/roadmaps/proposals/CHANGE_PROPOSAL_CAPTURE_PROMPT.md - split the proposal into a plan set with
process/roadmaps/proposals/PROPOSAL_TO_PLANSET_CAPTURE_PROMPT.md - write the root implementation plan with
process/roadmaps/plans/MULTI_MILESTONE_PLAN_CAPTURE_PROMPT.md - add product and technical plans only when needed with
PRODUCT_PLAN_CAPTURE_PROMPT.mdandTECHNICAL_PLAN_CAPTURE_PROMPT.md - run the coding start gate with
process/roadmaps/plans/CODING_START_READINESS_CHECK_PROMPT.md - create a checkpoint plan with
process/logs/checkpoints/CHECKPOINT_PLAN_CAPTURE_PROMPT.mdunless the parent plan explicitly allows direct execution - execute with
process/logs/checkpoints/EXECUTE_CHECKPOINT_PLAN_PROMPT.md - review and fix forward with
process/logs/checkpoints/REVIEW_AND_FIX_FORWARD_PROMPT.md - close out with
process/logs/checkpoints/PROPOSAL_ROLLUP_PROMPT.md
Example artifact paths for slug P-0001:
- proposal:
workflow/roadmaps/proposals/CHANGE_PROPOSAL_P-0001.md - plan set landing page:
workflow/roadmaps/plans/P-0001/PLANSET_INDEX.md - root plan:
workflow/roadmaps/plans/P-0001/IMPLEMENTATION_PLAN_P-0001.md - optional product plan:
workflow/roadmaps/plans/P-0001/product/PRODUCT_PLAN_P-0001.md - optional technical plan:
workflow/roadmaps/plans/P-0001/technical/TECHNICAL_PLAN_P-0001.md - checkpoint outputs:
workflow/logs/checkpoints/P-0001_M1_CHECKPOINT_PLAN.md,workflow/logs/checkpoints/P-0001_M1_EXECUTION_SUMMARY.md,workflow/logs/checkpoints/P-0001_M1_REVIEW_SUMMARY.md
If you want one AI prompt to route the phase for you, start with process/RUN_LCLP_FOR_CHANGE.md instead of walking the list manually.
Install by manually copying the shipped source material.
Main prompt-pack install:
- Choose a repo-relative base path in the target repo, such as
ai/or.. - Confirm the target repo is not this source repo and is not one of this repo's linked git worktrees.
- Stop if
<base path>/bootstrap/,<base path>/process/, or<base path>/workflow/already exist. - Stop if any existing component of
<base path>is a symlink or a non-directory. - Create
<base path>/if it does not already exist. - Copy
bootstrap/exactly as it exists here. - Copy
process/exactly as it exists here. - Copy
templates/workflow/into the target asworkflow/.
Install contract:
- that three-directory copy is the entire main prompt-pack install
- do not merge into an existing live
workflow/tree - do not copy source-repo-only material such as
docs/,examples/,scripts/,test/, or maintainer-only governance/release notes - after install, every prompt reference remains relative to the chosen base path inside the target repo
Example:
- chosen base path:
ai/ - installed directories:
ai/process/,ai/bootstrap/, andai/workflow/ - a prompt reference like
process/roadmaps/plans/...meansai/process/roadmaps/plans/...inside the target repo
Optional tracker install:
- install the prompt pack first
- build
cmd/lclp-track/separately on Linux only - place the binary at
<base path>/bin/lclp-track - keep
lclp-trackout of normal git status, typically with<base path>/bin/.gitignore - if you want to call the tracker from CI or outside the target repo, set
LCLP_BASE_DIR=<base path>once or pass--base-dir <base path>per command - do not build into this source repo or one of its linked worktrees
- do not overwrite an existing tracker binary in place
If the target repository does not yet have durable product and technical artifacts, continue with bootstrap/README.md after the copy.
If you want AI-assisted install guidance for that same manual-copy flow, use INSTALL_INTO_REPO_PROMPT.md.
The worked example under
examples/README.md includes two curated source-repo
reference sets. Start with the happy-path example for the default clean
completion flow, then use the fix-forward example for a partial milestone and
review-rejected recovery path. These examples remain source-repo reference
material only and are not copied into installed target repositories. Their
artifact paths are intentionally example-local so the sets can be read in
place without pretending to be live installed workflow/ trees.
This repository includes a small Go CLI for append-only audit logging:
- source:
cmd/lclp-track/ - design note: docs/TRACKER_MINIMALISM_CASE_STUDY.md
- output:
workflow/logs/audit/<slug>.audit.log.jsonl - runtime notes: templates/workflow/logs/audit/README.md
- runtime locks:
workflow/logs/audit/.locks/<slug>.lock - platform support: Linux only; non-Linux builds compile, but tracker commands
return an unsupported-platform error because audit locking uses
flock
The tracker source is released separately on purpose. The main prompt-pack
install copies only bootstrap/, process/, and templates/workflow/.
Build it with:
go build -o lclp-track ./cmd/lclp-trackOr build it directly into an already installed prompt-pack repo as
<base path>/bin/lclp-track on Linux, and keep that binary out of normal git
status with <base path>/bin/.gitignore.
If you build the tracker in this source repository, either pass --base-dir
explicitly to point at the target repo root or another live workflow/ tree,
or set LCLP_BASE_DIR once before running commands.
Commands:
addreplacelastget
Allowed phases:
bootstrapproposal_captureplan_splitroot_planproduct_plantechnical_plancoding_start_gatemilestone_detailcheckpoint_planexecutionreview_fix_forwardproposal_rollup
Behavior that matters:
- base-dir resolution order is:
--base-dir, thenLCLP_BASE_DIR, then the current git worktree root when that root already has a realworkflow/directory - use
LCLP_BASE_DIRwhen you want one stable install root across many calls in CI or shell sessions - pass
--base-direxplicitly when a script must be fully self-contained, including--base-dir . - if neither
--base-dirnorLCLP_BASE_DIRis set and the current git worktree root does not have a liveworkflow/directory, the tracker fails addrequires--slug,--phase,--action, and--status- event IDs are opaque ULID strings emitted in command output and stored in the log
replacerequires--slugand--id, and inheritsphase,action,status,prompt, andartifactsfrom the single effective corrective leaf in that lineage when those flags are omitted- if that replacement lineage has multiple live leaves,
replacefails and you must rerun it with the specific leaf event ID you want to supersede replace --clear-promptclears a mistaken prompt instead of inheriting itreplace --clear-artifactsclears mistaken artifacts instead of inheriting themlastprints the most recent event for a sluggetprints a JSON array of effective live events by default and can filter by--id,--phase,--action, or--statusget --allreturns raw append-only history instead of only live leaf events- slug values must match
^[A-Z0-9._-]+$ - stored event
slugvalues must exactly match the requested slug or the log is rejected as inconsistent - logs are append-only;
replacerecords a corrective event instead of rewriting prior lines
Example:
export LCLP_BASE_DIR=/path/to/repo
./lclp-track add \
--slug P-0001 \
--phase proposal_capture \
--action create \
--status partial \
--prompt process/roadmaps/proposals/CHANGE_PROPOSAL_CAPTURE_PROMPT.md \
--artifact workflow/roadmaps/proposals/CHANGE_PROPOSAL_P-0001.md \
--note "initial draft created"
./lclp-track replace \
--slug P-0001 \
--id 01K06W6GG1Z5KJ0QMD4X9N9D4H \
--action create \
--status ready \
--note "corrected operator mistake"
./lclp-track last --slug P-0001
./lclp-track get --slug P-0001 --phase proposal_capture
./lclp-track get --slug P-0001 --status ready
./lclp-track get --slug P-0001 --allTypical stored event:
{
"id": "01K06W6GG1Z5KJ0QMD4X9N9D4H",
"ts": "2026-04-19T01:40:24Z",
"slug": "P-0001",
"phase": "proposal_capture",
"action": "create",
"status": "partial",
"prompt": "process/roadmaps/proposals/CHANGE_PROPOSAL_CAPTURE_PROMPT.md",
"artifacts": [
"workflow/roadmaps/proposals/CHANGE_PROPOSAL_P-0001.md"
],
"note": "initial draft created"
}If you want one default install root outside the current git worktree, set
LCLP_BASE_DIR:
export LCLP_BASE_DIR=/path/to/repo
./lclp-track last --slug P-0001If a particular command needs a different root, use --base-dir:
./lclp-track add \
--base-dir /path/to/repo \
--slug P-0001 \
--phase execution \
--action continue \
--status partial \
--artifact workflow/logs/checkpoints/P-0001_M1_EXECUTION_SUMMARY.md \
--note "checkpoint execution resumed"LCLP is meant for repositories where:
- humans and LLMs collaborate continuously
- context is too large to keep in one chat
- product, technical design, and implementation move at different speeds
- temporary execution artifacts should not replace durable docs
This repository contains LCLP v1.
This repository is licensed under the Creative Commons Attribution 4.0 International License.
Exception:
- the Go tool in
cmd/lclp-track/is licensed under MIT; seecmd/lclp-track/LICENSE
Attribution should credit:
Layered Context Loop Process (LCLP)Copyright (c) 2026 Nos Doughty
See LICENSE for the full license text.
