cc-sdlc knowledge lives in files that die when the context window clears. This plugin backs cc-sdlc with Neuroloom persistent memory — knowledge stores become searchable, deliverable docs sync across sessions, and version updates arrive at session start. It is a companion to the base Neuroloom Claude Code plugin, not a standalone tool.
- Neuroloom API key — get one at app.neuroloom.dev/settings/api-keys
- neuroloom-claude-plugin — you'll need the Neuroloom Claude Code plugin installed first — this plugin extends it with SDLC-specific memory
- jq — required for JSON parsing in hook scripts (
brew install jqorapt install jq) - curl — required for API calls (present on most systems)
If you have not already installed neuroloom-claude-plugin, do that first. This plugin declares it as a dependency.
/plugin install neuroloom-sdlc@endless-galaxy-studios
/reload-plugins
New project (no existing cc-sdlc):
In Claude Code, run:
/sdlc-initialize
Existing project (cc-sdlc already installed locally):
/sdlc-port
| Skill | When to use |
|---|---|
/sdlc-initialize |
New project — seeds cc-sdlc knowledge from upstream and writes operational files |
/sdlc-migrate |
Workspace already initialized — pulls latest cc-sdlc release and re-seeds changed entries |
/sdlc-port |
Project has local cc-sdlc installed — migrates local knowledge and deliverables to Neuroloom |
At the start of each Claude Code session, session-start.sh runs automatically. It calls the Neuroloom version proxy to check whether a cc-sdlc update is available and compares it to the version seeded in your workspace.
- If the workspace is not initialized: prompts you to run
/sdlc-initialize - If an update is available: prints a one-line notice and the command to update
- On any network error: silent exit — never blocks session startup
After Claude Code writes or edits a file matching docs/current_work/**/*.md, post-tool-use.sh fires. It reads the file, derives deliverable ID and doc type from the filename, and syncs the content to Neuroloom in a background subshell.
The hook uses a fire-and-forget pattern — it never blocks Claude Code's response cycle. If the API call fails, the payload is buffered to .neuroloom-sdlc-sync-buffer.json for retry.
After installation and initialization, verify the setup:
- Start a new Claude Code session — you should see no output from the hooks (or a version notice if an update is available)
- Edit a file under
docs/current_work/— the PostToolUse hook fires in the background - In Claude Code, ask: "Search Neuroloom for recent SDLC deliverables" — the synced docs should appear
To enable debug logging for hook scripts:
export NEUROLOOM_DEBUG=true"workspace not initialized" on every session start
Run /sdlc-initialize or /sdlc-port to create the sentinel memory.
Hook scripts not firing
Verify the scripts are executable: chmod +x hooks/session-start.sh hooks/post-tool-use.sh. Check that hooks are registered in your Claude Code settings.
Sync buffer growing
The file .neuroloom-sdlc-sync-buffer.json accumulates payloads when the API is unreachable. Once the API is reachable again, run /sdlc-port or manually retry the buffered payloads.
jq not found
Install jq: brew install jq (macOS) or apt install jq (Linux). The hooks exit silently without jq rather than failing.
All SDLC data in Neuroloom is organized via tags with the sdlc: prefix. These are the tags the plugin creates and queries:
| Tag | Purpose | Set by |
|---|---|---|
sdlc:sentinel |
Marks the workspace sentinel memory (exactly one per workspace) | /sdlc-initialize, /sdlc-port, /sdlc-migrate |
sdlc:seed |
Marks memories created by the seed algorithm | seed() |
sdlc:seed-version:{version} |
Tracks which cc-sdlc version a memory was seeded from | seed(), sentinel |
sdlc:knowledge-id:{id} |
Stable identifier for upsert deduplication | All ingestion paths |
sdlc:project-specific |
Protects memories from being overwritten or deprecated during re-seed | User (manual tag) |
sdlc:deprecated |
Marks entries removed from upstream cc-sdlc (not deleted, just tagged) | seed() |
sdlc:deliverable:{id} |
Links a memory to a deliverable (e.g., sdlc:deliverable:d17) |
PostToolUse hook |
sdlc:doc:{type} |
Document type: spec, plan, result, chronicle |
PostToolUse hook |
sdlc:pattern:{name} |
YAML pattern type: entries, gotchas, rules, methodology |
YAML parsers |
sdlc:triage:{marker} |
Discipline parking lot triage state | Discipline parser |
sdlc:project-context |
Workspace project profile (tech stack, conventions) | /sdlc-initialize |
The plugin communicates with these Neuroloom API endpoints:
| Method | Endpoint | Used by |
|---|---|---|
POST |
/api/v1/documents/ingest |
PostToolUse hook, /sdlc-port |
POST |
/api/v1/documents/ingest/batch |
/sdlc-initialize, /sdlc-migrate, /sdlc-port |
GET |
/api/v1/sdlc/cc-sdlc-version |
SessionStart hook |
DELETE |
/api/v1/sdlc/cc-sdlc-version/cache |
/sdlc-migrate |
POST |
/api/v1/memories/search |
SessionStart hook (sentinel lookup) |
All endpoints require Authorization: Token <api_key>. Workspace is resolved server-side from the API key.
The slash commands use these MCP tools (available when the base Neuroloom plugin is installed):
| Tool | Used by |
|---|---|
document_ingest |
/sdlc-initialize, /sdlc-port (individual knowledge files) |
document_ingest_batch |
/sdlc-initialize, /sdlc-migrate, /sdlc-port (batch operations) |
sdlc_get_version |
/sdlc-initialize, /sdlc-migrate |
memory_search |
/sdlc-migrate (sentinel lookup), /sdlc-port (transformation matching) |
Knowledge is seeded from Inpacchi/cc-sdlc. The plugin fetches from upstream at init/migrate time — it never vendors or forks the framework.
