Skip to content

feat: package Recall as a native Codex plugin#245

Merged
edheltzel merged 1 commit into
mainfrom
fm/recall-codex-native-packaging-c4
Jul 22, 2026
Merged

feat: package Recall as a native Codex plugin#245
edheltzel merged 1 commit into
mainfrom
fm/recall-codex-native-packaging-c4

Conversation

@edheltzel

Copy link
Copy Markdown
Owner

Summary

  • separate native-host paths, config schemas, transcript parsing, lifecycle payloads, commands, authentication, and model providers from Recall's host-neutral SQLite/MCP core
  • package Recall with Codex's native .codex-plugin plus repository marketplace, .mcp.json, and nine generated Codex skill adapters
  • extend memory_dump with explicit source/session/messages for portable capture without inventing a Codex transcript path
  • move shared runtime state and OpenCode/Pi drop paths under RECALL_HOME, and teach the lifecycle installer to preserve nested host adapters

Claude-coupling inventory and disposition

The pre-implementation inventory is recorded locally at .agents/atlas/artifacts/2026-07-22-recall-host-coupling-inventory.md.

It identified hidden coupling in MCP log paths, doctor/config repair, migration config shapes, transcript discovery/parsing, Claude project-path decoding, installed hook execution, direct model commands/auth, hook lifecycle payload mapping, and hook path encoding.

The resulting seams are:

  • src/hosts/ for native paths, config owners, diagnostics, and transcript adapters
  • src/providers/ for Claude CLI and Fabric process/auth/model ownership
  • hooks/lib/hosts/ plus ExtractionProvider and host-neutral event contracts for lifecycle code
  • RECALL_HOME for Recall-owned logs, installed helpers, and cross-host drop storage

Remaining Claude references outside those adapters are explicit legacy maintenance/help text or persisted legacy claude-code source defaults retained for compatibility.

Codex package

The native bundle is plugins/recall/, discovered by .agents/plugins/marketplace.json.

Codex loads recall-memory from the plugin's .mcp.json and all nine recall-* skills from its generated skills/ directory.

recall-dump translates Claude's unsupported disable-model-invocation frontmatter into Codex-native agents/openai.yaml policy with allow_implicit_invocation: false; byte identity is not treated as behavioral parity.

MCP reach and lifecycle limit

MCP covers all nine operations: memory_search, memory_hybrid_search, memory_recall, context_for_agent, memory_add, memory_stats, loa_show, memory_dump, and decision_update.

MCP does not provide session-stop, session-start, or pre-compaction lifecycle events.

This package therefore does not claim Codex lifecycle auto-capture, automatic L0/L1 injection, or pre-compaction flushes.

Codex memory_dump uses caller-supplied visible messages.

Isolated validation

No test opened the production database for mutation.

The complete suite ran with a disposable worktree-local RECALL_DB_PATH and RECALL_HOME:

isolation.test_db=.../.isolated-tests.BbBWRa/recall-test.db
isolation.production_before=178044928:1784682256:571168746
isolation.production_after=178044928:1784682256:571168746
isolation.production_db_unchanged=true
1251 pass, 0 fail

The native plugin e2e ran in a disposable CODEX_HOME against another temporary database:

codex.version=codex-cli 0.144.0
codex.plugin_installed=true
codex.plugin_mcp_loaded=true
mcp.tools_verified=9
isolation.production_db_opened=false
isolation.production_db_unchanged=true
e2e.status=PASS

Additional verification:

  • bun run lint
  • bun run build
  • bash -n install.sh update.sh uninstall.sh lib/install-lib.sh
  • current plugin schema validator: PASS
  • bun run build:codex-plugin plus generated-output equality test: PASS

Unresolved by design

  • a supported Codex transcript format or transcript API
  • trust and consent rules for future automatic capture
  • whether installed plugin-cache paths may be relied on by runtime code
  • ownership and repair policy for user-managed Codex MCP config and custom database paths
  • remote marketplace publication, update, and release ownership

These do not block MCP operations, but they block any lifecycle-parity claim.

Tracker check

Open and closed issues were searched before implementation.

No issue currently tracks this Codex-native packaging work; closed #48 and #228 provide adjacent adapter-registry and nine-skill history.

@edheltzel
edheltzel merged commit 84c1a68 into main Jul 22, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Refactor conversation imports behind an internal source-adapter registry

1 participant