Sprint 2 closed: Local Project Intelligence
Sprint 2 is closed.
The goal was to build the first local prototype that can read a project and produce structured project understanding. The scanner package, CLI commands, and an upgraded handshake now turn repository layout into a ProjectIndex and a CEM snapshot — not just directory names.
What Sprint 2 delivered
Every item on the roadmap is checked off:
- Project indexing model —
ProjectIndexinpackages/scanner - CLI prototype —
meronq scanandmeronq info(apps/cli) - Repository scanning — apps, packages, docs flags, ADRs, blog posts
- Package manager detection — pnpm, npm, yarn
- Structure summary — human-readable one-liner per project
- Local notes — scan output saved to
.meronq/local/project-index.json
Local MCP is now v1.11.0 with a new project_scan tool and project_index in handshake.
New package: @meronq/scanner
The scanner is the bridge between the filesystem and CEM:
| Module | Role |
|---|---|
scanProject() |
Walk repo → ProjectIndex |
indexToCemSnapshot() |
ProjectIndex + git log → CEM entities, relations, evidence |
saveProjectIndex() / loadProjectIndex() |
Persist under .meronq/local/ |
resolveProjectRoot() |
MERONQ_PATH, cwd, or pnpm-workspace.yaml discovery |
Example summary from a real scan:
meronq: pnpm monorepo=true · 4 app(s), 2 package(s) · 8 ADR(s), 3 blog post(s)
Handshake now builds CEM from this index — project entity includes packageManager, monorepo, and scannedAt; ADR entities carry Accepted / Proposed status parsed from markdown.
CLI: scan and info
pnpm --filter meronq-cli build
node apps/cli/dist/index.js scan
node apps/cli/dist/index.js info --json
scan writes .meronq/local/project-index.json. info prints the summary (or full JSON with --json). Both accept --path for scanning other repos.
Handshake before and after
Sprint 1: handshake listed workspace members and stitched a CEM snapshot from ad-hoc file reads.
Sprint 2: handshake calls scanProject() and returns:
project_index— full structured indexcem— built viaindexToCemSnapshot()adrs— with correct status from ADR files
scanProject(root)
└── ProjectIndex
├── apps / packages / docs / adrs
└── indexToCemSnapshot()
├── entities (project, components, adrs, commits)
├── relations (contains)
└── evidence (adr files, commits)
This is still a read-only snapshot from disk — not persistent memory. Sprint 3 adds SQLite.
Bug fix: ADR status on Windows
ADR files use CRLF line endings on Windows. The first status regex failed silently and every ADR showed Unknown. We normalize newlines before parsing and added tests that assert real Accepted/Proposed values from the repo.
Sprint 3 — Memory Engine v0
Sprint 3 goal: persist CEM entities, relations, and evidence locally.
Planned work:
- Choose SQLite schema
- Store entities, relations, evidence
- Store access and reinforcement events
- Generate handshake from memory instead of only live scans
The scanner becomes a writer into memory; handshake becomes a reader from memory with optional refresh.
Follow along
- Roadmap — sprint plan
- ADRs — architecture decisions
- Architecture — system design
- Development blog
- GitHub: Meronq-dev/meronq
Sprint 0 gave us a durable repository. Sprint 1 gave us a shared language. Sprint 2 connects that language to real projects. Sprint 3 makes it stick.