|
| 1 | +# TAGLINE |
| 2 | + |
| 3 | +CLI for an open plain-text AI memory format (.dai files on disk) |
| 4 | + |
| 5 | +# TLDR |
| 6 | + |
| 7 | +**Install and configure** Claude Code, Cursor, and other MCP clients |
| 8 | + |
| 9 | +```daidocs setup``` |
| 10 | + |
| 11 | +Show **what is configured** and how to change each switch |
| 12 | + |
| 13 | +```daidocs setup --status``` |
| 14 | + |
| 15 | +**Convert** existing chat history into a store (interactive) |
| 16 | + |
| 17 | +```daidocs convert``` |
| 18 | + |
| 19 | +Convert selected Claude Code sessions **non-interactively** |
| 20 | + |
| 21 | +```daidocs convert --source claude --project [name] --pick [1-5] --to [~/DaiDocs] --yes``` |
| 22 | + |
| 23 | +List sessions **captured but not yet converted** |
| 24 | + |
| 25 | +```daidocs pending``` |
| 26 | + |
| 27 | +List **declared stores**, or find one that moved |
| 28 | + |
| 29 | +```daidocs stores``` |
| 30 | + |
| 31 | +```daidocs stores --scan [path/to/code]``` |
| 32 | + |
| 33 | +**Back up** a project folder (skip **node_modules** and **.git**) |
| 34 | + |
| 35 | +```daidocs backup [path/to/project] --to [path/to/backups]``` |
| 36 | + |
| 37 | +Find (or rewrite) **credentials** already in a store |
| 38 | + |
| 39 | +```daidocs scrub``` |
| 40 | + |
| 41 | +```daidocs scrub --apply``` |
| 42 | + |
| 43 | +**Ingest** a folder of **.txt** / **.md** / **.jsonl** into a store |
| 44 | + |
| 45 | +```daidocs ingest [path/to/chats] [path/to/store]``` |
| 46 | + |
| 47 | +**Ask** a question of a store from the shell |
| 48 | + |
| 49 | +```daidocs ask [path/to/store] "[what did we decide about deploy?]"``` |
| 50 | + |
| 51 | +# SYNOPSIS |
| 52 | + |
| 53 | +**daidocs** _command_ [_options_] |
| 54 | + |
| 55 | +**daidocs** **setup** [_options_] |
| 56 | + |
| 57 | +**daidocs** **convert** [_options_] |
| 58 | + |
| 59 | +**daidocs** **pending** [**--route** _project_] [**--to** _folder_] |
| 60 | + |
| 61 | +**daidocs** **stores** [**--scan** _folder_] [**--forget** _id_] |
| 62 | + |
| 63 | +**daidocs** **backup** _folder_ **--to** _destination_ [**--zip**] [**--memory-only**] |
| 64 | + |
| 65 | +**daidocs** **scrub** [_store_] [**--apply**] |
| 66 | + |
| 67 | +**daidocs** **ingest** _folder_ [_store_] [**--observer** _spec_] [**--force**] |
| 68 | + |
| 69 | +**daidocs** **ask** [_store_] _question_ [**--actor** _spec_] |
| 70 | + |
| 71 | +# PARAMETERS |
| 72 | + |
| 73 | +**setup** |
| 74 | +> Detect assistants on this machine (Claude Desktop, Claude Code, Cursor, Windsurf, Codex, Cline, Continue, Zed) and write MCP / hook / icon / reading-protocol config, backing up every file it touches. |
| 75 | +
|
| 76 | +**--status** |
| 77 | +> With **setup**, print each switch, whether it is on, and the command that changes it. |
| 78 | +
|
| 79 | +**--ask** |
| 80 | +> With **setup**, choose each surface interactively instead of configuring all of them. |
| 81 | +
|
| 82 | +**--restore** / **--unregister** |
| 83 | +> Put back files **setup** changed, or remove what was installed. |
| 84 | +
|
| 85 | +**--observer** _spec_ |
| 86 | +> Model that writes **.dai** files (for example **openai:gpt-4.1-mini**). Applies to conversion, hooks, MCP, and the CLI until changed. |
| 87 | +
|
| 88 | +**--project** _name_ / **--project-type** _type_ / **--store** **here**|**shared** |
| 89 | +> Declare the current folder as a project, set its type (**normal**, **locked**, **frozen**, **connected**, **shared**, **confidential**, **temporary**), and choose a per-folder store or the shared **~/DaiDocs** store. |
| 90 | +
|
| 91 | +**convert** |
| 92 | +> Turn chat history into **.dai** files. Interactive by default. Reads Claude Code sessions under **~/.claude/projects**, **_pending** / **_unconverted** backlog, or a folder of **.txt** / **.md** / **.jsonl**. |
| 93 | +
|
| 94 | +**--source** _claude_|_raw_|_folder_ |
| 95 | +> Limit **convert** to Claude Code history, already-captured unconverted text, or an export folder. |
| 96 | +
|
| 97 | +**--pick** _all_|_list_ / **--to** _store_ / **--yes** |
| 98 | +> Choose which items, where to write them, and skip prompts. |
| 99 | +
|
| 100 | +**pending** |
| 101 | +> List captured-but-unconverted sessions, grouped by project. |
| 102 | +
|
| 103 | +**--route** _project_ |
| 104 | +> Convert one project's pending group into that project's store. |
| 105 | +
|
| 106 | +**stores** |
| 107 | +> List declared stores and any whose folders have gone missing. Ids live in **~/.daidocs/stores.json**. |
| 108 | +
|
| 109 | +**backup** _folder_ |
| 110 | +> Copy a project to a dated destination, skipping **node_modules** and **.git**. **--zip** writes a zip; **--memory-only** copies only **.daidocs**. |
| 111 | +
|
| 112 | +**scrub** |
| 113 | +> Report credentials already stored in **.dai** files. **--apply** rewrites them out. |
| 114 | +
|
| 115 | +**ingest** |
| 116 | +> Convert a folder of documents into a store. Calls the observer model (can cost API usage). **--force** re-ingests files that are already present. |
| 117 | +
|
| 118 | +**ask** |
| 119 | +> Answer a question from a store on the command line. **--actor** _spec_ selects the answering model (can cost API usage). |
| 120 | +
|
| 121 | +# DESCRIPTION |
| 122 | + |
| 123 | +**daidocs** is the command-line front end for DaiDocs, an Apache-2.0 plain-text format for assistant memory. Each conversation becomes a **.dai** file with three UTF-8 zones (YAML header, fenced JSON, and text) plus a small derived index. The files live on your disk and can be read with **grep**, **git**, or any editor. |
| 124 | + |
| 125 | +The npm package also installs **daidocs-setup**, **daidocs-server** (stdio MCP), and session hook binaries. **npx daidocs setup** is the documented one-shot install. A Python extra (**pip install daidocs**) exposes the same **daidocs** command and a **Store** reader; the engine itself still needs **Node.js 18+**. |
| 126 | + |
| 127 | +The default shared store is **~/DaiDocs**. Declared project folders keep memory in **.daidocs/store** inside the folder. Session hooks (when installed) convert in the background after about 4,000 new tokens; shorter sessions wait in **_unconverted/** and are still injected into the next session verbatim. |
| 128 | + |
| 129 | +**ingest** and **ask** are the only subcommands that call a model themselves. Conversion through Claude Code hooks is done by the assistant already in the session and needs no extra API key. |
| 130 | + |
| 131 | +# ENVIRONMENT |
| 132 | + |
| 133 | +**DAIDOCS_STORE** |
| 134 | +> Default store path. Default: **~/DaiDocs**. When set, the store argument on **ingest**, **ask**, and **scrub** can be omitted. |
| 135 | +
|
| 136 | +**DAIDOCS_OBSERVER** |
| 137 | +> Override the observer model for one run. |
| 138 | +
|
| 139 | +**DAIDOCS_DISABLE** |
| 140 | +> Skip the auto-archive hook. |
| 141 | +
|
| 142 | +**DAIDOCS_NO_PING** |
| 143 | +> Decline the optional one-time anonymous install ping without being asked. |
| 144 | +
|
| 145 | +# CAVEATS |
| 146 | + |
| 147 | +**.dai** files are not encrypted: **confidential** only stops other stores from reading them, it does not hide them on disk. **scrub** is not a guarantee that secrets are gone. Agent traces (tool calls, stack dumps) convert poorly. Below roughly 20k tokens of history the store adds little over keeping the raw transcript. **ingest** and **ask** spend tokens on a paid model when you are not on a subscription path that writes the extraction itself. |
| 148 | + |
| 149 | +# HISTORY |
| 150 | + |
| 151 | +DaiDocs launched in **September 2026** as an open format plus a Node reference engine and MCP server, maintained by **Kerneta** under Apache-2.0. |
| 152 | + |
| 153 | +# SEE ALSO |
| 154 | + |
| 155 | +[claude](/man/claude)(1), [grep](/man/grep)(1), [git](/man/git)(1) |
| 156 | + |
| 157 | +# RESOURCES |
| 158 | + |
| 159 | +```[Source code](https://github.com/Kerneta/daidocs)``` |
| 160 | + |
| 161 | +```[Homepage](https://daidocs.com)``` |
| 162 | + |
| 163 | +```[Documentation](https://github.com/Kerneta/daidocs/blob/main/docs/GUIDE.md)``` |
| 164 | + |
| 165 | +<!-- verified: 2026-09-16 --> |
0 commit comments