@holt-os/holt 0.13.0 → 0.14.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.
Files changed (3) hide show
  1. package/README.md +32 -4
  2. package/dist/cli.js +3795 -3598
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -35,10 +35,32 @@ npm install -g @holt-os/holt
35
35
 
36
36
  ```bash
37
37
  cd ~/where-you-want-to-work
38
- holt init # trust this folder, choose and install brains, sign in, set defaults
39
- holt chat # start talking (or use your custom command, e.g. `ai`)
38
+ holt # start your assistant (or use your custom command, e.g. `ai`)
40
39
  ```
41
40
 
41
+ That is it. Bare `holt` sets the folder up the first time (trust, brain, memory hooks) and then launches the **real interactive brain** (Claude Code, Codex, or Gemini), branded as Holt. Run `holt help` for the full command list, and `holt chat` for the lightweight REPL described further down.
42
+
43
+ Prefer to step through setup on its own first? `holt init` still does that, then `holt` starts the session.
44
+
45
+ ## What bare `holt` does
46
+
47
+ `holt` (with no command) is the front door: **your assistant, with memory of you.**
48
+
49
+ 1. **Sets up if needed.** In a fresh folder it runs onboarding (trust, pick a brain, memory). In an already-configured folder it just makes sure the folder is trusted, the memory directory exists, and the [ambient memory hooks](#ambient-memory-for-claude-code-holt-hook) are installed.
50
+ 2. **Launches the real interactive brain.** It hands the terminal to the brain's own interactive session (`claude`, `codex`, or `gemini` with no `-p` and no prompt), so you keep the brain's full power: agentic edits, tool use, the permission UI, MCP. This is different from `holt chat`, which is a lightweight REPL that shells out to the brain once per turn.
51
+ 3. **Brands the session as Holt.** See [Branding](#branding-holt-forward) below.
52
+
53
+ If your default brain is a **direct API brain** (no interactive TUI), bare `holt` prints a one-line note and starts `holt chat` instead, since that path supports API brains.
54
+
55
+ ### Branding (Holt-forward)
56
+
57
+ - **Banner.** Holt prints its banner before the brain takes over.
58
+ - **Identity.** Holt injects a short "you are Holt" system prompt so the session presents as your assistant, not the underlying model. For **Claude Code** this uses `--append-system-prompt=<text>` (confirmed to exist and work in interactive mode). Codex and Gemini have no such flag, so Holt writes the identity into a managed project context file the brain reads on startup (`AGENTS.md` for Codex, `GEMINI.md` for Gemini), and never clobbers a file you already have. The identity text lives in one place: `HOLT_IDENTITY` in `src/commands/launch.ts`.
59
+ - **Status line.** For Claude Code, Holt sets the status line to `Holt` by merging a minimal `statusLine` into the **project** file `./.claude/settings.json` (never your global `~/.claude/settings.json`), non-destructively and with a backup, and only if you have not set one yourself.
60
+ - **Residual chrome.** Claude Code has no flag to suppress its own welcome banner, so that (and any brain-specific chrome) still shows. Holt brands what it can and accepts the rest.
61
+
62
+ The exact Claude Code flags and where to tune them: `brandingFlags` and `brandStatusLine` in `src/commands/launch.ts`; the interactive invocation per brain is the `INTERACTIVE_ARGS` map in the same file.
63
+
42
64
  ## First run
43
65
 
44
66
  Holt runs in the folder you launch it from, like a per-project tool. The first time you use a folder it asks:
@@ -57,7 +79,7 @@ During `holt init` you:
57
79
  1. **Trust the folder.**
58
80
  2. **Choose brains** (claude, codex, gemini). Holt installs any you pick that are missing.
59
81
  3. **Sign in.** For a newly installed brain, Holt starts that tool's own login (browser or its own prompt). Holt never stores your credentials.
60
- 4. **Pick a default** brain and, optionally, a **launch command**: a short word like `ai` that starts `holt chat`. Holt installs it as a tiny launcher next to its own binary, so it works immediately in the same terminal, no sourcing or restart needed.
82
+ 4. **Pick a default** brain and, optionally, a **launch command**: a short word like `ai` that starts `holt` (your assistant). Holt installs it as a tiny launcher next to its own binary, so it works immediately in the same terminal, no sourcing or restart needed.
61
83
  5. **Enable semantic memory.** If you say yes, Holt sets up a local [Ollama](https://ollama.com) with a small embed model so recall works by meaning, fully offline.
62
84
 
63
85
  ## Using it
@@ -74,6 +96,7 @@ Inside `holt chat`:
74
96
  /allow <path> let this session read a folder outside this one (session-only)
75
97
  /allowed list folders granted outside-access this session
76
98
  /setting configure brains, API brains, and your launch command
99
+ /login [brain] sign in to a CLI brain (hands off to its own sign-in, then exits)
77
100
  /clear forget this session (saved memory stays)
78
101
  /help show commands
79
102
  /exit leave
@@ -83,6 +106,8 @@ A line that starts with `/` is treated as a command only when its first word is
83
106
 
84
107
  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.
85
108
 
109
+ If a reply says your brain is signed out (or shows an "invalid API key" style message), run `holt login <brain>` in a terminal, or type `/login` right in the chat to hand off to the brain's own sign-in. For an API brain, run `holt setting` to add or fix its key. Holt detects that state and shows this hint instead of relaying the loop-inducing text, and it does not store the exchange.
110
+
86
111
  ### Reading files outside this folder
87
112
 
88
113
  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.
@@ -484,8 +509,11 @@ With no profile yet, `holt write` still works using a plain, natural voice.
484
509
  ## Commands
485
510
 
486
511
  ```
512
+ holt start your assistant: set up if needed, then launch the real
513
+ interactive brain (Claude Code/Codex/Gemini), branded as Holt
514
+ holt launch same as bare "holt"
487
515
  holt init set up (trust, brains, sign-in, defaults) for this folder
488
- holt chat start a session that remembers past ones
516
+ holt chat lightweight REPL that remembers past ones (used for API brains)
489
517
  holt run <task> run one task non-interactively (recall, brain, remember)
490
518
  holt schedule run a task on a timer: add | list | remove
491
519
  holt routine named, reusable, scheduled jobs: add | run | list | show | remove