GhostPawJS

@ghostpaw/codex

Community GhostPawJS
Updated

Memory for AI agents: beliefs with a source, a certainty and a revision history. SQLite, zero deps, MCP server.

@ghostpaw/codex

npm CI site runtime deps MCP Registry node license

Agent memory as beliefs with a source, a certainty and a revision history.

ghostpaw-codex --help

Local, evidence-backed memory for agents. One SQLite file, zero runtimedependencies.

Codex stores what an agent believes as claims with a source, a certainty,evidence counts, decay and an honest revision history. Agents search beforethey remember, confirm or correct instead of appending, and see which beliefsare stale, fading or weakly evidenced. It runs as a TypeScript library, an MCPserver, a CLI and an Agent Skill, all generated from the same seven tools.

Website: codex.ghostpaw.dev

The release binary includes its runtime. npm and library use require Node.js 24+.

Install

Release binary (default)

Each line downloads the latest release asset, checks it against the release's SHA256SUMS and installs ghostpaw-codex into ~/.local/bin. On Linux and macOS the trailing export puts that folder on PATH for the current shell only: neither the line nor install.sh edits ~/.profile or any other shell startup file. The Windows script adds its folder to the user PATH (open a new terminal afterwards).

linux-x64:

curl -fsSL https://raw.githubusercontent.com/GhostPawJS/codex/main/install.sh | sh -s -- --target linux-x64 && export PATH="$HOME/.local/bin:$PATH"

linux-arm64:

curl -fsSL https://raw.githubusercontent.com/GhostPawJS/codex/main/install.sh | sh -s -- --target linux-arm64 && export PATH="$HOME/.local/bin:$PATH"

darwin-arm64:

curl -fsSL https://raw.githubusercontent.com/GhostPawJS/codex/main/install.sh | sh -s -- --target darwin-arm64 && export PATH="$HOME/.local/bin:$PATH"

darwin-x64:

curl -fsSL https://raw.githubusercontent.com/GhostPawJS/codex/main/install.sh | sh -s -- --target darwin-x64 && export PATH="$HOME/.local/bin:$PATH"

windows-x64 (PowerShell):

irm https://raw.githubusercontent.com/GhostPawJS/codex/main/install.ps1 | iex

To keep ~/.local/bin on PATH in new shells, append it to ~/.profile once (this is the only step that edits a startup file):

echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.profile

To pin a release instead of taking the latest, pass --version:

curl -fsSL https://raw.githubusercontent.com/GhostPawJS/codex/main/install.sh | sh -s -- --target linux-x64 --version 0.6.0 && export PATH="$HOME/.local/bin:$PATH"
$ ghostpaw-codex --version
ghostpaw-codex 0.6.0 (binary, linux-x64)
$ ghostpaw-codex --version --short
0.6.0
$ ghostpaw-codex --version --json
{"name":"ghostpaw-codex","version":"0.6.0","variant":"binary","target":"linux-x64"}

variant is binary, npm or library; target is null outside the release binary.

A session with the 0.5.2 linux-x64 binary against a small database of five beliefs:

ghostpaw-codex 0.5.2: version --json, belief add, a common-word search with its low-signal warning, a distinctive-word search, alias add and the aliased search

The same session as an animated GIF.

Other release installers:

mise use -g github:GhostPawJS/codex
ubi --project GhostPawJS/codex --exe ghostpaw-codex --in ~/.local/bin
eget GhostPawJS/codex

For aqua, define agithub_release package in aqua.yaml:

registries:
  - name: codex
    type: local
    path: codex-registry.yaml
packages:
  - name: GhostPawJS/[email protected]
    registry: codex

codex-registry.yaml:

packages:
  - type: github_release
    repo_owner: GhostPawJS
    repo_name: codex
    asset: ghostpaw-codex-{{trimV .Version}}-{{.OS}}-{{.Arch}}.tar.gz
    format: tar.gz
    replacements: { amd64: x64 }
    overrides:
      - goos: windows
        asset: ghostpaw-codex-{{trimV .Version}}-windows-{{.Arch}}.zip
        format: zip
    files:
      - name: ghostpaw-codex

