Commit Graph
24 Commits
Author SHA1 Message Date
jason.woltje 24496cea01 feat: add mosaic-framework OpenClaw plugin + install-oc-plugins command
- oc-plugins/mosaic-framework/ — plugin that mechanically injects Mosaic
  framework rails into every OpenClaw agent session and ACP worker spawn
  - before_agent_start: appendSystemContext (static rules, cached) +
    prependContext (dynamic mission state per agent project root)
  - subagent_spawning: writes ~/.codex/instructions.md before Codex binary
    starts; no mission context (workers detect own CWD mission)
  - Optional gate: requireMission blocks ACP spawns with no active mission

Install: mosaic install-oc-plugins --project-root ~/src/<repo>
2026-03-09 19:32:01 -05:00
jason.woltjeandClaude Sonnet 4.6 f380d232e6 docs: add MCP registration section with Claude Code config gotchas
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]>
2026-03-02 21:34:37 -06:00
jason.woltjeandClaude Sonnet 4.6 8b441c17b7 fix: MCP servers belong in ~/.claude.json not settings.json
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]>
2026-03-02 21:31:22 -06:00
jason.woltjeandClaude Sonnet 4.6 2a91f6c202 feat: hard-gate agent memory to OpenBrain via PreToolUse hook
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]>
2026-03-02 21:15:28 -06:00
jason.woltjeandClaude Sonnet 4.6 97ee66770a docs: add full CRUD API patterns to OpenBrain section
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]>
2026-03-02 20:53:21 -06:00
jason.woltjeandClaude Sonnet 4.6 30ce4cecc7 feat: add openbrain + turbo-cache credential support and OpenBrain tool docs
- 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]>
2026-03-02 20:10:40 -06:00
jason.woltje 09786ee6e0 fix: use Mosaic credential loader for Gitea API token resolution (#7) 2026-02-24 22:11:44 +00:00
jason.woltje 1fd67b9ec0 docs: update quality rails docs for gitleaks migration (#6) 2026-02-24 21:33:25 +00:00
jason.woltje 38223c8ec2 feat: add gitleaks secret scanning to quality rails (#5) 2026-02-24 20:46:50 +00:00
jason.woltjeandClaude Opus 4.6 b1403703b1 feat: add prdy-status command and PRD status injection into system prompt
- 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]>
2026-02-23 18:33:33 -06:00
jason.woltjeandClaude Opus 4.6 c1f4830bf5 feat: add subagent model selection guidance for cost optimization
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]>
2026-02-23 07:37:44 -06:00
jason.woltjeandClaude Opus 4.6 e5c4bf25b3 feat: add Cloudflare DNS tool suite with multi-instance support
- 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]>
2026-02-22 21:31:52 -06:00
jason.woltjeandClaude Opus 4.6 a9623e9219 fix: add hard gates for manual docker build bypass and intake skipping
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]>
2026-02-22 18:18:36 -06:00
jason.woltjeandClaude Opus 4.6 5d666bdca9 fix: move mission context to top of system prompt + auto-inject initial prompt
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]>
2026-02-22 17:52:44 -06:00
jason.woltjeandClaude Opus 4.6 221afe94d9 feat: inject active mission context into agent system prompt
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]>
2026-02-22 17:44:36 -06:00
jason.woltjeandClaude Opus 4.6 612796d8e0 fix: prevent task count line break in session-start template
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]>
2026-02-22 17:42:41 -06:00
jason.woltjeandClaude Opus 4.6 5ba531e2d0 feat: r0 coordinator tooling for orchestrator protocol
Implements the manual coordinator workflow for multi-session agent
orchestration. Agents stop after one milestone (confirmed limitation);
these tools let the human coordinator check status, generate continuation
prompts, and chain sessions together.

New:
- tools/orchestrator/ — 5 scripts + shared library (_lib.sh)
  - mission-init.sh: initialize mission with milestones and state files
  - mission-status.sh: dashboard showing milestones, tasks, sessions
  - session-status.sh: check if agent is running/stale/dead
  - continue-prompt.sh: generate paste-ready continuation prompt
  - session-resume.sh: crash recovery with dirty state detection
- guides/ORCHESTRATOR-PROTOCOL.md: agent-facing mission lifecycle guide
- templates/docs/: mission manifest, scratchpad, continuation templates
- templates/repo/.mosaic/orchestrator/mission.json: state file template

Modified:
- bin/mosaic: add 'coord' subcommand + resume advisory on launch
- AGENTS.md: conditional loading for protocol guide + rule 37
- bin/mosaic-doctor: checks for new coordinator files
- session hooks: mission detection on start, cleanup on end

Usage: mosaic coord init|mission|status|continue|resume

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-02-22 17:22:50 -06:00
jason.woltje a8e580e1a3 feat: rename rails/ to tools/ and add service tool suites (#4)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-22 17:52:23 +00:00
jason.woltjeandClaude Opus 4.6 248db8935c fix: enforce durable memory in mosaic memory dir, not runtime-native silos
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]>
2026-02-21 15:02:20 -06:00
jason.woltje 1c45894711 fix: redirect stdin from /dev/tty for curl|sh installs (#3)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-21 19:03:07 +00:00
jason.woltje a9ce355c85 fix: enforce headless browser automation + update README for wizard (#2)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-21 18:56:24 +00:00
jason.woltje 6a84f7e210 feat: TypeScript installation wizard with @clack/prompts TUI (#1)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-21 18:25:51 +00:00
jason.woltje 1e4eefeca3 Update scripts to keep SOUL.md idempotent. Add release upgrade framework. 2026-02-20 07:36:54 -06:00
jason.woltje eac247c5cb Add Claude memory section to instruct agents to save to the shared memory instead of the Claude-specific memory. 2026-02-19 20:01:18 -06:00