hoomanjs 1.40.2 → 1.41.1
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 +27 -655
- package/dist/acp/acp-agent.d.ts +16 -3
- package/dist/acp/acp-agent.js +369 -172
- package/dist/acp/acp-agent.js.map +1 -1
- package/dist/acp/commands.d.ts +6 -3
- package/dist/acp/commands.js +6 -24
- package/dist/acp/commands.js.map +1 -1
- package/dist/acp/meta/vscode.d.ts +10 -0
- package/dist/acp/meta/vscode.js +16 -0
- package/dist/acp/meta/vscode.js.map +1 -0
- package/dist/acp/questions.d.ts +18 -0
- package/dist/acp/questions.js +80 -0
- package/dist/acp/questions.js.map +1 -0
- package/dist/acp/session-config.d.ts +3 -1
- package/dist/acp/session-config.js +20 -8
- package/dist/acp/session-config.js.map +1 -1
- package/dist/acp/sessions/replay.js +117 -1
- package/dist/acp/sessions/replay.js.map +1 -1
- package/dist/acp/sessions/store.d.ts +55 -16
- package/dist/acp/sessions/store.js +174 -71
- package/dist/acp/sessions/store.js.map +1 -1
- package/dist/acp/utils/tool-kind.js +1 -0
- package/dist/acp/utils/tool-kind.js.map +1 -1
- package/dist/acp/utils/tool-result-content.d.ts +1 -0
- package/dist/acp/utils/tool-result-content.js +28 -1
- package/dist/acp/utils/tool-result-content.js.map +1 -1
- package/dist/chat/app.d.ts +3 -1
- package/dist/chat/app.js +84 -43
- package/dist/chat/app.js.map +1 -1
- package/dist/chat/components/BottomChrome.d.ts +12 -3
- package/dist/chat/components/BottomChrome.js +2 -2
- package/dist/chat/components/BottomChrome.js.map +1 -1
- package/dist/chat/components/ChromePicker.d.ts +5 -1
- package/dist/chat/components/ChromePicker.js +6 -2
- package/dist/chat/components/ChromePicker.js.map +1 -1
- package/dist/chat/components/QuestionPrompt.d.ts +8 -0
- package/dist/chat/components/QuestionPrompt.js +41 -0
- package/dist/chat/components/QuestionPrompt.js.map +1 -0
- package/dist/chat/components/StatusBar.d.ts +8 -3
- package/dist/chat/components/StatusBar.js +55 -26
- package/dist/chat/components/StatusBar.js.map +1 -1
- package/dist/chat/index.d.ts +2 -0
- package/dist/chat/index.js +1 -1
- package/dist/chat/index.js.map +1 -1
- package/dist/chat/questions.d.ts +24 -0
- package/dist/chat/questions.js +71 -0
- package/dist/chat/questions.js.map +1 -0
- package/dist/cli.js +11 -0
- package/dist/cli.js.map +1 -1
- package/dist/core/agent/index.d.ts +3 -0
- package/dist/core/agent/index.js +11 -11
- package/dist/core/agent/index.js.map +1 -1
- package/dist/core/agent/prompt-cache-plugin.d.ts +1 -1
- package/dist/core/agent/prompt-cache-plugin.js +1 -1
- package/dist/core/agent/session-title-plugin.d.ts +27 -0
- package/dist/core/agent/session-title-plugin.js +77 -0
- package/dist/core/agent/session-title-plugin.js.map +1 -0
- package/dist/core/config.d.ts +33 -1
- package/dist/core/config.js +2 -0
- package/dist/core/config.js.map +1 -1
- package/dist/core/index.d.ts +12 -0
- package/dist/core/index.js +7 -2
- package/dist/core/index.js.map +1 -1
- package/dist/core/mcp/index.d.ts +3 -3
- package/dist/core/mcp/index.js +2 -2
- package/dist/core/mcp/index.js.map +1 -1
- package/dist/core/mcp/manager.d.ts +28 -0
- package/dist/core/mcp/manager.js +171 -2
- package/dist/core/mcp/manager.js.map +1 -1
- package/dist/core/models/anthropic.d.ts +4 -3
- package/dist/core/models/anthropic.js.map +1 -1
- package/dist/core/models/azure.js +5 -1
- package/dist/core/models/azure.js.map +1 -1
- package/dist/core/models/groq.js +5 -1
- package/dist/core/models/groq.js.map +1 -1
- package/dist/core/models/minimax.d.ts +2 -1
- package/dist/core/models/minimax.js +49 -7
- package/dist/core/models/minimax.js.map +1 -1
- package/dist/core/models/moonshot.js +5 -1
- package/dist/core/models/moonshot.js.map +1 -1
- package/dist/core/models/openai.js +6 -1
- package/dist/core/models/openai.js.map +1 -1
- package/dist/core/models/openrouter.js +5 -1
- package/dist/core/models/openrouter.js.map +1 -1
- package/dist/core/models/types.d.ts +54 -6
- package/dist/core/models/types.js +18 -2
- package/dist/core/models/types.js.map +1 -1
- package/dist/core/models/usage.d.ts +10 -0
- package/dist/core/models/usage.js +45 -0
- package/dist/core/models/usage.js.map +1 -0
- package/dist/core/models/xai.js +5 -1
- package/dist/core/models/xai.js.map +1 -1
- package/dist/core/modes/definitions.js +2 -0
- package/dist/core/modes/definitions.js.map +1 -1
- package/dist/core/prompts/environment.d.ts +10 -1
- package/dist/core/prompts/environment.js +15 -1
- package/dist/core/prompts/environment.js.map +1 -1
- package/dist/core/prompts/static/ask-user.md +7 -0
- package/dist/core/prompts/static/environment.md +2 -1
- package/dist/core/prompts/static/filesystem.md +1 -1
- package/dist/core/prompts/static/web-search.md +1 -1
- package/dist/core/prompts/system.d.ts +6 -0
- package/dist/core/prompts/system.js +12 -1
- package/dist/core/prompts/system.js.map +1 -1
- package/dist/core/sessions/generate-title.d.ts +10 -0
- package/dist/core/sessions/generate-title.js +113 -0
- package/dist/core/sessions/generate-title.js.map +1 -0
- package/dist/core/sessions/list-cli-sessions.js +13 -1
- package/dist/core/sessions/list-cli-sessions.js.map +1 -1
- package/dist/core/skills/built-in/hooman-config/providers.md +17 -0
- package/dist/core/skills/built-in/hooman-mcp/SKILL.md +20 -0
- package/dist/core/skills/built-in/hooman-skills/SKILL.md +1 -1
- package/dist/core/state/session-title.d.ts +17 -0
- package/dist/core/state/session-title.js +15 -0
- package/dist/core/state/session-title.js.map +1 -0
- package/dist/core/state/tool-approvals.js +3 -0
- package/dist/core/state/tool-approvals.js.map +1 -1
- package/dist/core/tools/ask-user.d.ts +46 -0
- package/dist/core/tools/ask-user.js +66 -0
- package/dist/core/tools/ask-user.js.map +1 -0
- package/dist/core/tools/filesystem.d.ts +26 -1
- package/dist/core/tools/filesystem.js +44 -23
- package/dist/core/tools/filesystem.js.map +1 -1
- package/dist/core/tools/index.d.ts +1 -0
- package/dist/core/tools/index.js +1 -0
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/shell.d.ts +41 -0
- package/dist/core/tools/shell.js +8 -1
- package/dist/core/tools/shell.js.map +1 -1
- package/dist/core/tools/time.js +1 -1
- package/dist/core/tools/time.js.map +1 -1
- package/dist/core/utils/billing.d.ts +49 -0
- package/dist/core/utils/billing.js +295 -0
- package/dist/core/utils/billing.js.map +1 -0
- package/dist/core/utils/edit-replace.d.ts +6 -0
- package/dist/core/utils/edit-replace.js +88 -6
- package/dist/core/utils/edit-replace.js.map +1 -1
- package/dist/core/utils/paths.d.ts +1 -0
- package/dist/core/utils/paths.js +1 -0
- package/dist/core/utils/paths.js.map +1 -1
- package/dist/core/{models → utils}/reasoning-effort.d.ts +9 -0
- package/dist/core/utils/reasoning-effort.js.map +1 -0
- package/dist/daemon/questions.d.ts +18 -0
- package/dist/daemon/questions.js +44 -0
- package/dist/daemon/questions.js.map +1 -0
- package/dist/exec/questions.d.ts +9 -0
- package/dist/exec/questions.js +50 -0
- package/dist/exec/questions.js.map +1 -0
- package/dist/index.d.ts +7 -6
- package/dist/index.js +6 -5
- package/dist/index.js.map +1 -1
- package/package.json +3 -2
- package/dist/core/models/reasoning-effort.js.map +0 -1
- package/dist/core/tools/terminal-backend.d.ts +0 -41
- package/dist/core/tools/terminal-backend.js +0 -9
- package/dist/core/tools/terminal-backend.js.map +0 -1
- package/dist/core/tools/text-fs-backend.d.ts +0 -25
- package/dist/core/tools/text-fs-backend.js +0 -9
- package/dist/core/tools/text-fs-backend.js.map +0 -1
- /package/dist/core/{models → utils}/reasoning-effort.js +0 -0
package/README.md
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
<div align="center">
|
|
2
|
+
<img src=".github/logo.svg" alt="Hooman logo" width="128" />
|
|
2
3
|
<h1>Hooman</h1>
|
|
3
4
|
<p>
|
|
4
|
-
Hooman is a hackable AI agent toolkit for local workflows. It is built with TypeScript, <a href="https://www.npmjs.com/package/@strands-agents/sdk">Strands Agents SDK</a>, and <a href="https://github.com/vadimdemedes/ink">Ink</a>.
|
|
5
|
+
Hooman is a hackable, local-first AI agent toolkit for local workflows. It is built with TypeScript, <a href="https://www.npmjs.com/package/@strands-agents/sdk">Strands Agents SDK</a>, and <a href="https://github.com/vadimdemedes/ink">Ink</a>.
|
|
5
6
|
</p>
|
|
6
7
|
<p>
|
|
7
8
|
<a href="https://nodejs.org"><img src="https://img.shields.io/badge/runtime-Node.js-5FA04E?logo=nodedotjs&logoColor=white" alt="Node.js" /></a>
|
|
@@ -14,683 +15,54 @@
|
|
|
14
15
|
<p>
|
|
15
16
|
<img src=".github/screenshot.png" alt="Hooman screenshot" />
|
|
16
17
|
</p>
|
|
18
|
+
<p>
|
|
19
|
+
<strong><a href="https://vaibhavpandey.com/hooman/">Website</a></strong> ·
|
|
20
|
+
<strong><a href="https://vaibhavpandey.com/hooman/getting-started/">Docs</a></strong> ·
|
|
21
|
+
<strong><a href="https://vaibhavpandey.com/hooman/guides/vscode/">VS Code Extension</a></strong>
|
|
22
|
+
</p>
|
|
17
23
|
</div>
|
|
18
24
|
|
|
19
|
-
|
|
25
|
+
Hooman reads your codebase, edits files, and runs commands — from a terminal, VS Code, or any [Agent Client Protocol](https://agentclientprotocol.com) client. Bring your own model; your config, keys, and sessions never leave `~/.hooman`.
|
|
20
26
|
|
|
21
27
|
- a one-shot `exec` command for single prompts
|
|
22
|
-
- a stateful `chat` interface for iterative sessions
|
|
28
|
+
- a stateful `chat` interface for iterative sessions, with an in-chat `/config` workflow for models, MCP servers, and skills
|
|
23
29
|
- a `daemon` command for channel-driven MCP automation
|
|
24
|
-
- an
|
|
25
|
-
- an `acp` command for running Hooman as an Agent Client Protocol (ACP) agent over stdio
|
|
26
|
-
|
|
27
|
-
## Related
|
|
28
|
-
|
|
29
|
-
**Looking for a focused web UI** for chat and agent configuration with lighter surface on top of the same stack? See [**Zero**](https://github.com/vaibhavpandeyvpz/zero) — [README](https://github.com/vaibhavpandeyvpz/zero#readme).
|
|
30
|
-
|
|
31
|
-
## Features
|
|
32
|
-
|
|
33
|
-
- Multiple LLM providers: `anthropic`, `azure`, `bedrock`, `google`, `groq`, `minimax`, `moonshot`, `ollama`, `openai`, `openrouter`, `xai`
|
|
34
|
-
- Local configuration under `~/.hooman`
|
|
35
|
-
- Optional web search tool with provider selection (`brave`, `exa`, `firecrawl`, `serper`, or `tavily`)
|
|
36
|
-
- MCP server support via `stdio`, `streamable-http`, and `sse`
|
|
37
|
-
- MCP server `instructions` support: server-provided instructions are appended to the agent system prompt
|
|
38
|
-
- MCP channel notifications: `hooman daemon` subscribes to servers that advertise `hooman/channel`
|
|
39
|
-
- Runtime skills via Strands `AgentSkills`, loading bundled built-in skills plus local `~/.hooman/skills`
|
|
40
|
-
- Bundled prompt harness toggles (`behaviour`, `communication`, `execution`, `guardrails`); coding guidance ships as the built-in `hooman-coding` skill
|
|
41
|
-
- Built-in read-only subagent tools (`subagent_research`, `subagent_review`, `subagent_test_investigator`)
|
|
42
|
-
- Built-in `grep` tool backed by ripgrep (`rg`), with runtime bootstrap when `rg` is not available on PATH
|
|
43
|
-
- Toolkit-oriented architecture with configurable tools, prompts, and transports
|
|
44
|
-
- Interactive terminal UI for chat and configuration
|
|
30
|
+
- an `acp` command for running Hooman as an Agent Client Protocol agent over stdio (used by the [VS Code extension](https://vaibhavpandey.com/hooman/guides/vscode/) and editors like Zed)
|
|
45
31
|
|
|
46
|
-
##
|
|
47
|
-
|
|
48
|
-
- [Node.js](https://nodejs.org) `>= 24`
|
|
49
|
-
- npm for package installs and JavaScript tooling
|
|
50
|
-
- Provider credentials or local model runtime depending on the LLM you choose
|
|
51
|
-
|
|
52
|
-
## Usage
|
|
53
|
-
|
|
54
|
-
Fastest way to get started without cloning the repo:
|
|
32
|
+
## Quick start
|
|
55
33
|
|
|
56
34
|
```bash
|
|
57
35
|
npx hoomanjs
|
|
58
|
-
|
|
59
|
-
# or install globally
|
|
60
|
-
npm i -g hoomanjs
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
Or with Bun:
|
|
64
|
-
|
|
65
|
-
```bash
|
|
66
|
-
bunx hoomanjs
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
Recommended first run:
|
|
70
|
-
|
|
71
|
-
1. Start chatting with `hooman` (same as `hooman chat`).
|
|
72
|
-
2. Run `/config` in chat to choose your LLM provider and model, and to manage MCP servers and skills.
|
|
73
|
-
3. Use `hooman exec "your prompt"` for one-off tasks.
|
|
74
|
-
|
|
75
|
-
## Must have
|
|
76
|
-
|
|
77
|
-
For the best experience, set up both:
|
|
78
|
-
|
|
79
|
-
1. **MCP servers** for on-demand tools in `chat` / `exec` (task APIs, messaging, schedulers, etc.).
|
|
80
|
-
2. **MCP channels** for event-driven automation with `hooman daemon` (notifications become agent prompts).
|
|
81
|
-
|
|
82
|
-
Suggested MCP servers from this ecosystem:
|
|
83
|
-
|
|
84
|
-
- [`cronmcp`](https://github.com/vaibhavpandeyvpz/cronmcp) - lets Hooman schedule recurring prompts and automations, so routine checks and follow-ups run on time.
|
|
85
|
-
- [`jiraxmcp`](https://github.com/vaibhavpandeyvpz/jiraxmcp) - gives Hooman direct Jira Cloud access to search issues, update tickets, and help drive sprint workflows.
|
|
86
|
-
- [`slackxmcp`](https://github.com/vaibhavpandeyvpz/slackxmcp) - connects Hooman to Slack so it can read channel context, draft updates, and post actions where your team already works.
|
|
87
|
-
- [`tgfmcp`](https://github.com/vaibhavpandeyvpz/tgfmcp) - enables Telegram bot workflows, making it easy to route notifications and respond from agent-driven chats.
|
|
88
|
-
- [`wappmcp`](https://github.com/vaibhavpandeyvpz/wappmcp) - brings WhatsApp Web messaging into Hooman for customer or team communication automations.
|
|
89
|
-
|
|
90
|
-
For production deployments, still review permissions and use least-privilege credentials/tokens for each integration.
|
|
91
|
-
|
|
92
|
-
## Install
|
|
93
|
-
|
|
94
|
-
```bash
|
|
95
|
-
npm install
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
Run locally:
|
|
99
|
-
|
|
100
|
-
```bash
|
|
101
|
-
npm run dev -- --help
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
Or use the dev alias:
|
|
105
|
-
|
|
106
|
-
```bash
|
|
107
|
-
npm run build
|
|
108
|
-
node dist/cli.js --help
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
Link the CLI locally:
|
|
112
|
-
|
|
113
|
-
```bash
|
|
114
|
-
npm link
|
|
115
|
-
hooman --help
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
## Commands
|
|
119
|
-
|
|
120
|
-
### `hooman exec`
|
|
121
|
-
|
|
122
|
-
Run a single prompt once.
|
|
123
|
-
|
|
124
|
-
```bash
|
|
125
|
-
hooman exec "Summarize the current repository"
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
Use a specific session id:
|
|
129
|
-
|
|
130
|
-
```bash
|
|
131
|
-
hooman exec "What changed?" --session my-session
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
Skip interactive tool approval (allows every tool call; use only when you trust the prompt and environment):
|
|
135
|
-
|
|
136
|
-
```bash
|
|
137
|
-
hooman exec "Summarize this repo" --yolo
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
Start in **ask** mode (narrower tool surface, no plan lifecycle tools; see [Session mode](#session-mode)):
|
|
141
|
-
|
|
142
|
-
```bash
|
|
143
|
-
hooman exec "Map the architecture" --mode ask
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
### `hooman chat`
|
|
147
|
-
|
|
148
|
-
Start an interactive stateful chat session.
|
|
149
|
-
|
|
150
|
-
```bash
|
|
151
|
-
hooman
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
Equivalent explicit form:
|
|
155
|
-
|
|
156
|
-
```bash
|
|
157
|
-
hooman chat
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
Optional initial prompt:
|
|
161
|
-
|
|
162
|
-
```bash
|
|
163
|
-
hooman chat "Help me prioritize the next task"
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
Resume or pin a session id:
|
|
167
|
-
|
|
168
|
-
```bash
|
|
169
|
-
hooman chat --session my-session
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
Skip the in-chat tool approval UI (same semantics as `exec --yolo`):
|
|
173
|
-
|
|
174
|
-
```bash
|
|
175
|
-
hooman chat --yolo
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
Start in ask mode:
|
|
179
|
-
|
|
180
|
-
```bash
|
|
181
|
-
hooman chat --mode ask
|
|
182
|
-
```
|
|
183
|
-
|
|
184
|
-
### Chat commands
|
|
185
|
-
|
|
186
|
-
Inside an interactive `chat` session, type `/` to discover slash commands:
|
|
187
|
-
|
|
188
|
-
- `/model` - pick or set the chat model for this session.
|
|
189
|
-
- `/mode` - switch the session mode (`agent`, `ask`, `plan`); see [Session mode](#session-mode).
|
|
190
|
-
- `/yolo` - toggle auto-approve of tool calls (`on` / `off`).
|
|
191
|
-
- `/init` - generate or refresh `AGENTS.md` for the current project.
|
|
192
|
-
- `/compact` - compact the conversation history now and persist the result.
|
|
193
|
-
- `/new` - start a fresh chat session.
|
|
194
|
-
- `/config` - launch the configuration workflow (see below).
|
|
195
|
-
|
|
196
|
-
### Session mode
|
|
197
|
-
|
|
198
|
-
`exec`, `chat`, and `daemon` accept **`-m` / `--mode`** with:
|
|
199
|
-
|
|
200
|
-
- **`agent`** (default): normal tool surface and approvals.
|
|
201
|
-
- **`plan`**: planning workflow with a reduced tool surface plus `enter_plan_mode` / `exit_plan_mode`.
|
|
202
|
-
- **`ask`**: read-oriented, narrower surface (similar to interactive **plan** mode) but **without** `enter_plan_mode` / `exit_plan_mode`.
|
|
203
|
-
|
|
204
|
-
In **`chat`**, `/mode` can switch between **agent**, **ask**, and **plan**. **ACP** sessions can set `hooman.sessionMode` to `agent`, `plan`, or `ask`.
|
|
205
|
-
|
|
206
|
-
### `hooman daemon`
|
|
207
|
-
|
|
208
|
-
Run a long-lived daemon that **always** subscribes to MCP servers advertising the `hooman/channel` capability and feeds each received notification into the agent as a queued prompt.
|
|
209
|
-
|
|
210
|
-
```bash
|
|
211
|
-
hooman daemon
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
Resume or pin a session id:
|
|
215
|
-
|
|
216
|
-
```bash
|
|
217
|
-
hooman daemon --session my-daemon
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
Skip remote channel permission relay and allow every tool call from daemon turns (same risk profile as `exec` / `chat` with `--yolo`):
|
|
221
|
-
|
|
222
|
-
```bash
|
|
223
|
-
hooman daemon --yolo
|
|
224
|
-
```
|
|
225
|
-
|
|
226
|
-
Optional `--mode ask` matches `exec` / `chat` (narrow surface without plan lifecycle tools).
|
|
227
|
-
|
|
228
|
-
Log raw notification payloads:
|
|
229
|
-
|
|
230
|
-
```bash
|
|
231
|
-
hooman daemon --debug
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
### `hooman config`
|
|
235
|
-
|
|
236
|
-
Print the effective runtime `config.json` for the current working directory in
|
|
237
|
-
the same shape as `config.json`, with credential-like values redacted.
|
|
238
|
-
|
|
239
|
-
```bash
|
|
240
|
-
hooman config
|
|
241
36
|
```
|
|
242
37
|
|
|
243
|
-
|
|
38
|
+
Or install globally (`npm i -g hoomanjs`), or via Bun (`bunx hoomanjs`). Then run `/config` inside the chat to pick a provider and model. Full walkthrough: [Getting Started](https://vaibhavpandey.com/hooman/getting-started/).
|
|
244
39
|
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
- `search.enabled`
|
|
248
|
-
- `search.provider` (`brave`, `exa`, `firecrawl`, `serper`, or `tavily`)
|
|
249
|
-
- `search.brave.apiKey`
|
|
250
|
-
- `search.exa.apiKey`
|
|
251
|
-
- `search.firecrawl.apiKey`
|
|
252
|
-
- `search.serper.apiKey`
|
|
253
|
-
- `search.tavily.apiKey`
|
|
254
|
-
- `prompts.behaviour`
|
|
255
|
-
- `prompts.communication`
|
|
256
|
-
- `prompts.execution`
|
|
257
|
-
- `prompts.guardrails`
|
|
258
|
-
- `tools.todo.enabled`
|
|
259
|
-
- `tools.fetch.enabled`
|
|
260
|
-
- `tools.filesystem.enabled`
|
|
261
|
-
- `tools.shell.enabled`
|
|
262
|
-
- `tools.sleep.enabled`
|
|
263
|
-
- `tools.subagents.enabled` (enables built-in subagent tools)
|
|
264
|
-
|
|
265
|
-
### `/config`
|
|
266
|
-
|
|
267
|
-
The interactive configuration workflow is launched from inside a `chat` session with the `/config` slash command (there is no separate top-level `configure` command). It takes over the terminal on the alternate screen buffer while open, and restores the chat session on exit. Any config changes are picked up when the session re-bootstraps.
|
|
268
|
-
|
|
269
|
-
```text
|
|
270
|
-
/config
|
|
271
|
-
```
|
|
272
|
-
|
|
273
|
-
The configuration UI currently lets you:
|
|
274
|
-
|
|
275
|
-
- manage general settings such as name, prompts, tools, and compaction
|
|
276
|
-
- manage models and providers with field-by-field editors
|
|
277
|
-
- choose search provider and set its API key
|
|
278
|
-
- toggle bundled harness prompts (`behaviour`, `communication`, `execution`, `guardrails`)
|
|
279
|
-
- edit `instructions.md` in your `$VISUAL` / `$EDITOR` (cross-platform fallback included)
|
|
280
|
-
- add, edit, and delete MCP servers with field-by-field editors and confirmation
|
|
281
|
-
- search, install, refresh, and remove skills
|
|
282
|
-
|
|
283
|
-
### `hooman acp`
|
|
284
|
-
|
|
285
|
-
Run Hooman as an Agent Client Protocol (ACP) agent over stdio.
|
|
286
|
-
|
|
287
|
-
```bash
|
|
288
|
-
hooman acp
|
|
289
|
-
```
|
|
290
|
-
|
|
291
|
-
ACP notes:
|
|
292
|
-
|
|
293
|
-
- ACP sessions are stored under the active project's session directory in `sessions/acp/` (see [Configuration Layout](#configuration-layout))
|
|
294
|
-
- ACP loads MCP servers passed on `session/new` and `session/load`, in addition to Hooman's local `mcp.json`
|
|
295
|
-
- ACP `session/new` and `session/load` support `_meta.userId`
|
|
296
|
-
- session configuration includes `hooman.sessionMode` (`agent`, `plan`, or `ask`); see [Session mode](#session-mode)
|
|
297
|
-
|
|
298
|
-
## Configuration Layout
|
|
299
|
-
|
|
300
|
-
Hooman stores its data in:
|
|
301
|
-
|
|
302
|
-
```text
|
|
303
|
-
~/.hooman/
|
|
304
|
-
```
|
|
305
|
-
|
|
306
|
-
Important files and folders:
|
|
307
|
-
|
|
308
|
-
- `config.json` - app name, reusable provider configs, model configs, tool flags, and compaction
|
|
309
|
-
- `instructions.md` - system instructions used to build the agent prompt
|
|
310
|
-
- `mcp.json` - MCP server definitions
|
|
311
|
-
- `skills/` - installed skills
|
|
312
|
-
- `bin/` - runtime-managed helper binaries (including bootstrapped `rg` for the `grep` tool when system `rg` is unavailable)
|
|
313
|
-
- `cache/` - runtime caches used by tools and subsystems
|
|
314
|
-
- `projects.json` - registry mapping each project root to a stable UUID
|
|
315
|
-
- `projects/<uuid>/` - per-project storage, scoped to the project (git root, falling back to cwd) the session runs in:
|
|
316
|
-
- `sessions/` - persisted session data (including ACP sessions under `sessions/acp/` and offloaded tool output under `sessions/offloaded-content/`)
|
|
317
|
-
- `memory/` - durable extracted memory store
|
|
318
|
-
- `attachments/` - saved attachments (e.g. clipboard images)
|
|
319
|
-
- `plans/` - plan-mode markdown documents
|
|
320
|
-
|
|
321
|
-
### Project-scoped storage
|
|
322
|
-
|
|
323
|
-
`sessions`, `memory`, `attachments`, and `plans` are scoped per project rather than shared globally. On first use in a working directory, Hooman resolves the project root (the nearest git root, falling back to the cwd), mints a UUID for it, and records the mapping in `~/.hooman/projects.json`. All four folders then live under `~/.hooman/projects/<uuid>/`, so unrelated projects never see each other's sessions, memory, attachments, or plans. Config and MCP resolution are unaffected (see repo-local overlays below).
|
|
324
|
-
|
|
325
|
-
### Repo-local runtime overlays
|
|
326
|
-
|
|
327
|
-
At runtime, Hooman resolves configuration in this order:
|
|
328
|
-
|
|
329
|
-
1. `~/.hooman/config.json` and `~/.hooman/mcp.json`
|
|
330
|
-
2. `<git-root>/.hooman/config.json` and `<git-root>/.hooman/mcp.json` (if present)
|
|
331
|
-
3. matching `.hooman/config.json` and `.hooman/mcp.json` files in nested directories from git root to current working directory
|
|
332
|
-
|
|
333
|
-
Nearest files win when keys overlap.
|
|
334
|
-
|
|
335
|
-
For app config (`config.json`):
|
|
336
|
-
|
|
337
|
-
- plain objects are deep-merged
|
|
338
|
-
- scalar values are overridden by the nearest file
|
|
339
|
-
- `providers` and `llms` are merged by `name` (nearest entry with the same name replaces inherited entries)
|
|
340
|
-
|
|
341
|
-
For MCP config (`mcp.json`):
|
|
342
|
-
|
|
343
|
-
- `mcpServers` is merged by server name (nearest entry with the same name wins)
|
|
344
|
-
|
|
345
|
-
Notes:
|
|
346
|
-
|
|
347
|
-
- Runtime overlays apply to `chat`, `exec`, `daemon`, and `acp` bootstraps.
|
|
348
|
-
- `hooman config` prints only the merged effective `config.json` shape with credential-like values redacted.
|
|
349
|
-
- The `/config` UI and `hooman mcp auth/logout/auth-status` still target home config (`~/.hooman/*`) directly.
|
|
350
|
-
- Keep secrets in home config unless you explicitly want project-scoped credentials.
|
|
351
|
-
|
|
352
|
-
`grep` tool binary resolution order:
|
|
353
|
-
|
|
354
|
-
1. Use system `rg` when available.
|
|
355
|
-
2. Else use cached `~/.hooman/bin/rg` (or `rg.exe` on Windows).
|
|
356
|
-
3. Else download and verify a platform-specific ripgrep release into `~/.hooman/bin/`.
|
|
357
|
-
|
|
358
|
-
## Example `config.json`
|
|
359
|
-
|
|
360
|
-
The on-disk shape uses a reusable **`providers`** array plus a non-empty **`llms`** array. Each provider stores a runtime `provider` id plus provider-specific `options`; each LLM references a provider by name, stores its model `options`, and marks one entry as the default. The bundled **hooman-config** skill documents the full schema.
|
|
361
|
-
|
|
362
|
-
```json
|
|
363
|
-
{
|
|
364
|
-
"name": "Hooman",
|
|
365
|
-
"providers": [
|
|
366
|
-
{
|
|
367
|
-
"name": "Ollama",
|
|
368
|
-
"provider": "ollama",
|
|
369
|
-
"options": {}
|
|
370
|
-
}
|
|
371
|
-
],
|
|
372
|
-
"llms": [
|
|
373
|
-
{
|
|
374
|
-
"name": "Default",
|
|
375
|
-
"provider": "Ollama",
|
|
376
|
-
"options": {
|
|
377
|
-
"model": "gemma4:e4b"
|
|
378
|
-
},
|
|
379
|
-
"default": true
|
|
380
|
-
}
|
|
381
|
-
],
|
|
382
|
-
"search": {
|
|
383
|
-
"enabled": false,
|
|
384
|
-
"provider": "brave",
|
|
385
|
-
"brave": {},
|
|
386
|
-
"exa": {},
|
|
387
|
-
"firecrawl": {},
|
|
388
|
-
"serper": {},
|
|
389
|
-
"tavily": {}
|
|
390
|
-
},
|
|
391
|
-
"prompts": {
|
|
392
|
-
"behaviour": true,
|
|
393
|
-
"communication": true,
|
|
394
|
-
"execution": true,
|
|
395
|
-
"guardrails": true
|
|
396
|
-
},
|
|
397
|
-
"tools": {
|
|
398
|
-
"todo": { "enabled": true },
|
|
399
|
-
"fetch": { "enabled": true },
|
|
400
|
-
"filesystem": { "enabled": true },
|
|
401
|
-
"shell": { "enabled": true },
|
|
402
|
-
"sleep": { "enabled": true },
|
|
403
|
-
"subagents": { "enabled": true }
|
|
404
|
-
},
|
|
405
|
-
"compaction": {
|
|
406
|
-
"ratio": 0.75,
|
|
407
|
-
"keep": 5
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
```
|
|
411
|
-
|
|
412
|
-
Tool approvals are session-scoped and are not persisted in `config.json`.
|
|
413
|
-
|
|
414
|
-
Hooman enables Strands `ContextOffloader` by default with file-backed storage under the project-scoped `~/.hooman/projects/<uuid>/sessions/offloaded-content`, so large tool results can be previewed in-context and retrieved later without bloating the active conversation window.
|
|
415
|
-
|
|
416
|
-
Supported `providers[].provider` values registered in this release (see `src/core/models/index.ts`):
|
|
417
|
-
|
|
418
|
-
- `anthropic`
|
|
419
|
-
- `azure`
|
|
420
|
-
- `bedrock`
|
|
421
|
-
- `google`
|
|
422
|
-
- `groq`
|
|
423
|
-
- `minimax`
|
|
424
|
-
- `moonshot`
|
|
425
|
-
- `ollama`
|
|
426
|
-
- `openai`
|
|
427
|
-
- `openrouter`
|
|
428
|
-
- `xai`
|
|
429
|
-
|
|
430
|
-
Supported `search.provider` values:
|
|
431
|
-
|
|
432
|
-
- `brave`
|
|
433
|
-
- `exa`
|
|
434
|
-
- `firecrawl`
|
|
435
|
-
- `serper`
|
|
436
|
-
- `tavily`
|
|
437
|
-
|
|
438
|
-
## Provider Notes
|
|
439
|
-
|
|
440
|
-
Provider entries now look like:
|
|
441
|
-
|
|
442
|
-
```json
|
|
443
|
-
{
|
|
444
|
-
"name": "MiniMax",
|
|
445
|
-
"provider": "minimax",
|
|
446
|
-
"options": {
|
|
447
|
-
"apiKey": "..."
|
|
448
|
-
}
|
|
449
|
-
}
|
|
450
|
-
```
|
|
451
|
-
|
|
452
|
-
LLM entries reference a provider by name and carry normalized model options:
|
|
453
|
-
|
|
454
|
-
```json
|
|
455
|
-
{
|
|
456
|
-
"name": "MiniMax M3",
|
|
457
|
-
"provider": "MiniMax",
|
|
458
|
-
"options": {
|
|
459
|
-
"model": "MiniMax-M3",
|
|
460
|
-
"temperature": 1,
|
|
461
|
-
"maxTokens": 4096
|
|
462
|
-
},
|
|
463
|
-
"default": true
|
|
464
|
-
}
|
|
465
|
-
```
|
|
466
|
-
|
|
467
|
-
Supported provider option fields:
|
|
468
|
-
|
|
469
|
-
All reasoning-capable providers share a common optional `reasoning` object (`{ effort?, summary?, display? }`). `effort` is `"minimal" | "low" | "medium" | "high"` and its presence enables thinking; Hooman translates it to each backend's native shape. `summary` (`"auto" | "concise" | "detailed" | "none"`) is only honored by the OpenAI/Azure Responses API. `display` (`"summarized" | "omitted"`) applies to Bedrock Claude / MiniMax only. See the bundled **hooman-config** skill for the exact per-provider mapping.
|
|
470
|
-
|
|
471
|
-
- `anthropic`: `apiKey`, optional `baseURL`, optional `headers`, optional `reasoning`
|
|
472
|
-
- `azure`: optional `resourceName`, optional `baseURL`, optional `apiKey`, optional `headers`, optional `apiVersion`, optional `useDeploymentBasedUrls`, optional `reasoning`
|
|
473
|
-
- `bedrock`: `region`, `accessKeyId`, `secretAccessKey`, optional `sessionToken`, optional `apiKey`, optional `reasoning`
|
|
474
|
-
- `google`: `apiKey`, optional `reasoning`
|
|
475
|
-
- `groq`: `apiKey`, optional `baseURL`, optional `headers`, optional `reasoning`
|
|
476
|
-
- `minimax`: `apiKey`, optional `headers`, optional `reasoning`
|
|
477
|
-
- `moonshot`: `apiKey`, optional `baseURL`, optional `headers`, optional `reasoning`
|
|
478
|
-
- `ollama`: optional `baseURL`, optional `reasoning`
|
|
479
|
-
- `openai`: `apiKey`, optional `baseURL`, optional `headers`, optional `api` (`"responses"` (default) or `"chat"`), optional `reasoning`
|
|
480
|
-
- `openrouter`: `apiKey`, optional `baseURL`, optional `headers`, optional `reasoning`
|
|
481
|
-
- `xai`: `apiKey`, optional `baseURL`, optional `headers`, optional `reasoning`
|
|
482
|
-
|
|
483
|
-
Normalized LLM option fields:
|
|
484
|
-
|
|
485
|
-
- `model`
|
|
486
|
-
- optional `temperature`
|
|
487
|
-
- optional `maxTokens`
|
|
488
|
-
|
|
489
|
-
Notes:
|
|
490
|
-
|
|
491
|
-
- Google maps normalized `maxTokens` to the SDK's `maxOutputTokens` internally.
|
|
492
|
-
- Azure uses the Vercel AI SDK `@ai-sdk/azure` provider. Set the LLM `model` to your Azure deployment name, not the raw OpenAI model id.
|
|
493
|
-
- Ollama maps normalized `temperature` into Ollama `options.temperature`.
|
|
494
|
-
- MiniMax uses the Anthropic-compatible endpoint `https://api.minimax.io/anthropic` automatically.
|
|
495
|
-
- Moonshot defaults `baseURL` to `https://api.moonshot.ai/v1` when it is omitted. It is served through the reasoning-aware openai-compatible adapter, so Kimi's `reasoning_content` streams as thinking — this makes it the right provider for reaching Kimi through an OpenAI-compatible proxy (e.g. LiteLLM), where the `openai` provider's Chat adapter would drop reasoning.
|
|
496
|
-
- OpenRouter defaults `baseURL` to `https://openrouter.ai/api/v1` when it is omitted, and model names are usually provider-qualified ids such as `anthropic/claude-3.5-sonnet`. It also uses the openai-compatible adapter, so reasoning streams for reasoning models.
|
|
497
|
-
- The `openai` provider defaults to the Responses API (`api: "responses"`), which surfaces reasoning. `api: "chat"` does NOT surface reasoning (the Chat adapter drops `reasoning_content`); route such proxies through `moonshot`/`openrouter` instead.
|
|
498
|
-
- `reasoning.display` is for Bedrock Claude (Opus 4.7+ hide reasoning by default) and MiniMax; the native Anthropic API rejects it.
|
|
499
|
-
- Bedrock can rely on the AWS default credential chain when explicit credentials are not provided.
|
|
500
|
-
|
|
501
|
-
## MCP Configuration
|
|
502
|
-
|
|
503
|
-
Detailed design notes for planned OAuth-enabled remote MCP support live in [docs/mcp-oauth-design.md](docs/mcp-oauth-design.md).
|
|
504
|
-
|
|
505
|
-
`mcp.json` is stored as:
|
|
506
|
-
|
|
507
|
-
```json
|
|
508
|
-
{
|
|
509
|
-
"mcpServers": {}
|
|
510
|
-
}
|
|
511
|
-
```
|
|
512
|
-
|
|
513
|
-
At runtime, project-local `.hooman/mcp.json` files are merged on top of `~/.hooman/mcp.json` from git root to current directory. On name conflicts, the nearest `mcpServers.<name>` entry wins.
|
|
514
|
-
|
|
515
|
-
### Example stdio server
|
|
516
|
-
|
|
517
|
-
```json
|
|
518
|
-
{
|
|
519
|
-
"mcpServers": {
|
|
520
|
-
"filesystem": {
|
|
521
|
-
"type": "stdio",
|
|
522
|
-
"command": "npx",
|
|
523
|
-
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"],
|
|
524
|
-
"env": {
|
|
525
|
-
"EXAMPLE": "1"
|
|
526
|
-
},
|
|
527
|
-
"cwd": "/tmp"
|
|
528
|
-
}
|
|
529
|
-
}
|
|
530
|
-
}
|
|
531
|
-
```
|
|
532
|
-
|
|
533
|
-
### Example streamable HTTP server
|
|
534
|
-
|
|
535
|
-
```json
|
|
536
|
-
{
|
|
537
|
-
"mcpServers": {
|
|
538
|
-
"remote": {
|
|
539
|
-
"type": "streamable-http",
|
|
540
|
-
"url": "https://example.com/mcp",
|
|
541
|
-
"headers": {
|
|
542
|
-
"Authorization": "Bearer token"
|
|
543
|
-
}
|
|
544
|
-
}
|
|
545
|
-
}
|
|
546
|
-
}
|
|
547
|
-
```
|
|
548
|
-
|
|
549
|
-
### Example OAuth-capable remote server
|
|
550
|
-
|
|
551
|
-
```json
|
|
552
|
-
{
|
|
553
|
-
"mcpServers": {
|
|
554
|
-
"linear": {
|
|
555
|
-
"type": "streamable-http",
|
|
556
|
-
"url": "https://example.com/mcp",
|
|
557
|
-
"oauth": {
|
|
558
|
-
"enabled": true,
|
|
559
|
-
"clientId": "optional-pre-registered-client",
|
|
560
|
-
"scopes": ["read", "write"],
|
|
561
|
-
"callbackPort": 19876
|
|
562
|
-
}
|
|
563
|
-
}
|
|
564
|
-
}
|
|
565
|
-
}
|
|
566
|
-
```
|
|
567
|
-
|
|
568
|
-
### How the client identity is established
|
|
569
|
-
|
|
570
|
-
When authorizing a remote server, the MCP SDK needs a `client_id`. Hooman resolves one in this order:
|
|
571
|
-
|
|
572
|
-
1. **Pre-registered client** — if `oauth.clientId` (and optionally `clientSecret`) is set, it is used as-is and no registration happens.
|
|
573
|
-
2. **Dynamic Client Registration (DCR)** — if the auth server advertises a `registration_endpoint`, Hooman registers a client on the fly. The redirect URI it registers is reused on later authorizations (persisted in `~/.hooman/mcp-oauth.json`), so keep it stable — set `oauth.callbackPort` or `oauth.redirectUri` if a server pins the redirect.
|
|
574
|
-
3. **Client ID Metadata Document (CIMD / SEP-991)** — some servers (e.g. Slack) support neither a static client nor DCR, and instead advertise `client_id_metadata_document_supported: true`. For these, the client presents an HTTPS URL that hosts a JSON metadata document; that URL becomes the `client_id`. Hooman sends `oauth.clientMetadataUrl` (falling back to a bundled default) whenever the server supports it.
|
|
575
|
-
|
|
576
|
-
If a server supports none of these, authorization fails with `Incompatible auth server: does not support dynamic client registration` — supply a `clientId` or `clientMetadataUrl`.
|
|
577
|
-
|
|
578
|
-
### Hosting a CIMD document (GitHub Pages)
|
|
579
|
-
|
|
580
|
-
The metadata document is a static JSON file served over HTTPS. A copy ships in this repo at [`docs/oauth/client-metadata.json`](docs/oauth/client-metadata.json) and is published via GitHub Pages at `https://vaibhavpandey.com/hooman/oauth/client-metadata.json`, which is the default `clientMetadataUrl`.
|
|
581
|
-
|
|
582
|
-
Requirements when hosting your own:
|
|
583
|
-
|
|
584
|
-
- The URL must be **HTTPS with a non-root path** (a bare domain is rejected).
|
|
585
|
-
- The document's own `client_id` field must equal the hosted URL **exactly** (self-referential).
|
|
586
|
-
- `redirect_uris` must include Hooman's loopback callback path `/mcp/oauth/callback`. Per RFC 8252 the loopback port is matched flexibly, so list the port-less hosts (`http://127.0.0.1/mcp/oauth/callback` and `http://localhost/mcp/oauth/callback`).
|
|
587
|
-
- `token_endpoint_auth_method` is `"none"` (public client — the document is public and holds no secrets).
|
|
588
|
-
|
|
589
|
-
Override the default per server:
|
|
590
|
-
|
|
591
|
-
```json
|
|
592
|
-
{
|
|
593
|
-
"mcpServers": {
|
|
594
|
-
"slack": {
|
|
595
|
-
"type": "streamable-http",
|
|
596
|
-
"url": "https://mcp.slack.com/mcp",
|
|
597
|
-
"oauth": {
|
|
598
|
-
"enabled": true,
|
|
599
|
-
"clientMetadataUrl": "https://vaibhavpandey.com/hooman/oauth/client-metadata.json"
|
|
600
|
-
}
|
|
601
|
-
}
|
|
602
|
-
}
|
|
603
|
-
}
|
|
604
|
-
```
|
|
605
|
-
|
|
606
|
-
### Example SSE server
|
|
607
|
-
|
|
608
|
-
```json
|
|
609
|
-
{
|
|
610
|
-
"mcpServers": {
|
|
611
|
-
"legacy": {
|
|
612
|
-
"type": "sse",
|
|
613
|
-
"url": "https://example.com/sse",
|
|
614
|
-
"headers": {
|
|
615
|
-
"Authorization": "Bearer token"
|
|
616
|
-
}
|
|
617
|
-
}
|
|
618
|
-
}
|
|
619
|
-
}
|
|
620
|
-
```
|
|
621
|
-
|
|
622
|
-
## MCP Notes
|
|
623
|
-
|
|
624
|
-
- MCP server `instructions` from the protocol `initialize` response are appended to Hooman's system prompt, after local `instructions.md` and session-specific prompt overrides.
|
|
625
|
-
- Hooman reads these instructions automatically from connected MCP servers when building the agent.
|
|
626
|
-
- Remote MCP OAuth helpers are available via:
|
|
627
|
-
- `hooman mcp auth <server>`
|
|
628
|
-
- `hooman mcp logout <server>`
|
|
629
|
-
- `hooman mcp auth-status`
|
|
630
|
-
- `hooman daemon` subscribes to MCP servers that advertise the experimental `hooman/channel` capability (always on; there is no opt-out flag).
|
|
631
|
-
- Hooman also reads `hooman/user`, `hooman/session`, and `hooman/thread` capability paths so daemon turns preserve origin metadata from the source channel.
|
|
632
|
-
- When a matching notification is received, Hooman uses `params.content` as the prompt if it is a string; otherwise it JSON-stringifies the notification params and sends that to the agent.
|
|
633
|
-
- Daemon mode processes notifications sequentially and reuses the same agent session over time.
|
|
634
|
-
- Tool calls from daemon turns are no longer blanket auto-approved: if the originating MCP server supports `hooman/channel/permission`, Hooman relays a remote approval request back to that source; otherwise the tool call is denied.
|
|
635
|
-
- `exec`, `chat`, and `daemon` accept `--yolo` to bypass those approval paths and allow all tools without prompting or relay.
|
|
636
|
-
|
|
637
|
-
## Skills
|
|
638
|
-
|
|
639
|
-
Skills are installed under:
|
|
640
|
-
|
|
641
|
-
```text
|
|
642
|
-
~/.hooman/skills
|
|
643
|
-
```
|
|
644
|
-
|
|
645
|
-
At runtime, Hooman uses the Strands `AgentSkills` plugin to load:
|
|
646
|
-
|
|
647
|
-
- bundled built-in skills shipped with Hooman
|
|
648
|
-
- user-installed skills under `~/.hooman/skills`
|
|
40
|
+
## Features
|
|
649
41
|
|
|
650
|
-
|
|
42
|
+
- Multiple LLM providers: `anthropic`, `azure`, `bedrock`, `google`, `groq`, `minimax`, `moonshot`, `ollama`, `openai`, `openrouter`, `xai` — see [Models](https://vaibhavpandey.com/hooman/guides/configuration/models/)
|
|
43
|
+
- MCP server support (`stdio`, `streamable-http`, `sse`) with OAuth (DCR + CIMD) and channel-driven automation via `hooman daemon` — see [MCP](https://vaibhavpandey.com/hooman/guides/mcp/)
|
|
44
|
+
- Runtime [Skills](https://vaibhavpandey.com/hooman/guides/skills/): bundled built-ins plus a local `~/.hooman/skills` catalog
|
|
45
|
+
- Built-in read-only subagents, a ripgrep-backed `grep` tool, and an `ask_user` tool for mid-task questions — see [Tools](https://vaibhavpandey.com/hooman/guides/tools/)
|
|
46
|
+
- Context-window utilization and session-cost tracking backed by [models.dev](https://models.dev), shown live in every surface
|
|
47
|
+
- Interactive terminal UI for chat and configuration, plus a native [VS Code chat panel](https://vaibhavpandey.com/hooman/guides/vscode/)
|
|
651
48
|
|
|
652
|
-
|
|
49
|
+
See the [full documentation](https://vaibhavpandey.com/hooman/) for CLI commands, configuration layout, provider setup, and more.
|
|
653
50
|
|
|
654
|
-
|
|
51
|
+
## Related
|
|
655
52
|
|
|
656
|
-
|
|
657
|
-
- install a skill from a source string, repo, URL, or local path
|
|
658
|
-
- refresh installed skills
|
|
659
|
-
- remove installed skills with confirmation
|
|
53
|
+
**Looking for a focused web UI** for chat and agent configuration with a lighter surface on top of the same stack? See [**Zero**](https://github.com/vaibhavpandeyvpz/zero) — [README](https://github.com/vaibhavpandeyvpz/zero#readme).
|
|
660
54
|
|
|
661
55
|
## Development
|
|
662
56
|
|
|
663
|
-
Install dependencies:
|
|
664
|
-
|
|
665
57
|
```bash
|
|
666
58
|
npm install
|
|
59
|
+
npm run dev -- --help # run the CLI with tsx
|
|
60
|
+
npm run typecheck # tsc --noEmit
|
|
61
|
+
npm run build # tsc + copy bundled assets to dist/
|
|
667
62
|
```
|
|
668
63
|
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
```bash
|
|
672
|
-
npm run dev -- --help
|
|
673
|
-
```
|
|
674
|
-
|
|
675
|
-
Run typecheck:
|
|
676
|
-
|
|
677
|
-
```bash
|
|
678
|
-
npm run typecheck
|
|
679
|
-
```
|
|
680
|
-
|
|
681
|
-
Build the project:
|
|
682
|
-
|
|
683
|
-
```bash
|
|
684
|
-
npm run build
|
|
685
|
-
```
|
|
686
|
-
|
|
687
|
-
After making any code change, run both verification steps:
|
|
688
|
-
|
|
689
|
-
```bash
|
|
690
|
-
npm run typecheck
|
|
691
|
-
npm run build
|
|
692
|
-
```
|
|
64
|
+
After making any code change, run both `npm run typecheck` and `npm run build`. See [`AGENTS.md`](AGENTS.md) for the full repository layout and contributor notes, and [Development](https://vaibhavpandey.com/hooman/development/) in the docs for the release workflow.
|
|
693
65
|
|
|
694
66
|
## License
|
|
695
67
|
|
|
696
|
-
MIT. See `LICENSE
|
|
68
|
+
MIT. See [`LICENSE`](LICENSE).
|