Install scripts verify SHA256SUMS. To verify a downloaded archive'sbuild attestation:

gh attestation verify <archive> -R GhostPawJS/codex

Set GHOSTPAW_VERIFY=attestation for attestation verification in install.sh.Binaries are unsigned; macOS binaries carry an ad-hoc signature. For a browserdownload on macOS, remove quarantine withxattr -d com.apple.quarantine /path/to/ghostpaw-codex.Linux binaries require glibc 2.28+; use npx on Alpine.See the binary build workflow.

Approximate sizes for 0.5.2 (Node 26.12.1 inside each binary):

Target Archive Binary
linux-x64 41.7 MB tar.gz 117.4 MB
linux-arm64 41.2 MB tar.gz 115.2 MB
darwin-arm64 44.8 MB tar.gz 146.7 MB
darwin-x64 46.4 MB tar.gz 149.5 MB
windows-x64 38.4 MB zip 105.6 MB

The npm package is about 920 KB unpacked and needs Node 24+. Every release isinstalled and run on ubuntu-24.04, macos-15 and windows-2025 by theinstall check.

npx / npm (for npm-based environments)

The npm package requires Node 24+:

npm install -g @ghostpaw/codex
npx -y @ghostpaw/codex --help

Library (for harnesses embedding it in code)

Requires Node 24+:

npm install @ghostpaw/codex
import { initCodexTables, read, write } from '@ghostpaw/codex';

See Library usage.

30-second quickstart

MCP server

Every client below starts the same stdio server: ghostpaw-codex mcp.Use the full executable path if its folder is not on PATH.For npm-based environments, use npx -y @ghostpaw/codex mcp.Beliefs live in ~/.ghostpaw/codex.db unless the GHOSTPAW_CODEX_DBenvironment variable (absolute path) or --db <path> says otherwise.

Claude Code

claude mcp add ghostpaw-codex -- ghostpaw-codex mcp

or as a plugin, which also installs the skill:

/plugin marketplace add GhostPawJS/codex
/plugin install ghostpaw-codex@ghostpaw-codex

Codex CLI (~/.codex/config.toml)

[mcp_servers.ghostpaw-codex]
command = "ghostpaw-codex"
args = ["mcp"]

Cursor (.cursor/mcp.json), Claude Desktop (claude_desktop_config.json)or a project .mcp.json:

{
  "mcpServers": {
    "ghostpaw-codex": {
      "command": "ghostpaw-codex",
      "args": ["mcp"]
    }
  }
}

Cline (MCP Servers โ†’ Configure MCP Servers, cline_mcp_settings.json).VS Code often starts without ~/.local/bin on PATH, so use the absolute paththat echo "$HOME/.local/bin/ghostpaw-codex" prints (PowerShell:"$env:LOCALAPPDATA\Programs\ghostpaw\bin\ghostpaw-codex.exe"). Merge theentry into the existing mcpServers. Settings file locations, thecline mcp add form and checks: llms-install.md.For Cline CLI 3.x, cline config mcp lists the configured servers.

{
  "mcpServers": {
    "ghostpaw-codex": {
      "command": "/absolute/path/to/ghostpaw-codex",
      "args": ["mcp"],
      "env": { "GHOSTPAW_CODEX_DB": "/absolute/path/to/.ghostpaw/codex.db" }
    }
  }
}

Claude Desktop users can also install server.mcpb from thelatest GitHub release.A Dockerfile is included for container hosts:docker build -t ghostpaw-codex . && docker run -i --rm -v codex:/data ghostpaw-codex.

The server speaks MCP 2026-07-28 (stateless, server/discover) and theinitialize-based revisions 2025-11-25, 2025-06-18, 2025-03-26 and 2024-11-05.

CLI

