Documents the correct MCP registration flow: claude mcp add --scope user
writes to ~/.claude.json (not settings.json, which silently ignores
mcpServers). Covers scope semantics, http vs sse transport requirement
for FastMCP, sequential-thinking hard requirement, and OpenBrain setup.
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
Claude Code reads mcpServers from ~/.claude.json (global state file),
NOT from ~/.claude/settings.json. The settings.json mcpServers key is
silently ignored for MCP loading. Using claude mcp add --scope user
writes to the correct file.
Also document correct registration commands and scope semantics in
RUNTIME.md so agents and users know how to add MCPs that actually load.
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
Agents consistently ignore written instructions about memory routing
and default to writing local MEMORY.md files regardless of rules in
RUNTIME.md, CLAUDE.md, or MEMORY.md itself. Instructions alone are
insufficient — a technical gate is required.
Changes:
- Add tools/qa/prevent-memory-write.sh — PreToolUse hook that blocks
Write/Edit/MultiEdit to ~/.claude/projects/*/memory/*.md (exit 2)
- Register hook in runtime/claude/settings.json PreToolUse array
- Update runtime/claude/RUNTIME.md: replace soft "Memory Override"
note with hard-gate policy, what-goes-where table, and rationale
- Rewrite guides/MEMORY.md: OpenBrain as primary layer, blocked silos
table, project continuity files, how-the-hook-works section
The correct behavior is now the only possible behavior for Claude Code.
All agent learnings route to OpenBrain where every harness can read them.
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
REST endpoints (GET/PATCH/DELETE /v1/thoughts/{id}, bulk DELETE/GET
with filters) and updated MCP tools list to include get, update,
delete, delete_where, list_thoughts — all live in v0.1.0.
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
- credentials.sh: add turbo-cache and openbrain cases (load_credentials openbrain
exports OPENBRAIN_URL + OPENBRAIN_TOKEN from credentials.json .openbrain.*)
- credentials.sh: update --help text and error messages to list new services
- TOOLS.md: mark Coolify as DEPRECATED (superseded by Portainer Docker Swarm)
- TOOLS.md: update Shared Credential Loader service list (turbo-cache, openbrain)
- TOOLS.md: add OpenBrain section — primary shared memory layer, REST API patterns,
Python client usage, MCP note, and mandatory usage table
credentials.sh is always overwritten on reinstall (not in PRESERVE_PATHS), so all
agents that run install.sh will automatically get openbrain credential support.
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
- Add prdy-status.sh for quick one-liner PRD health check (short/json output)
- Inject PRD section count and assumption count into agent system prompt
so the agent knows PRD state at session start without running validate
- Add status subcommand to mosaic prdy routing and help text
Co-Authored-By: Claude Opus 4.6 <[email protected]>
Global AGENTS.md: task-type-to-model-tier mapping table with decision
rule — haiku for search/status, sonnet for standard coding/review,
opus only for complex architecture and security.
Claude RUNTIME.md: Task tool model parameter syntax with examples
and quick reference table.
Co-Authored-By: Claude Opus 4.6 <[email protected]>
- zone-list, record-list, record-create, record-update, record-delete
- Named instance support (-a flag) with configurable default
- Zone name-to-ID auto-resolution in shared _lib.sh
- Updated credentials loader with cloudflare/cloudflare-<name> services
- TOOLS.md and INFRASTRUCTURE.md guide documentation
Co-Authored-By: Claude Opus 4.6 <[email protected]>
Post-mortem from website agent session that manually built/pushed Docker
images instead of using existing Woodpecker CI pipelines. Root cause:
agent skipped E2E intake because the task "felt simple."
AGENTS.md hard gates 10-12:
- Manual docker build/push FORBIDDEN when CI pipelines exist
- MUST check for pipeline config before any build/deploy action
- Load order and intake are NOT conditional on task complexity
E2E-DELIVERY.md:
- Complexity trap warning on intake section
- Mandatory deployment surface check (step 3) with pipeline discovery
- Expanded forbidden anti-patterns with Build/Deploy section
Co-Authored-By: Claude Opus 4.6 <[email protected]>
Mission context was buried at the end of a 21K char system prompt and the
agent ignored it. Two fixes:
1. Mission block now emits FIRST in build_runtime_prompt() so it's the most
prominent instruction the agent sees
2. When an active mission exists and no user prompt is given, auto-inject
an initial user message triggering the agent to read mission state files
Co-Authored-By: Claude Opus 4.6 <[email protected]>
The session-start hook approach didn't work — Claude Code's TUI
overwrites stdout before the agent sees it, and the hook only fires
when the agent calls it as a tool.
Instead, inject mission context directly into the composed system
prompt via build_runtime_prompt(). When mission.json is active in
CWD, the agent gets mission name, ID, milestone progress, and
mandatory first-action instructions in its initial context.
Co-Authored-By: Claude Opus 4.6 <[email protected]>
grep -c returns empty on no match, causing arithmetic to break
across lines. Use ${var:-0} fallback pattern.
Co-Authored-By: Claude Opus 4.6 <[email protected]>
MEMORY.md was conditionally loaded so agents defaulted to their native
memory locations (e.g. ~/.claude/projects/*/memory/). This caused durable
learnings to be siloed per-runtime instead of shared across agents.
- Move MEMORY.md to mandatory load order in AGENTS.md (position 7)
- Add Memory Override section to all three runtime configs (Claude, Codex,
OpenCode) explicitly forbidding native memory silos for durable data
- Add memory/ directory with .gitkeep to bootstrap source
- Add mkdir -p for memory/ in install.sh post-sync step
Co-Authored-By: Claude Opus 4.6 <[email protected]>