Skip to content

v2.6.0

Choose a tag to compare

@github-actions github-actions released this 28 Jul 21:52

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_EPOCH env var sourced from git 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_NPMWorkflow
  • TestV260_ReproducibleBuildsSetup_BuildMCPBWorkflow
  • TestV260_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/*.md in npm wrapper
    pre-build step + MCPB bundle manifest.json resources array
  • Docs: docs/agent-bootstrap.md overview + 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