{"id":50755273,"url":"https://github.com/escoffier-labs/miseledger","last_synced_at":"2026-06-11T04:02:46.224Z","repository":{"id":362338334,"uuid":"1258543410","full_name":"escoffier-labs/miseledger","owner":"escoffier-labs","description":"MiseLedger is a local-first evidence ledger for AI work history: SQLite FTS search, Markdown export, StationTrail and SourceHarvest imports, and Brigade-ready evidence bundles.","archived":false,"fork":false,"pushed_at":"2026-06-06T03:16:05.000Z","size":289,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-06-06T04:10:06.708Z","etag":null,"topics":["ai-agents","brigade","cli","evidence","fts5","go","local-first","miseledger","sqlite"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/escoffier-labs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"docs/ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-03T17:20:14.000Z","updated_at":"2026-06-06T03:17:03.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/escoffier-labs/miseledger","commit_stats":null,"previous_names":["solomonneas/logspine","escoffier-labs/logspine"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/escoffier-labs/miseledger","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/escoffier-labs%2Fmiseledger","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/escoffier-labs%2Fmiseledger/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/escoffier-labs%2Fmiseledger/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/escoffier-labs%2Fmiseledger/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/escoffier-labs","download_url":"https://codeload.github.com/escoffier-labs/miseledger/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/escoffier-labs%2Fmiseledger/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34181555,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-11T02:00:06.485Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-agents","brigade","cli","evidence","fts5","go","local-first","miseledger","sqlite"],"created_at":"2026-06-11T04:02:45.548Z","updated_at":"2026-06-11T04:02:46.219Z","avatar_url":"https://github.com/escoffier-labs.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MiseLedger\n\n\u003cp\u003e\n  \u003ca href=\"https://github.com/escoffier-labs/miseledger/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://img.shields.io/github/actions/workflow/status/escoffier-labs/miseledger/ci.yml?branch=master\u0026style=for-the-badge\u0026label=ci\" alt=\"CI status\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/escoffier-labs/miseledger/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/escoffier-labs/miseledger?style=for-the-badge\u0026label=release\" alt=\"Latest release\"\u003e\u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/go-1.22%2B-00ADD8?style=for-the-badge\u0026logo=go\u0026logoColor=white\" alt=\"Go 1.22+\"\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MIT-green?style=for-the-badge\" alt=\"MIT license\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\nMiseLedger turns scattered AI work history into a local searchable evidence graph.\n\nThe MVP is a local-first CLI named `miseledger`. It imports `miseledger.adapter.v1` JSONL records into SQLite, preserves raw payload references, searches with SQLite FTS5, shows normalized items, exports Markdown, emits Brigade-ready evidence bundles, and allows read-only SQL inspection.\n\nEach source system is best at its native domain:\n\n- [StationTrail](https://github.com/escoffier-labs/stationtrail): Codex, Claude, OpenClaw, OpenCode, Hermes, and related local session logs\n- [SourceHarvest](https://github.com/escoffier-labs/sourceharvest): local files, notes, generic exports, git history, and future crawler adapter exports\n- `discrawl`: Discord messages\n- `gitcrawl`: GitHub issues and pull requests\n- `graincrawl`: Granola notes and transcripts\n- `notcrawl`: Notion pages and databases\n- `slacrawl`: Slack messages and threads\n- `telecrawl`: Telegram Desktop archive data\n\nMiseLedger is the normalized evidence layer above those systems, not a replacement for them.\n\n## How It Works\n\n```mermaid\nflowchart TB\n    ADAPTER[\"\u003cb\u003eAdapter JSONL\u003c/b\u003e\u003cbr/\u003efile, stdin, wrappers\"]\n\n    subgraph SOURCES [\" source exporters \"]\n        STATIONTRAIL[\"\u003cb\u003eStationTrail\u003c/b\u003e\u003cbr/\u003eagent-session logs\"]\n        SOURCEHARVEST[\"\u003cb\u003eSourceHarvest\u003c/b\u003e\u003cbr/\u003efiles, notes, exports, git\"]\n        NATIVE[\"\u003cb\u003eNative adapters\u003c/b\u003e\u003cbr/\u003eCodex, OpenClaw, Claude, Hermes\"]\n    end\n\n    STATIONTRAIL \u0026 SOURCEHARVEST \u0026 NATIVE --\u003e ADAPTER\n\n    subgraph INGEST [\" ingest path \"]\n        PARSE[\"\u003cb\u003eParse and validate\u003c/b\u003e\u003cbr/\u003emiseledger.adapter.v1\"]\n        NORMALIZE[\"\u003cb\u003eNormalize records\u003c/b\u003e\u003cbr/\u003esources, collections, items, actors\"]\n        DEDUPE[\"\u003cb\u003eDeduplicate\u003c/b\u003e\u003cbr/\u003estable external IDs and raw refs\"]\n        INDEX[\"\u003cb\u003eIndex evidence\u003c/b\u003e\u003cbr/\u003eFTS5, relations, scan manifests\"]\n    end\n\n    ADAPTER --\u003e PARSE --\u003e NORMALIZE --\u003e DEDUPE --\u003e INDEX\n\n    ARCHIVE[\"\u003cb\u003eSQLite archive\u003c/b\u003e\u003cbr/\u003elocal evidence graph\"]\n    INDEX ==\u003e ARCHIVE\n\n    subgraph SURFACES [\" reader surfaces \"]\n        SEARCH[\"\u003cb\u003eSearch and show\u003c/b\u003e\u003cbr/\u003equery, explain, SQL\"]\n        EXPORT[\"\u003cb\u003eExports\u003c/b\u003e\u003cbr/\u003eMarkdown, evidence bundles\"]\n        API[\"\u003cb\u003eLocal APIs\u003c/b\u003e\u003cbr/\u003eHTTP loopback, stdio MCP\"]\n        MAINTAIN[\"\u003cb\u003eArchive care\u003c/b\u003e\u003cbr/\u003edoctor, stats, compact, prune metadata\"]\n    end\n\n    ARCHIVE --\u003e SEARCH\n    ARCHIVE --\u003e EXPORT\n    ARCHIVE --\u003e API\n    ARCHIVE --\u003e MAINTAIN\n\n    GUARD[\"\u003cb\u003eEvidence boundary\u003c/b\u003e\u003cbr/\u003eimported text stays data, not instructions\"]\n    PARSE -. rejects malformed records .-\u003e GUARD\n    EXPORT -. marks untrusted context .-\u003e GUARD\n\n    classDef source fill:#eff6ff,stroke:#2563eb,color:#1e3a8a;\n    classDef process fill:#ecfdf5,stroke:#059669,color:#064e3b;\n    classDef archive fill:#2563eb,stroke:#1d4ed8,color:#fff;\n    classDef surface fill:#f1f5f9,stroke:#94a3b8,color:#334155;\n    classDef guard fill:#fff7ed,stroke:#ea580c,color:#7c2d12;\n    class STATIONTRAIL,SOURCEHARVEST,NATIVE,ADAPTER source;\n    class PARSE,NORMALIZE,DEDUPE,INDEX process;\n    class ARCHIVE archive;\n    class SEARCH,EXPORT,API,MAINTAIN surface;\n    class GUARD guard;\n```\n\nMiseLedger follows one ingest path:\n\n1. Receive `miseledger.adapter.v1` JSONL from a file, stdin, StationTrail, SourceHarvest, or a native compatibility adapter.\n2. Parse and validate each adapter record.\n3. Store normalized sources, collections, items, actors, artifacts, raw refs, tags, imports, warnings, and scan manifests in SQLite.\n4. Deduplicate repeat records and preserve raw payload references for audit.\n5. Maintain FTS5 search indexes and shallow relations.\n6. Serve search, show, explain, export, HTTP, MCP, and evidence-bundle workflows from the local archive.\n\n## Stack Map\n\n```mermaid\nflowchart TB\n    MISELEDGER[\"\u003cb\u003eMiseLedger\u003c/b\u003e\u003cbr/\u003e\u003ci\u003earchive, search, evidence layer\u003c/i\u003e\"]\n    SQLITE[\"\u003cb\u003eSQLite archive\u003c/b\u003e\u003cbr/\u003enormalized records, FTS, relations, raw refs\"]\n    MISELEDGER --\u003e|owns| SQLITE\n\n    subgraph AGENTS [\" agent-session scanners \"]\n        STATIONTRAIL[\"\u003cb\u003eStationTrail\u003c/b\u003e\u003cbr/\u003eCodex, Claude, OpenClaw, OpenCode, Hermes\"]\n        COMPAT[\"\u003cb\u003eCompatibility adapters\u003c/b\u003e\u003cbr/\u003enative MiseLedger imports\"]\n    end\n\n    subgraph LOCAL [\" local source exporters \"]\n        SOURCEHARVEST[\"\u003cb\u003eSourceHarvest\u003c/b\u003e\u003cbr/\u003eMarkdown, files, HTML, JSON, git history\"]\n        GENERIC[\"\u003cb\u003eGeneric adapter records\u003c/b\u003e\u003cbr/\u003enormalized source exports\"]\n    end\n\n    subgraph CRAWLERS [\" crawler tools \"]\n        DISCRAWL[\"discrawl\"]\n        GITCRAWL[\"gitcrawl\"]\n        GRAINCRAWL[\"graincrawl\"]\n        NOTCRAWL[\"notcrawl\"]\n        SLACRAWL[\"slacrawl\"]\n        TELECRAWL[\"telecrawl\"]\n    end\n\n    STATIONTRAIL \u0026 COMPAT == adapter JSONL ==\u003e MISELEDGER\n    SOURCEHARVEST \u0026 GENERIC == adapter JSONL ==\u003e MISELEDGER\n    DISCRAWL \u0026 GITCRAWL \u0026 GRAINCRAWL \u0026 NOTCRAWL \u0026 SLACRAWL \u0026 TELECRAWL -. exports or snapshots .-\u003e SOURCEHARVEST\n\n    subgraph READERS [\" reader workflows \"]\n        CLI[\"\u003cb\u003emiseledger CLI\u003c/b\u003e\u003cbr/\u003esearch, show, explain, export\"]\n        EVIDENCE[\"\u003cb\u003eEvidence bundles\u003c/b\u003e\u003cbr/\u003eBrigade-ready context\"]\n        MCP[\"\u003cb\u003eAgent readers\u003c/b\u003e\u003cbr/\u003eHTTP loopback, stdio MCP\"]\n        OPS[\"\u003cb\u003eArchive operations\u003c/b\u003e\u003cbr/\u003edoctor, stats, compact\"]\n    end\n\n    SQLITE --\u003e CLI\n    SQLITE --\u003e EVIDENCE\n    SQLITE --\u003e MCP\n    SQLITE --\u003e OPS\n\n    classDef core fill:#2563eb,stroke:#1d4ed8,color:#fff;\n    classDef archive fill:#fff7ed,stroke:#ea580c,color:#7c2d12;\n    classDef source fill:#eff6ff,stroke:#2563eb,color:#1e3a8a;\n    classDef crawler fill:#ecfdf5,stroke:#059669,color:#064e3b;\n    classDef reader fill:#f1f5f9,stroke:#94a3b8,color:#334155;\n    class MISELEDGER core;\n    class SQLITE archive;\n    class STATIONTRAIL,COMPAT,SOURCEHARVEST,GENERIC source;\n    class DISCRAWL,GITCRAWL,GRAINCRAWL,NOTCRAWL,SLACRAWL,TELECRAWL crawler;\n    class CLI,EVIDENCE,MCP,OPS reader;\n```\n\nStationTrail owns local agent-session scanning. SourceHarvest owns non-agent local source export normalization. MiseLedger owns archive ingest, SQLite, FTS, relations, scan manifests, reader APIs, and evidence bundles.\n\nCrawler tools keep their native sync/query behavior. Their local exports, snapshots, or databases should flow through SourceHarvest before entering MiseLedger.\n\n## Build\n\n```bash\ngo build -o bin/miseledger ./cmd/miseledger\n```\n\nYou can also run commands with:\n\n```bash\ngo run ./cmd/miseledger --help\n```\n\nInstall from a release:\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/escoffier-labs/miseledger/HEAD/install.sh | sh\n```\n\nFor a first archive and agent integration path, see [docs/QUICKSTART.md](docs/QUICKSTART.md). For MCP client configuration, see [docs/MCP.md](docs/MCP.md). For roadmap and cookbook material, see [docs/ROADMAP.md](docs/ROADMAP.md), [docs/EXAMPLES.md](docs/EXAMPLES.md), [docs/QUERY_COOKBOOK.md](docs/QUERY_COOKBOOK.md), [docs/STATIONTRAIL_PARITY.md](docs/STATIONTRAIL_PARITY.md), [docs/LIVE_DRY_RUN_CHECKLIST.md](docs/LIVE_DRY_RUN_CHECKLIST.md), and [docs/INSTALL_SMOKE.md](docs/INSTALL_SMOKE.md).\n\n## Runtime Paths\n\nMiseLedger uses XDG paths when present:\n\n- config: `~/.config/miseledger/config.toml`\n- data: `~/.local/share/miseledger/miseledger.db`\n- cache: `~/.cache/miseledger/`\n\nDirectories and files created by the CLI use private permissions.\n\n## Smoke Test\n\n```bash\nmiseledger init\nmiseledger import adapter testdata/adapters/discrawl.fixture.jsonl --source discrawl\nmiseledger import adapter testdata/adapters/agent-session.fixture.jsonl --source codex\nmiseledger adapter codex testdata/harnesses/codex-session.fixture.jsonl --out -\nmiseledger adapter hermes testdata/harnesses/session_hermes-demo.fixture.json --out -\nmiseledger import codex testdata/harnesses/codex-session.fixture.jsonl --json\nmiseledger import openclaw testdata/harnesses/openclaw-session.fixture.jsonl --json\nmiseledger import claude testdata/harnesses/claude-project.fixture.jsonl --json\nmiseledger import hermes testdata/harnesses/session_hermes-demo.fixture.json --json\nmiseledger status --json\nmiseledger scans list --json\nmiseledger sources discover --json\nmiseledger search \"adapter contract\" --json\nmiseledger evidence \"adapter contract\" --json\nmiseledger evidence show \u003cbundle-id\u003e --json\nmiseledger explain \"adapter contract\" --json\nmiseledger show \u003creturned-item-id\u003e --json\nmiseledger export markdown --out /tmp/miseledger-md\nmiseledger relations backfill --json\nmiseledger stats --json\nmiseledger compact --json\nmiseledger prune imports --before 2026-01-01 --dry-run --json\nmiseledger sql \"select count(*) as items from items\" --json\nmiseledger doctor --json\nmiseledger doctor --mcp --json\nmiseledger doctor --archive --json\n```\n\nRe-running the same imports is idempotent and does not increase item counts.\n\n## Native Session Adapters\n\nNative adapter generators convert local session JSON and JSONL into `miseledger.adapter.v1` records:\n\n```bash\nmiseledger adapter codex ~/.codex/sessions --out codex.adapter.jsonl --limit 100\nmiseledger adapter openclaw ~/.openclaw/agents --out openclaw.adapter.jsonl --since 2026-06-01\nmiseledger adapter claude ~/.claude/projects --out claude.adapter.jsonl --limit 100\nmiseledger adapter hermes ~/.hermes/sessions --out hermes.adapter.jsonl --limit 100\n```\n\nNative import commands stream generated adapter records into the same adapter ingest path:\n\n```bash\nmiseledger import codex ~/.codex/sessions --json\nmiseledger import openclaw ~/.openclaw/agents --json\nmiseledger import claude ~/.claude/projects --json\nmiseledger import hermes ~/.hermes/sessions --json\nmiseledger import codex testdata/harnesses/malformed-unknown.fixture.jsonl --dry-run --json\nmiseledger import discovered --json\nmiseledger watch once --json\nmiseledger watch once --if-changed --json\n```\n\nThe scanners accept a file or directory, walk relevant JSON and JSONL files recursively, skip obvious backups and sidecars, preserve raw refs, and warn rather than crash on malformed or unknown events. Hermes native support covers `session_*.json` snapshots and trajectory JSONL under `~/.hermes/sessions`; Hermes `state.db` is not parsed directly.\n\n## External StationTrail Scanner\n\nStationTrail is the separate local agent-session scanner/exporter. It keeps source-specific harness parsing outside MiseLedger and emits the same `miseledger.adapter.v1` JSONL contract:\n\n```bash\nstationtrail discover --json\nstationtrail doctor --json\nstationtrail doctor --live --json\nstationtrail codex ~/.codex/sessions --dry-run --json\nstationtrail all --out - --redact paths,secrets | miseledger import adapter -\nstationtrail claude ~/.claude/projects --out - | miseledger import adapter -\nstationtrail openclaw ~/.openclaw/agents --out openclaw.adapter.jsonl\nstationtrail hermes ~/.hermes/sessions --out - | miseledger import adapter -\nmiseledger import adapter openclaw.adapter.jsonl --json\n```\n\nWhen `stationtrail` is installed on `PATH`, MiseLedger can run it directly:\n\n```bash\nmiseledger import stationtrail codex ~/.codex/sessions --json\nmiseledger import stationtrail claude ~/.claude/projects --json\nmiseledger import stationtrail openclaw ~/.openclaw/agents --json\nmiseledger import stationtrail opencode opencode-session.json --json\nmiseledger import stationtrail hermes ~/.hermes/sessions --json\n```\n\nThe wrapper streams StationTrail output through adapter ingest and records StationTrail scan manifests from its summary output. For mixed-source imports, use `stationtrail all --out - | miseledger import adapter -`; each adapter record still carries its own `source.kind`.\n\nMiseLedger native adapters remain available for compatibility. Long term, source-specific agent-session parser ownership should live in StationTrail while MiseLedger owns archive ingest, SQLite, FTS, relations, scan manifests, and evidence bundles.\n\n## External SourceHarvest Scanner\n\nSourceHarvest is the separate local source-system exporter for non-harness records such as notes, generic JSONL exports, local crawler outputs, and future domain harvesters:\n\n```bash\nsourceharvest jsonl export.jsonl --source notes --collection notes:local --out - | miseledger import adapter -\nsourceharvest markdown ./notes --source notes --collection notes:local --out - | miseledger import adapter -\n```\n\nWhen `sourceharvest` is installed on `PATH`, MiseLedger can run it directly:\n\n```bash\nmiseledger import sourceharvest markdown ./notes --source notes --collection notes:local --json\nmiseledger import sourceharvest files ./notes --source notes --collection notes:files --glob \"*.md,*.txt\" --json\nmiseledger import sourceharvest html ./site-export --source docs --collection docs:html --json\nmiseledger import sourceharvest gitlog . --source gitlog --collection repo:miseledger --json\nmiseledger import sourceharvest json export.json --source export --collection export:records --records-path records --json\n```\n\nUse StationTrail for agent-session logs. Use SourceHarvest for other local source-system exports. MiseLedger remains the archive, search, relation, and evidence layer for both.\n\nPlanned crawler adapter imports should keep this shape once SourceHarvest has real schema-backed adapters:\n\n```bash\nmiseledger import sourceharvest discrawl ~/.local/share/discrawl/discrawl.db --json\nmiseledger import sourceharvest telecrawl ~/.local/share/telecrawl/telecrawl.db --json\n```\n\n## Scan Manifests\n\nNative imports record which local source files MiseLedger has seen without exposing transcript text:\n\n```bash\nmiseledger scans list --json\nmiseledger scans list --source codex --json\nmiseledger scans show \u003cid-or-path\u003e --json\nmiseledger scans diff \u003cpath\u003e --json\nmiseledger scans changed --source codex --json\n```\n\nManifest rows include source kind, path, size, mtime, content hash, generated adapter hash, first/last seen timestamps, last imported timestamp, generated record count, and warning count.\n\n## Archive Operations\n\nArchive maintenance commands are local-only:\n\n```bash\nmiseledger stats --json\nmiseledger relations backfill --json\nmiseledger compact --json\nmiseledger prune imports --before 2026-01-01 --dry-run --json\nmiseledger prune scans --missing --dry-run --json\nmiseledger doctor --archive --json\n```\n\n`stats` summarizes archive contents by source, item kind, actor type, collection kind, and recent imports. `relations backfill` resolves stored `target_external_id` values after later imports add the target item. `compact` checkpoints, analyzes, vacuums, and optimizes the SQLite archive. `prune imports` removes old import metadata and warning rows only. `prune scans --missing` removes scan manifest rows for files no longer present. Neither prune command deletes normalized evidence items.\n\n`doctor --archive` checks SQLite quick-check status, foreign keys, orphan rows, unresolved relations, FTS coverage, and missing scan paths. It reports counts and status only, not transcript content.\n\n## Source Discovery\n\nDiscovery reports candidate roots and supported file counts only:\n\n```bash\nmiseledger sources discover --json\n```\n\nIt checks Codex sessions, OpenClaw agents, Claude projects, and Hermes session files without printing private transcript content.\n\n## Local API and MCP\n\nThe local HTTP API binds to loopback only by default:\n\n```bash\nmiseledger serve --addr 127.0.0.1:8765\ncurl \"http://127.0.0.1:8765/search?q=auth+timeout\"\ncurl \"http://127.0.0.1:8765/items/\u003citem-id\u003e\"\ncurl -X POST http://127.0.0.1:8765/evidence -d '{\"query\":\"auth timeout\",\"limit\":10}'\n```\n\nThe stdio MCP server exposes `search_evidence`, `show_item`, `create_evidence_bundle`, `show_evidence_bundle`, and `list_sources`:\n\n```bash\nmiseledger mcp\nmiseledger doctor --mcp --json\n```\n\nFixture smoke scripts exercise these surfaces without private transcript content:\n\n```bash\nscripts/bootstrap_local.sh\nscripts/smoke_http.sh\nscripts/smoke_mcp.sh\n```\n\n## Evidence\n\nBrigade-facing evidence bundles are structured and explicitly untrusted:\n\n```bash\nmiseledger evidence \"auth timeout\" --source discrawl --limit 20 --json\nmiseledger evidence \"Claude native import\" --project miseledger --json\nmiseledger evidence \"adapter contract\" --include-related --json\nmiseledger evidence \"adapter contract\" --include-artifact-text --json\nmiseledger evidence \"adapter contract\" --markdown\nmiseledger evidence show \u003cbundle-id\u003e --json\nmiseledger evidence list --json\nmiseledger explain \"adapter contract\" --source codex --json\n```\n\nEvidence output includes a stable bundle `id`, a `miseledger://evidence/\u003cid\u003e` resource URI, the query, filters, generated timestamp, result item IDs, snippets, FTS scores, source and collection context, actor context, raw refs, artifact refs, source grouping, optional related items, optional artifact text, and warnings. Evidence results dedupe repeated content hashes. Generated bundles are cached under MiseLedger's private cache directory and can be shown later with `miseledger evidence show`.\n\n`explain` uses the same FTS path as `search` and reports the quoted FTS query, filters, result count, source and item-kind counts, and top result IDs/snippets.\n\n## Relations\n\nMiseLedger resolves shallow relations during import when the target item already exists in the same source:\n\n- Codex function/tool call results link back to calls by `call_id`.\n- Claude `tool_result` records link back to `tool_use` records by `tool_use_id`.\n- OpenClaw session/run events preserve `belongs_to_session` and `belongs_to_run` relations when session or run identifiers are present.\n\nIf a target is not present yet, MiseLedger preserves `target_external_id` for later inspection.\n\n## Privacy\n\nMiseLedger does not make network calls for init, adapter generation, import, search, evidence, show, export, status, SQL inspection, MCP, HTTP serving, or doctor. Imported text is stored locally and treated as untrusted evidence, not executable instructions.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fescoffier-labs%2Fmiseledger","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fescoffier-labs%2Fmiseledger","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fescoffier-labs%2Fmiseledger/lists"}