v2.6.0
v2.6.0 — dark-agent self-bootstrapping + reproducible-builds fix
🌟 Headline: dark-agent self-bootstrapping
Any MCP harness (Claude Desktop, Claude Code, opencode, Cline, Cursor, Continue)
can now discover how to operate dark-memory-mcp without external docs.
The server publishes a canonical operating manual + a per-harness
compatibility matrix + 6 install guides + 2 companion docs via MCP resources
(URI scheme dark-memory://docs/*). Three new tools make that content
discoverable programmatically.
5 layers (all non-invasive)
| # | Layer | Path |
|---|---|---|
| L1 | System-prompt resource | dark-memory://docs/system-prompt.md (8.9 KB) |
| L2 | Compatibility matrix | dark-memory://docs/compatibility-matrix.md (3.8 KB) |
| L3 | Install URI templates | dark-memory://docs/install/{client}.md × 6 |
| L4 | instructions field |
cross-feature hints appended to the initialize response |
| L5 | Companion URI templates | dark-memory://docs/companions/{name}.md × 2 |
3 new self-bootstrap tools (AGENT_BOOTSTRAP namespace)
| Tool | Purpose |
|---|---|
dark_memory_agent_bootstrap |
Read any resource by surface/target (system_prompt, compatibility_matrix, install_guide, companion, all) |
dark_memory_agent_recommend_companions |
Harness-aware companion advice (dark-research, dark-copilot) |
dark_memory_agent_detect_environment |
Harness runtime introspection (clientInfo + negotiated capabilities) |
Dual-spec clientInfo capture
Both legacy 2025-06-18 (initialize.clientInfo) and new 2026-07-28
(_meta.clientInfo per-request) feeds converge into a single
ClientInfoRecord store; the bootstrap tools read from there.
Operator override
DARK_AGENT_BOOTSTRAP_DIR env var points to a custom directory with
the 10 expected files. Validated at load time; invalid → fallback to
embedded + warning.
Why this matters
opencode (issue #32856) discards the instructions field. Claude
Desktop/Code honor it but only for the initial session. Resources
are the canonical cross-harness path because every spec-compliant
harness MUST support resources/list + resources/read.
Wire contract
100% additive. Schema v20 unchanged. Canonical tool count grows
35 → 38 (AGENT_BOOTSTRAP between RESEARCH and VIBE per RFC D-9).
10 new resources. No existing tool renames, no position shifts.
🔧 Reproducible-builds drift fix
publish-npm.yml and build-mcpb.yml now produce byte-identical
binaries across all 6 platforms. Verified by:
- Go patch pin:
go-version: "1.25.12"(was"1.25") SOURCE_DATE_EPOCHenv var sourced fromgit log -1 --format=%ct
(commit timestamp; deterministic per tag)
Local + CI verification:
| Binary | SHA256 |
|---|---|
GitHub Release dark-mem-mcp-amd64.exe-win32 |
EB38AAD411D3F866... |
npm package dark-mem-mcp-win32-x64/bin/dark-mem-mcp.exe |
EB38AAD411D3F866... |
✅ MATCH (drift eliminated).
3 new structural tests in tests/distribution/mcpb_v2_6_0_test.go:
TestV260_ReproducibleBuildsSetup_NPMWorkflowTestV260_ReproducibleBuildsSetup_BuildMCPBWorkflowTestV260_ReproducibleBuildsSetup_GoVersionsMatch(catches accidental version skew)
📦 Distribution
All channels live for v2.6.0:
- npm: 6 platform packages + wrapper (verified published)
- Official MCP Registry:
io.github.Opita-Code/dark-memory-mcp@2.6.0
(published after retry — see known issue below) - GitHub Releases: 9 assets (3 .mcpb bundles + 6 raw binaries)
⚠️ Known issue (post-tag fix)
publish-mcp-registry.yml failed on the initial tag push with
NPM package '@opitacode/dark-memory-mcp' exists, but version '2.6.0' was not found — a race condition: the registry workflow ran before
npm propagation completed. Fixed via manual workflow_dispatch -f version=2.6.0 retry (14s, success).
Follow-up for v2.6.1: add needs: [publish-npm-platform] or a
small wait + retry loop in publish-mcp-registry.yml.
🚀 Quick install
# Claude Desktop / Cursor / Cline / Continue
# Add to your MCP config:
{
"mcpServers": {
"dark-memory": {
"command": "npx",
"args": ["-y", "@opitacode/dark-memory-mcp@2.6.0"]
}
}
}
# Claude Code
claude mcp add dark-memory -- npx -y @opitacode/dark-memory-mcp@2.6.0
# opencode (in opencode.json)
{
"mcp": {
"dark-memory": {
"type": "local",
"command": ["npx", "-y", "@opitacode/dark-memory-mcp@2.6.0"]
}
}
}Then on first connect, the LLM will see the 3 self-bootstrap tools
in its tool list. Recommend it call dark_memory_agent_bootstrap
with surface="all" to load the full operating manual.
📝 Commits since v2.5.2
5e410f6 ci: re-trigger CI to verify v2.6.0 drift fix
a720c3d chore(release): bump versions 2.5.2 -> 2.6.0
e9cd31a fix(ci): v2.6.0 reproducible-builds drift (Go pin + SOURCE_DATE_EPOCH)
be3ecb6 v2.6.0: dark-agent self-bootstrapping via embedded resources + 3 tools
🔮 Follow-ups (NOT in v2.6.0; deferred to v2.6.1)
- Distribution: include
agent-bootstrap/*.mdin npm wrapper
pre-build step + MCPB bundlemanifest.jsonresourcesarray - Docs:
docs/agent-bootstrap.mdoverview + decision tree - README: "Self-Bootstrapping" section
- Publish-mcp-registry race condition fix (retry loop)
migrate.CurrentSchemaVersion()exported constant
Full Changelog: v2.5.2...v2.6.0