@holt-os/holt 0.12.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -1
- package/dist/cli.js +557 -152
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -6,7 +6,14 @@ Holt is an open-source, self-hosted personal agent OS. Clone it, pick your skill
|
|
|
6
6
|
|
|
7
7
|
> A *holt* is a small wood: a sheltered place where things are kept and grow. That's the idea. A private home for your knowledge that compounds over time.
|
|
8
8
|
|
|
9
|
-
> **Status:
|
|
9
|
+
> **Status: shipping and usable today.** Working now:
|
|
10
|
+
>
|
|
11
|
+
> - `holt init` + `holt chat` with any brain (Claude Code, Codex, Gemini, or a direct API key), and mid-conversation brain switching that keeps context.
|
|
12
|
+
> - Per-folder memory with semantic recall and distilled facts, ambient memory for Claude Code (`holt hook`), and opt-in memory shared across folders (`holt memory global`).
|
|
13
|
+
> - A self-maintaining knowledge wiki (`holt wiki`) and an interactive knowledge graph (`holt graph`) that can also ingest your code and docs into communities.
|
|
14
|
+
> - Run a task once, on a schedule, or as a named routine (`holt run` / `schedule` / `routine`), and reach it from your phone over Telegram.
|
|
15
|
+
> - Draft in your own voice with anti-AI checks (`holt write`), and size your setup with `holt doctor`.
|
|
16
|
+
> - Ten built-in skills plus a community registry (`holt skill search`), and an MCP server so Claude Code, Cursor, or Codex can read this folder's memory.
|
|
10
17
|
|
|
11
18
|
---
|
|
12
19
|
|
|
@@ -64,14 +71,27 @@ Inside `holt chat`:
|
|
|
64
71
|
/memory memory stats. /memory <query> previews what recall would surface
|
|
65
72
|
/output show or set the save format: markdown | html
|
|
66
73
|
/save [name] save the last reply to a file in this folder
|
|
74
|
+
/allow <path> let this session read a folder outside this one (session-only)
|
|
75
|
+
/allowed list folders granted outside-access this session
|
|
67
76
|
/setting configure brains, API brains, and your launch command
|
|
68
77
|
/clear forget this session (saved memory stays)
|
|
69
78
|
/help show commands
|
|
70
79
|
/exit leave
|
|
71
80
|
```
|
|
72
81
|
|
|
82
|
+
A line that starts with `/` is treated as a command only when its first word is a real command. So a message like `/Users/me/resume.docx summarize this` (or a URL, or any sentence that opens with a slash) is sent to the brain as-is, never dropped as an "unknown command".
|
|
83
|
+
|
|
73
84
|
The point of `/brain`: Holt owns the transcript, so you can start a thread on one model and hand it to another mid-conversation. The new brain picks up with the full context.
|
|
74
85
|
|
|
86
|
+
### Reading files outside this folder
|
|
87
|
+
|
|
88
|
+
Holt runs the brain in the folder you launched it from, so by default the brain only sees this folder. If a message references an absolute path (`/...` or `~/...`) that exists **outside** the folder, Holt asks first: `Allow this session to access <dir> (outside this folder)? [y/N]`. Answer `y` and it grants the file's **containing directory** read access for the rest of this chat. Answer `n` and the message still goes through, the brain just does not get that folder.
|
|
89
|
+
|
|
90
|
+
- `/allow <path>` grants a folder up front with no prompt.
|
|
91
|
+
- `/allowed` lists what you have granted.
|
|
92
|
+
|
|
93
|
+
Grants are **in-memory and session-scoped**: nothing is written to disk, and they reset the next time you run `holt chat`. Access is **read-oriented** and only works with a **Claude Code** brain: Holt passes `--add-dir=<dir>` for each granted folder plus `--allowedTools=Read,Glob,Grep` so Claude Code can read (but not write) those files without an interactive permission prompt. With a Codex/Gemini or API brain, external file access is unavailable and Holt says so instead of adding flags. (If you need to tune the flags, they live in one place: `claudeAccessArgs` in `src/access.ts`.)
|
|
94
|
+
|
|
75
95
|
## Memory
|
|
76
96
|
|
|
77
97
|
Every exchange is saved to `<folder>/.holt/memory/turns.jsonl`, private and local. On each message, Holt recalls the most relevant moments from your *past* sessions in that folder and hands them to the brain, so it remembers what you told it last week.
|
|
@@ -319,6 +339,8 @@ Install **merges** into any existing `hooks` config, never clobbers unrelated se
|
|
|
319
339
|
|
|
320
340
|
**Trusted-folder guard (important).** The two runtime hooks (`holt hook inject` and `holt hook capture`, invoked by Claude Code, not you) no-op **silently** unless the folder is a trusted Holt workspace with an existing `.holt/memory`. So Holt never injects your private notes into an unrelated project, and never creates memory in a folder you never set up. To make a folder ambient, run `holt init` (or `holt chat`) there once so it becomes trusted and gets its `.holt/memory`. The inject hook keeps stdout clean (only the context block is printed, since Claude Code injects it verbatim); all diagnostics go to stderr, and both hooks always exit 0 so a memory step never blocks or slows your prompt.
|
|
321
341
|
|
|
342
|
+
**Seeing what the hooks did (`~/.holt/hooks.log`).** Since the hooks stay silent, every `holt hook capture` run appends **one** line to `~/.holt/hooks.log` with the outcome or the exact skip reason (untrusted folder, no config, `extractFacts` off, no usable brain, missing or empty transcript, too few exchanges, or `saved N facts`), preceded by a line of the raw hook fields it received. Check this file first if capture seems to save nothing. `inject` uses the same log but stays quiet by default; set `HOLT_HOOK_DEBUG=1` to make it log too.
|
|
343
|
+
|
|
322
344
|
To uninstall, run `holt hook remove` (add `--project` if you installed with `--project`).
|
|
323
345
|
|
|
324
346
|
## Output format
|
|
@@ -435,6 +457,8 @@ holt voice clear # remove it
|
|
|
435
457
|
|
|
436
458
|
The interview asks you to pick a **depth** up front: `quick` (a few questions) or `detailed` (more). Questions are about **writing and communication style only**: tone, sentence length, first vs third person, emoji habits, words you love or ban, who you write for, and what you want to sound like and not sound like.
|
|
437
459
|
|
|
460
|
+
Changed your mind at the first prompt? Answer `n`, `skip`, `cancel`, or just press enter to back out cleanly. Nothing is saved and no profile is built; run `holt voice` again whenever you like. Inside the question list, an empty answer skips only that one question.
|
|
461
|
+
|
|
438
462
|
Privacy is a hard rule. The interview never asks for personal details (no name, job, location, or life story). If you happen to mention something personal in an answer, Holt stores only what you typed and never asks follow ups.
|
|
439
463
|
|
|
440
464
|
You can also feed it real writing. `holt voice add <file>` reads a file; inside the interview you can paste a sample instead. Samples are stored as a hash and length by default; an excerpt is kept only if you say yes, so Holt can match your rhythm directly.
|