ghostpaw-codex search <query> [--limit N --min-score N --category C --source S]
ghostpaw-codex review <flags|status|log|trends> [--limit N --now N]
ghostpaw-codex belief add <claim> --source S --category C [--certainty N --provenance P]
ghostpaw-codex belief show <beliefId>
ghostpaw-codex belief retire <beliefId>
ghostpaw-codex belief confirm|correct|forget|defer <beliefId> [flags]
ghostpaw-codex belief merge <beliefIds...> [flags]
ghostpaw-codex proximity dismiss <beliefA> <beliefB>
ghostpaw-codex mcp|skill|tools|describe|call|completions|version|help

Global flags can appear anywhere: --db <path>, --json, --quiet,--compact, --help/-h, --version/-V/-v, --no-color.NO_COLOR is accepted; output uses no terminal colors.Noun-verb commands print short text by default, including when stdout is piped.Search and review lists show one belief per line: id claim [certainty source strength].Flags append reason codes; the log shows id type claim. Add, show, correct andmerge show aligned detail fields and nearby beliefs. Status and trends showaligned key: value lines. --json prints the full tool result and --compactremoves JSON indentation. Legacy tool invocation keeps its JSON output.--quiet prints only result ids for search, review flags and log, and the affectedbelief id for writes; status, trends and version print nothing.

Use help belief, belief --help or belief correct --help for schema-derivedhelp. Each revision verb accepts only the flags it uses. Correction takes--claim; forgetting also accepts --successor-id. Deferral accepts--deferred-until as YYYY-MM-DD, DD.MM.YYYY, today, tomorrow, +3d, an ISOdate-time with timezone, or epoch milliseconds. Calendar dates resolve to localend of day and must be in the future.Array flags repeat, kebab-case flags map to schema properties, and values are literal, including leading @. Use JSON stdin (-) for long input. -- ends flags. A positional -, or piped stdinwith no arguments, reads a JSON object; explicit flags override its fields.Database selection uses --db, GHOSTPAW_CODEX_DB, then ~/.ghostpaw/codex.db.Top-level help shows the resolved path. Version output starts withghostpaw-codex and identifies binary target, npm or library execution.

ghostpaw-codex skill prints the full skill reference. Useghostpaw-codex skill --list to list workflow guides andghostpaw-codex skill capture-beliefs-well to read a guide. skill --helpshows these forms; unknown guide names include a suggestion.

Exit Noun-verb result
0 Success, including no_op
1 Tool error
2 Usage or schema error
3 Clarification needed or not found
4 Conflict or version mismatch
70 Internal error

Errors and recovery hints go to stderr. Clarification prints the question and missing flags to stderr. With --json, usage and internal errors also print{ok:false,error:{code,message}} to stdout. Tool results retain their fullshape. Legacy tools [--json], describe <tool>, call <tool> [JSON|-]and <tool_name> --parameter value keep their existing exit codes.completions bash, completions zsh and completions fish print shell scripts.

ghostpaw-codex belief add "Deploys go out on Tuesdays" --source explicit --category procedure
ghostpaw-codex search "when do we deploy" --json | jq '.data.results'
printf '%s' '{"beliefId":1}' | ghostpaw-codex belief show - --json

File values and leading @

File input is opt-in for each CLI argument. When an argument's help lists(@file, @- stdin, @@ literal @), @path reads a UTF-8 file, @- readsstdin, and @@text passes the literal value @text.

No current Codex argument enables this option: flags and positional valueskeep leading @ and @@ as written. For long claims, pass a JSON objectthrough stdin with - (see the example above).

Agent Skill

SKILL.md (repo root) and skills/codex/SKILL.md follow theAgent Skills format and ship in the npm package.Copy skills/codex/ into your agent's skills folder, or print it:

ghostpaw-codex skill > SKILL.md

Library

npm install @ghostpaw/codex
import { DatabaseSync } from 'node:sqlite';
import { initCodexTables, read, write } from '@ghostpaw/codex';

