AI-ready engineering project ledger for long-term memory + evidence chains (Invariants / Decisions / Changes) with traceability and rollback.
Keywords: project ledger, engineering ledger, change log, decision log, invariants, traceability, rollback, evidence chain, agent memory, long-term memory, LLM ops, OpenClaw, Google Drive, Markdown
The ledger is always written to local Markdown files:
<workspace>/ledgers/INVARIANTS.md<workspace>/ledgers/DECISIONS.md<workspace>/ledgers/CHANGES.md<workspace>/ledgers/PROJECTS.md<workspace>/ledgers/PRD_PATCHES.md
backend decides where project docs/assets live:
backend=local: create local project folders + Markdown docsbackend=drive: create Drive project folders + GDoc/GSheet docs (requiresgwsauthenticated)
This skill does not dual-write docs by design (avoids inconsistency). The ledger remains local.
“workspace” means your OpenClaw working directory (not necessarily workspace-nero).
Configure and write L1 ledgers with project-memory-ledger.
Build/query the L2 index with longterm-memory-index.
Example:
python3 longterm-memory-index/scripts/index_build.py \
--workspace <workspace> \
--db <workspace>/data/ledger_index.sqlite
python3 longterm-memory-index/scripts/index_query.py \
--db <workspace>/data/ledger_index.sqlite \
--q "keyword engine" \
--limit 5“workspace” means your OpenClaw working directory (not necessarily workspace-nero).
Recommended path:
<workspace>/config/project_memory_ledger.json
Minimal config (local docs):
{
"language": "en",
"backend": "local",
"default_project": "project-memory-ledger",
"local_dir": "./ledgers",
"projects_root_dir": "./projects",
"projects_root_folder_id": ""
}Drive docs config:
{
"language": "en",
"backend": "drive",
"default_project": "project-memory-ledger",
"local_dir": "./ledgers",
"projects_root_dir": "./projects",
"projects_root_folder_id": "<Drive folder id where projects should be created>"
}Template:
references/default_config.json
python3 skills/project-memory-ledger/scripts/ledger.py init --config <workspace>/config/project_memory_ledger.jsonpython3 skills/project-memory-ledger/scripts/ledger.py append \
--config <workspace>/config/project_memory_ledger.json \
--doc changes \
--project "Keyword Engine" \
--text "- **Interfaces**: hunter-system ↔ keyword-engine\n- **Change**: ...\n- **Why**: ...\n- **Evidence**: ...\n- **Rollback**: ...\n"python3 skills/project-memory-ledger/scripts/ledger.py register-project \
--config <workspace>/config/project_memory_ledger.json \
--name "My New Project" \
--purpose "Why it exists + success criteria" \
--interfaces "hunter-system ↔ keyword-engine" \
--notes "optional"backend=local→ creates<workspace>/projects/My New Project/...and Markdown docsbackend=drive→ creates Drive folders + GDoc/GSheet docs
python3 skills/project-memory-ledger/scripts/ledger.py update-prd \
--config <workspace>/config/project_memory_ledger.json \
--project "Keyword Engine" \
--mode proposeProject values are case-insensitive and normalized to slugs.
Recommended slugs:
hunter-systemkeyword-enginecommon(cross-project rules/methods; not global AGENTS/MEMORY)
shared is disabled. Cross-project coupling must be explicit:
Interfaces: a ↔ b
If you omit --project, the script injects:
Project: project-memory-ledger
Drive mode is optional and pluggable:
- Option 1 (v1 implemented):
gwsCLI (installed + authenticated) - Option 2: Google API / service account
- Option 3: third-party Drive tooling
If Drive isn’t available, use backend=local.
/ service account
- Option 3: third-party Drive tooling
If Drive isn’t available, use backend=local.