const db = new DatabaseSync('codex.db');
initCodexTables(db);

const { id } = write.remember(db, {
  claim: 'The API uses GraphQL with a REST fallback.',
  source: 'explicit',
  category: 'fact',
});
write.confirmBelief(db, id);
write.correctBelief(db, id, {
  claim: 'The API uses GraphQL exclusively; REST was retired.',
  source: 'observed',
  category: 'fact',
});

read.recall(db, 'graphql api'); // ranked, lineage-aware
read.listFlags(db);             // stale, fading, low-trust, single-evidence

Wire the same tools into any LLM SDK. Each tool carries a JSON Schema:

import { tools } from '@ghostpaw/codex';

for (const tool of tools.codexTools) {
  // tool.name, tool.description, tool.inputSchema, tool.handler(db, input)
}

Or embed the MCP server in your own process:

import { createCodexMcpServer } from '@ghostpaw/codex/mcp';
const server = createCodexMcpServer({ dbPath: './codex.db' });

Docs

The live demo runs the library in your browser against an in-memory SQLite database. Each view below opens a different part of it:

  • Dashboard: integrity score and recent beliefs
  • Capture: record a belief and see close matches you already hold
  • Flags: beliefs flagged for review: confirm, correct or forget
  • Activity Log: activity log of every write

Why not MEMORY.md?

A markdown memory file works until it doesn't:

  • It only grows. Agents append, rarely delete, and the file ends up inevery prompt. Codex returns the few beliefs that match a query(FTS5 bm25 plus hashed character-trigram similarity, IDF-weighted with a 55% relative cutoff).
  • Contradictions pile up. "We use REST" and "REST was retired" sit side byside. Codex detects near-duplicates on every write, and correctionssupersede the old belief while keeping the lineage.
  • Everything looks equally true. A guess and a confirmed fact read thesame in prose. Codex tracks source (explicit, observed, distilled,inferred), certainty and evidence count, and flags what is stale or weaklysupported.
  • No time. Codex decays freshness, so old beliefs surface for reviewinstead of quietly steering behaviour.
  • Concurrent edits. Two agents writing one file clobber each other. Codexis a SQLite database in WAL mode.

It stays local: one file you can copy, back up or inspect with any SQLite tool.No server, no API key, no network.

Tools

Tool What it does
search_codex Lexical recall with FTS5 bm25 and character-trigram similarity
review_codex Dashboards: flags, status, trends, log
inspect_codex_item One belief in full: metrics, lineage, nearby beliefs
remember_belief Capture a claim with source, category and provenance
revise_belief Confirm, correct, forget, defer or merge
retire_belief Hard-delete for privacy or cleanup
dismiss_proximity Mark two nearby beliefs as intentionally distinct

Results are structured (outcome: success | no_op | needs_clarification | error) with entities, next-step hints and recovery advice. The MCP server,CLI, SKILL.md and plugin manifests are generated from this registry(npm run surfaces) and drift-checked in CI.

Performance

Measured with npm run bench on Node 24.14.0, Linux, Intel Xeon (sharedcloud vCPU), 10,000 beliefs in a file-backed database:

Operation p50 p95
search_codex (tool) 3.6 ms 5.0 ms
MCP tools/call search, stdio framing included 3.8 ms 4.2 ms
read.recall 3.7 ms 4.8 ms
inspect_codex_item 3.5 ms 3.8 ms
write.remember (includes proximity scan) 4.5 ms 5.6 ms
review_codex 11.7 ms 13.2 ms

Cold start (process spawn to first response, median): --version 26 ms,MCP server/discover 24 ms, first search against the 10,000-belief file53 ms. Seeding 10,000 beliefs takes 2.2 s on disk.

Gzip sizes and cold-start medians are budgeted in budgets.json and enforcedby npm run check.

The model

Concept Purpose
Belief A claim held with certainty, evidence, provenance, decay and revision lineage
Dismissal A record that two beliefs close by character-trigram vectors are intentionally distinct
Flag A derived attention signal: stale, fading, low-trust, single-evidence or gap
Proximity Lexical nearness between beliefs (character-trigram vectors), detected on write
Lineage The revision chain from corrections and supersessions, with version diffs

State is derived, never toggled: freshness, strength, review priority and flagsare computed at read time.

Package surface

Import Contents
@ghostpaw/codex initCodexTables, read, write, tools, skills, soul, all types
@ghostpaw/codex/mcp createCodexMcpServer, serveCodexMcp, generic MCP server helpers
ghostpaw-codex (bin) Noun-verb CLI, legacy tool forms, mcp, skill, shell completions
dist/mcp-server.js Standalone stdio MCP server entry (used by the MCP Bundle and the Dockerfile)
SKILL.md, skills/codex/ Agent Skill with 17 workflow references

ESM and CommonJS, with type declarations for both.

Documentation

Document Audience
HUMAN.md Developers using the read / write API
LLM.md Agent builders wiring soul, tools and skills
docs/README.md Architecture: model, invariants, scoring, source layout
docs/entities/ Per-entity manuals with exact public API listings
CHANGELOG.md Release history

Development

npm install
npm run check   # types, lint, zero-deps, tests, build, surfaces, size, API, consumer, startup, ratchet
npm run bench   # hot-path benchmarks at 10,000 beliefs
npm run surfaces  # regenerate SKILL.md, plugin manifests, server.json, mcpb manifest

npm run check is the single gate, locally and in CI. Size budgets(budgets.json) and the public API snapshot (api-surface.json) can onlygrow with an explicit approval tag in the commit message. The repo is pinnedto Node 24.14.0 via .nvmrc.

Support

If this package helps your project, consider sponsoring its maintenance:

GitHub Sponsors

Anonyfox โ€ข MIT License

Query aliases

Search is lexical: FTS5 bm25 plus hashed character-trigram similarity, withIDF-like token weighting and a 55% relative cutoff. It does not provide semanticunderstanding. In corpora of at least 20 active beliefs, queries matching only common terms return at most three resultswith a partial_match warning.

Aliases are off by default (the table starts empty). Add directed, one-hop aliaseswhen query vocabulary differs from stored claims:

ghostpaw-codex alias add class warrior
ghostpaw-codex alias list
ghostpaw-codex alias remove class warrior

The library equivalents are write.addQueryAlias(db, term, alias, options?),write.removeQueryAlias(db, term, alias) (returns whether removed), andread.listQueryAliases(db) (sorted { term, alias, createdAt } records).Both words are normalized with normalizeClaim and must be distinct single words.Adding an existing pair preserves its creation time; options.now sets the timeon first insertion. Expansion is deduplicated and never follows alias chains;the query vector uses the original query.

Provenance and revision compatibility

Belief records include provenanceSources, an append-only list of distinct originreferences. Every write with --provenance adds a reference, including duplicateadds and unchanged corrections. Corrections and merges carry all sources forward.The legacy provenance field remains readable with its existing single-valuebehavior; use provenanceSources for the complete history.

Superseded-belief errors and belief show identify the current active successor.Library details also expose activeSuccessorId, while supersededBy retains theimmediate lineage link. Correcting to the same normalized claim and metadatareturns no_op. A merge into --successor-id can omit --claim.

belief --help lists belief verbs. review flags --now +8d andreview flags --now 2026-11-10 accept the same date formats as deferral, includinghistorical dates and epoch milliseconds. Relative day offsets also accept -3dand 30d. Calendar dates and relative days use local end of day.

New CLI and MCP database files use mode 0600; newly created parent directoriesuse 0700. Existing permissions are preserved. On first upgrade, legacy activenormalized duplicates consolidate into the oldest id, preserving summed evidence,source references and lineage. Later --allow-duplicate additions remain separate.Merge fan-in alone does not trigger unstable; repeated corrections still do.

MCP Server ยท Populars

MCP Server ยท New