hoomanjs 1.40.1 → 1.41.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 +50 -3
- package/dist/acp/acp-agent.d.ts +16 -3
- package/dist/acp/acp-agent.js +371 -177
- 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 -1
- 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 +65 -24
- 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 -1
- package/dist/chat/index.js +1 -3
- 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 +13 -10
- package/dist/cli.js.map +1 -1
- package/dist/core/agent/index.d.ts +3 -0
- package/dist/core/agent/index.js +11 -6
- package/dist/core/agent/index.js.map +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 +30 -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/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/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 +44 -0
- package/dist/core/models/types.js +15 -0
- 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 -2
- package/dist/core/modes/definitions.js.map +1 -1
- package/dist/core/prompts/harness/behaviour.md +3 -15
- package/dist/core/prompts/harness/communication.md +3 -16
- package/dist/core/prompts/harness/execution.md +6 -13
- package/dist/core/prompts/harness/guardrails.md +6 -12
- package/dist/core/prompts/static/ask-user.md +7 -0
- package/dist/core/prompts/static/daemon.md +4 -18
- package/dist/core/prompts/static/environment.md +2 -7
- package/dist/core/prompts/static/fetch.md +4 -30
- package/dist/core/prompts/static/filesystem.md +1 -1
- package/dist/core/prompts/static/identity.md +4 -19
- package/dist/core/prompts/static/planning.md +1 -9
- package/dist/core/prompts/static/subagents.md +4 -29
- package/dist/core/prompts/static/thinking.md +4 -24
- package/dist/core/prompts/static/todo.md +6 -32
- package/dist/core/prompts/system.js +5 -4
- 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/lazy-session-manager.js +0 -2
- package/dist/core/sessions/lazy-session-manager.js.map +1 -1
- 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-channels/SKILL.md +11 -148
- package/dist/core/skills/built-in/hooman-channels/channels.md +117 -0
- package/dist/core/skills/built-in/hooman-coding/SKILL.md +49 -44
- package/dist/core/skills/built-in/hooman-coding/debugging.md +26 -0
- package/dist/core/skills/built-in/hooman-coding/new-project.md +23 -0
- package/dist/core/skills/built-in/hooman-config/SKILL.md +19 -257
- package/dist/core/skills/built-in/hooman-config/providers.md +171 -0
- package/dist/core/skills/built-in/hooman-config/search.md +39 -0
- package/dist/core/skills/built-in/hooman-mcp/SKILL.md +22 -153
- package/dist/core/skills/built-in/hooman-skills/SKILL.md +11 -147
- package/dist/core/skills/built-in/hooman-skills/authoring.md +80 -0
- 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 -2
- package/dist/core/state/tool-approvals.js.map +1 -1
- package/dist/core/tools/ask-user.d.ts +38 -0
- package/dist/core/tools/ask-user.js +62 -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 -1
- package/dist/core/tools/index.js +1 -1
- 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/sleep.js +1 -1
- package/dist/core/tools/sleep.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/index.d.ts +1 -1
- package/dist/daemon/index.js +1 -11
- package/dist/daemon/index.js.map +1 -1
- 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 +5 -5
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/dist/core/models/reasoning-effort.js.map +0 -1
- package/dist/core/prompts/static/bye.md +0 -15
- package/dist/core/prompts/static/sleep.md +0 -20
- package/dist/core/state/exit-request.d.ts +0 -14
- package/dist/core/state/exit-request.js +0 -16
- package/dist/core/state/exit-request.js.map +0 -1
- package/dist/core/tools/bye.d.ts +0 -4
- package/dist/core/tools/bye.js +0 -23
- package/dist/core/tools/bye.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
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# Hooman Providers And LLMs Reference
|
|
2
|
+
|
|
3
|
+
Detailed provider-specific options for `~/.hooman/config.json` `providers` and `llms`.
|
|
4
|
+
|
|
5
|
+
## LLMs array
|
|
6
|
+
|
|
7
|
+
Each element of `llms` has:
|
|
8
|
+
|
|
9
|
+
- `name`: non-empty label for this entry.
|
|
10
|
+
- `provider`: provider reference name. It must match one of the entries in top-level `providers`.
|
|
11
|
+
- `options.model`: model id passed to the resolved runtime provider.
|
|
12
|
+
- `options.temperature`: optional normalized temperature override.
|
|
13
|
+
- `options.maxTokens`: optional normalized output token limit.
|
|
14
|
+
- `default`: boolean; mark one entry `"default": true` for the active model.
|
|
15
|
+
- `billing`: optional billing metadata used for context-window utilization and session-cost display. When present, `billing.name` is required — the model identifier looked up on models.dev (defaults to `options.model` when `billing` is omitted). Optional overrides: `billing.context` (context window size in tokens) and `billing.costs` (USD per million tokens: required `"input/m"` and `"output/m"`, optional `"cache/m"` for cached-input reads). Anything not provided is resolved from the models.dev catalog; when neither source resolves, context usage and cost are simply not shown.
|
|
16
|
+
|
|
17
|
+
Example `billing` block:
|
|
18
|
+
|
|
19
|
+
```json
|
|
20
|
+
{
|
|
21
|
+
"name": "Haiku 4.5",
|
|
22
|
+
"provider": "LiteLLM Anthropic",
|
|
23
|
+
"billing": {
|
|
24
|
+
"name": "claude-haiku-4.5",
|
|
25
|
+
"context": 200000,
|
|
26
|
+
"costs": { "input/m": 1, "cache/m": 0.1, "output/m": 5 }
|
|
27
|
+
},
|
|
28
|
+
"options": { "model": "claude-haiku-4.5" },
|
|
29
|
+
"default": true
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Providers array
|
|
34
|
+
|
|
35
|
+
Each element of `providers` has:
|
|
36
|
+
|
|
37
|
+
- `name`: non-empty reference name used by `llms[].provider`.
|
|
38
|
+
- `provider`: runtime provider id such as `"openai"`, `"bedrock"`, or `"ollama"`.
|
|
39
|
+
- `options`: provider-specific shared settings such as API keys, base URL, headers, region, or AWS credentials.
|
|
40
|
+
|
|
41
|
+
Supported `providers[].provider` values:
|
|
42
|
+
|
|
43
|
+
```json
|
|
44
|
+
[
|
|
45
|
+
"anthropic",
|
|
46
|
+
"azure",
|
|
47
|
+
"bedrock",
|
|
48
|
+
"google",
|
|
49
|
+
"groq",
|
|
50
|
+
"minimax",
|
|
51
|
+
"moonshot",
|
|
52
|
+
"ollama",
|
|
53
|
+
"openai",
|
|
54
|
+
"openrouter",
|
|
55
|
+
"xai"
|
|
56
|
+
]
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Common shape:
|
|
60
|
+
|
|
61
|
+
```json
|
|
62
|
+
{
|
|
63
|
+
"providers": [
|
|
64
|
+
{
|
|
65
|
+
"name": "Anthropic",
|
|
66
|
+
"provider": "anthropic",
|
|
67
|
+
"options": {
|
|
68
|
+
"apiKey": "..."
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
],
|
|
72
|
+
"llms": [
|
|
73
|
+
{
|
|
74
|
+
"name": "Claude Sonnet",
|
|
75
|
+
"provider": "Anthropic",
|
|
76
|
+
"options": {
|
|
77
|
+
"model": "claude-sonnet-4-20250514",
|
|
78
|
+
"temperature": 0.2,
|
|
79
|
+
"maxTokens": 4096
|
|
80
|
+
},
|
|
81
|
+
"default": true
|
|
82
|
+
}
|
|
83
|
+
]
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Provider notes
|
|
88
|
+
|
|
89
|
+
- `anthropic`: provider `options` support `apiKey`, optional `baseURL`, optional `headers`, and optional `reasoning` (an object with optional `effort` — `"minimal"`, `"low"`, `"medium"`, `"high"` — and optional `display` — `"summarized"` or `"omitted"`). Providing `reasoning` enables extended thinking (sent as `thinking: { type: "enabled", budget_tokens }`); `effort` defaults to `"medium"` and maps to an explicit budget (`minimal`→1024, `low`→2048, `medium`→4096, `high`→8192). When thinking is enabled Hooman drops any custom `temperature` (Anthropic requires it unset/`1`). `display` is for Bedrock Claude (via an Anthropic-compatible proxy) and MiniMax only: newer Bedrock Claude models (e.g. Opus 4.7+) hide reasoning by default and reject `type: "enabled"`, so set `display: "summarized"` to reveal reasoning — this switches the request to `thinking: { type: "adaptive", display }` with `output_config.effort` (`minimal`→`low`, else passthrough). Do NOT set `display` for the native Anthropic API (api.anthropic.com); it rejects `adaptive`/`display`/`output_config`. Omit `reasoning` to keep thinking off. LLM `options` support `model`, `temperature`, and `maxTokens`.
|
|
90
|
+
- `azure`: provider `options` support optional `resourceName`, optional `baseURL`, optional `apiKey`, optional `headers`, optional `apiVersion`, optional `useDeploymentBasedUrls`, and optional `reasoning` (an object with optional `effort` — `"minimal"`, `"low"`, `"medium"`, `"high"` — and optional `summary` — `"auto"`, `"concise"`, `"detailed"`, `"none"`). `reasoning` uses the Azure OpenAI Responses API; only reasoning-capable deployments honor it. LLM `options` support `model`, `temperature`, and `maxTokens`. The `model` value should be your Azure deployment name.
|
|
91
|
+
- `bedrock`: provider `options` support `region`, `accessKeyId`, `secretAccessKey`, `sessionToken`, optional `apiKey`, and optional `reasoning` (an object with optional `effort` and optional `display` — `"summarized"` or `"omitted"`). Providing `reasoning` enables extended thinking on supported models (e.g. Claude); because Bedrock's Converse API requires a budget, `effort` (default `"medium"`) maps to `budget_tokens` (`minimal`→1024, `low`→2048, `medium`→4096, `high`→8192). Ensure the LLM `maxTokens` exceeds the budget. Newer Bedrock Claude (e.g. Opus 4.7+) hide reasoning by default and reject `type: "enabled"`; set `display: "summarized"` to reveal it — this switches to `thinking: { type: "adaptive", display }` with `output_config.effort` (`minimal`→`low`, else passthrough) sent via `additionalRequestFields`. LLM `options` support `model`, `temperature`, and `maxTokens`.
|
|
92
|
+
- `google`: provider `options` support `apiKey` and optional `reasoning` (an object with optional `effort`). Setting `reasoning.effort` enables Gemini thinking with a dynamic budget (`thinkingConfig: { includeThoughts: true, thinkingBudget: -1 }`). LLM `options` support `model`, `temperature`, and `maxTokens` (Hooman maps this to the Google SDK's `maxOutputTokens` internally).
|
|
93
|
+
- `groq`: provider `options` support `apiKey`, optional `baseURL`, optional `headers`, and optional `reasoning` (an object with optional `effort`). `reasoning.effort` maps to Groq's `reasoning_effort` (`minimal`→`low`) and streams reasoning via `reasoning_format: "parsed"`. Only reasoning models honor it. LLM `options` support `model`, `temperature`, and `maxTokens`.
|
|
94
|
+
- `minimax`: provider `options` support `apiKey`, optional `headers`, and optional `reasoning` (an object with optional `effort` — `"minimal"`, `"low"`, `"medium"`, `"high"` — and optional `display` — `"summarized"` or `"omitted"`). Providing `reasoning` enables thinking, normalized to MiniMax's `thinking: { type: "adaptive", budget_tokens }`; `effort` defaults to `"medium"` and maps to an explicit budget (`minimal`→1024, `low`→2048, `medium`→4096, `high`→8192). Setting `display` switches to `thinking: { type: "adaptive", display }` with `output_config.effort` instead of a budget. Omit `reasoning` to keep thinking off. Hooman routes this through the Anthropic-compatible MiniMax endpoint automatically.
|
|
95
|
+
- `moonshot`: provider `options` support `apiKey`, optional `baseURL`, optional `headers`, and optional `reasoning` (an object with optional `effort`). Setting `reasoning.effort` enables Kimi thinking (`thinking: { type: "enabled" }`). Served through the reasoning-aware openai-compatible adapter, so Kimi's `reasoning_content` is surfaced as thinking. When `baseURL` is omitted, Hooman defaults it to `https://api.moonshot.ai/v1`. To reach Kimi through an OpenAI-compatible proxy (e.g. LiteLLM), use this provider with `baseURL` set to the proxy's `/v1` endpoint — the `openai` provider's Chat adapter would otherwise drop Kimi's reasoning.
|
|
96
|
+
- `ollama`: provider `options` support optional `baseURL` and optional `reasoning` (an object with optional `effort`). Setting `reasoning.effort` enables thinking, mapped to Ollama's `think` level (`minimal`/`low`→`"low"`, `medium`→`"medium"`, `high`→`"high"`). LLM `options` support `model`, `temperature`, and `maxTokens`.
|
|
97
|
+
- `openai`: provider `options` support `apiKey`, optional `baseURL`, optional `headers`, optional `api` (`"responses"` or `"chat"`, defaults to `"responses"`), and optional `reasoning` (an object with optional `effort` — `"minimal"`, `"low"`, `"medium"`, `"high"` — and optional `summary` — `"auto"` (default), `"concise"`, `"detailed"`, `"none"`). LLM `options` support `model`, `temperature`, and `maxTokens`. Use `"responses"` (the default) to surface model reasoning/thinking; set `"chat"` for OpenAI-compatible endpoints/proxies that do not implement the Responses API. Reasoning summaries stream only on the Responses API, and some models (e.g. GPT-5) require `reasoning.effort` of `"medium"` or higher to emit them; set `reasoning.summary` to `"none"` for non-reasoning models that reject the `reasoning` parameter. Note: `"chat"` mode does NOT surface reasoning (the Chat adapter drops `reasoning_content`); for a proxy that only exposes thinking via chat `reasoning_content` (e.g. Kimi/Moonshot), use the `moonshot` or `openrouter` provider instead. Also note the Responses API may return an empty reasoning item for non-OpenAI backends behind a proxy (they won't stream summary text).
|
|
98
|
+
- `openrouter`: provider `options` support `apiKey`, optional `baseURL`, optional `headers`, and optional `reasoning` (an object with optional `effort`). Served through the reasoning-aware openai-compatible adapter, so `reasoning`/`reasoning_content` deltas are surfaced as thinking. `reasoning.effort` maps to `reasoning_effort`, which OpenRouter normalizes for reasoning models. LLM `options` support `model`, `temperature`, and `maxTokens`. The `model` value is usually a provider-qualified OpenRouter model id such as `anthropic/claude-3.5-sonnet`.
|
|
99
|
+
- `xai`: provider `options` support `apiKey`, optional `baseURL`, optional `headers`, and optional `reasoning` (an object with optional `effort`). `reasoning.effort` maps to xAI's `reasoning_effort` (`low`/`high`; `minimal`/`low`→`low`, `medium`/`high`→`high`). Only reasoning models (e.g. grok-3-mini) honor it. LLM `options` support `model`, `temperature`, and `maxTokens`.
|
|
100
|
+
|
|
101
|
+
## Examples
|
|
102
|
+
|
|
103
|
+
```json
|
|
104
|
+
{
|
|
105
|
+
"providers": [
|
|
106
|
+
{
|
|
107
|
+
"name": "MiniMax",
|
|
108
|
+
"provider": "minimax",
|
|
109
|
+
"options": {
|
|
110
|
+
"apiKey": "..."
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"name": "Kimi",
|
|
115
|
+
"provider": "moonshot",
|
|
116
|
+
"options": {
|
|
117
|
+
"apiKey": "..."
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
],
|
|
121
|
+
"llms": [
|
|
122
|
+
{
|
|
123
|
+
"name": "MiniMax M3",
|
|
124
|
+
"provider": "MiniMax",
|
|
125
|
+
"options": {
|
|
126
|
+
"model": "MiniMax-M3"
|
|
127
|
+
},
|
|
128
|
+
"default": true
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
"name": "Kimi K2.7 Code",
|
|
132
|
+
"provider": "Kimi",
|
|
133
|
+
"options": {
|
|
134
|
+
"model": "kimi-k2.7-code"
|
|
135
|
+
},
|
|
136
|
+
"default": false
|
|
137
|
+
}
|
|
138
|
+
]
|
|
139
|
+
}
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
```json
|
|
143
|
+
{
|
|
144
|
+
"providers": [
|
|
145
|
+
{
|
|
146
|
+
"name": "Bedrock",
|
|
147
|
+
"provider": "bedrock",
|
|
148
|
+
"options": {
|
|
149
|
+
"region": "us-west-2",
|
|
150
|
+
"accessKeyId": "AKIA...",
|
|
151
|
+
"secretAccessKey": "...",
|
|
152
|
+
"sessionToken": "..."
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
],
|
|
156
|
+
"llms": [
|
|
157
|
+
{
|
|
158
|
+
"name": "Claude Sonnet",
|
|
159
|
+
"provider": "Bedrock",
|
|
160
|
+
"options": {
|
|
161
|
+
"model": "anthropic.claude-sonnet-4-20250514-v1:0",
|
|
162
|
+
"temperature": 0.2,
|
|
163
|
+
"maxTokens": 4096
|
|
164
|
+
},
|
|
165
|
+
"default": true
|
|
166
|
+
}
|
|
167
|
+
]
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
When editing `providers` or `llms`, preserve unrelated entries and API keys unless the user asks to remove or replace them.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Hooman Search Config Reference
|
|
2
|
+
|
|
3
|
+
`search.provider` must be `"brave"`, `"exa"`, `"firecrawl"`, `"litellm"`, `"serper"`, or `"tavily"`.
|
|
4
|
+
|
|
5
|
+
```json
|
|
6
|
+
{
|
|
7
|
+
"search": {
|
|
8
|
+
"enabled": true,
|
|
9
|
+
"provider": "brave",
|
|
10
|
+
"brave": {
|
|
11
|
+
"apiKey": "..."
|
|
12
|
+
},
|
|
13
|
+
"exa": {
|
|
14
|
+
"apiKey": "..."
|
|
15
|
+
},
|
|
16
|
+
"firecrawl": {
|
|
17
|
+
"apiKey": "..."
|
|
18
|
+
},
|
|
19
|
+
"litellm": {
|
|
20
|
+
"baseURL": "https://your-litellm-host",
|
|
21
|
+
"apiKey": "sk-...",
|
|
22
|
+
"tool": "perplexity-search"
|
|
23
|
+
},
|
|
24
|
+
"serper": {
|
|
25
|
+
"apiKey": "..."
|
|
26
|
+
},
|
|
27
|
+
"tavily": {
|
|
28
|
+
"apiKey": "..."
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Notes:
|
|
35
|
+
|
|
36
|
+
- Hooman calls Exa through the official **`exa-js`** SDK ([Exa search API](https://exa.ai/docs/reference/search-api-guide-for-coding-agents)).
|
|
37
|
+
- Hooman calls Firecrawl through **`@mendable/firecrawl-js`** ([Firecrawl search API](https://docs.firecrawl.dev/api-reference/endpoint/search)).
|
|
38
|
+
- The `litellm` provider calls a [LiteLLM](https://docs.litellm.ai/docs/search/) proxy's Perplexity-compatible `POST {baseURL}/v1/search/{tool}` endpoint using the virtual key as `apiKey`. It requires `baseURL`, `apiKey`, and `tool` (the `search_tool_name` registered on the proxy). The actual upstream search provider (perplexity, tavily, exa, brave, etc.) is chosen by the proxy config, so no provider API key is stored in Hooman.
|
|
39
|
+
- Defaults: `enabled: false`, `provider: "brave"`, all provider API keys unset.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: hooman-mcp
|
|
3
|
-
description: Read and update Hooman's mcp.json
|
|
3
|
+
description: Read and update Hooman's ~/.hooman/mcp.json. Use when the user asks to list, add, update, remove, or configure MCP servers for Hooman — stdio commands, streamable-http or SSE URLs, env vars, and auth headers. For event-driven channel servers (cron, Slack, Telegram, WhatsApp, Jira) use hooman-channels instead; for config.json settings use hooman-config.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Hooman MCP
|
|
@@ -9,69 +9,25 @@ Use this skill when the user asks you to inspect or change Hooman's MCP server c
|
|
|
9
9
|
|
|
10
10
|
## Source Of Truth
|
|
11
11
|
|
|
12
|
-
- Hooman MCP servers are stored in `~/.hooman/mcp.json
|
|
13
|
-
-
|
|
14
|
-
- Each key under `mcpServers` is the server name.
|
|
15
|
-
- Each value is a transport object.
|
|
16
|
-
|
|
17
|
-
Minimal valid file:
|
|
18
|
-
|
|
19
|
-
```json
|
|
20
|
-
{
|
|
21
|
-
"mcpServers": {}
|
|
22
|
-
}
|
|
23
|
-
```
|
|
12
|
+
- Hooman MCP servers are stored in `~/.hooman/mcp.json`: one top-level `mcpServers` object where each key is a server name and each value is a transport object.
|
|
13
|
+
- Minimal valid file: `{"mcpServers": {}}`.
|
|
24
14
|
|
|
25
15
|
## Read/Write Rules
|
|
26
16
|
|
|
27
17
|
1. Read `~/.hooman/mcp.json` before changing it. If it does not exist, create it with `{"mcpServers": {}}`.
|
|
28
18
|
2. Preserve existing servers unless the user explicitly asks to replace or delete them.
|
|
29
|
-
3. Make the smallest JSON edit needed: add, update, or remove one server entry.
|
|
30
|
-
4.
|
|
31
|
-
5.
|
|
32
|
-
6.
|
|
33
|
-
7. Any change to `mcp.json` requires restarting the running Hooman agent/session before MCP server tools or instructions change.
|
|
34
|
-
|
|
35
|
-
## File Shape
|
|
36
|
-
|
|
37
|
-
```json
|
|
38
|
-
{
|
|
39
|
-
"mcpServers": {
|
|
40
|
-
"server-name": {
|
|
41
|
-
"type": "stdio",
|
|
42
|
-
"command": "npx",
|
|
43
|
-
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"],
|
|
44
|
-
"env": {
|
|
45
|
-
"TOKEN": "..."
|
|
46
|
-
},
|
|
47
|
-
"cwd": "/optional/working/directory"
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
Supported transport `type` values:
|
|
19
|
+
3. Make the smallest JSON edit needed: add, update, or remove one server entry. Keep JSON valid; comments are not supported.
|
|
20
|
+
4. Treat `env` and `headers` as potentially secret-bearing maps. Do not expose or rewrite secrets unnecessarily.
|
|
21
|
+
5. Use stable, descriptive server names such as `filesystem`, `slack`, `jira`, or `github`.
|
|
22
|
+
6. Any change to `mcp.json` requires restarting the running Hooman agent/session before MCP server tools or instructions change.
|
|
54
23
|
|
|
55
|
-
|
|
56
|
-
["stdio", "streamable-http", "sse"]
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
## Stdio Servers
|
|
60
|
-
|
|
61
|
-
Use `stdio` for local subprocess-based MCP servers.
|
|
62
|
-
|
|
63
|
-
Required:
|
|
64
|
-
|
|
65
|
-
- `type`: `"stdio"`
|
|
66
|
-
- `command`: executable command, for example `npx`, `node`, `python`, `uvx`, or an absolute binary path
|
|
24
|
+
## Transports
|
|
67
25
|
|
|
68
|
-
|
|
26
|
+
Supported `type` values: `"stdio"`, `"streamable-http"`, `"sse"`.
|
|
69
27
|
|
|
70
|
-
|
|
71
|
-
- `env`: environment variables as string key/value pairs
|
|
72
|
-
- `cwd`: working directory for the server process
|
|
28
|
+
### Stdio (local subprocess servers)
|
|
73
29
|
|
|
74
|
-
|
|
30
|
+
Required: `type: "stdio"` and `command` (e.g. `npx`, `node`, `python`, `uvx`, or an absolute binary path). Optional: `args` (string array), `env` (string map), `cwd` (working directory).
|
|
75
31
|
|
|
76
32
|
```json
|
|
77
33
|
{
|
|
@@ -81,45 +37,17 @@ Example:
|
|
|
81
37
|
"command": "npx",
|
|
82
38
|
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"],
|
|
83
39
|
"env": {
|
|
84
|
-
"
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
Example with `cwd`:
|
|
92
|
-
|
|
93
|
-
```json
|
|
94
|
-
{
|
|
95
|
-
"mcpServers": {
|
|
96
|
-
"local-app": {
|
|
97
|
-
"type": "stdio",
|
|
98
|
-
"command": "node",
|
|
99
|
-
"args": ["dist/mcp-server.js"],
|
|
100
|
-
"cwd": "/Users/me/project",
|
|
101
|
-
"env": {
|
|
102
|
-
"API_KEY": "..."
|
|
103
|
-
}
|
|
40
|
+
"TOKEN": "..."
|
|
41
|
+
},
|
|
42
|
+
"cwd": "/optional/working/directory"
|
|
104
43
|
}
|
|
105
44
|
}
|
|
106
45
|
}
|
|
107
46
|
```
|
|
108
47
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
Use `streamable-http` for modern remote HTTP MCP servers.
|
|
48
|
+
### Streamable HTTP (modern remote servers)
|
|
112
49
|
|
|
113
|
-
Required:
|
|
114
|
-
|
|
115
|
-
- `type`: `"streamable-http"`
|
|
116
|
-
- `url`: full HTTP or HTTPS URL
|
|
117
|
-
|
|
118
|
-
Optional:
|
|
119
|
-
|
|
120
|
-
- `headers`: HTTP headers as string key/value pairs
|
|
121
|
-
|
|
122
|
-
Example:
|
|
50
|
+
Required: `type: "streamable-http"` and `url` (full HTTP/HTTPS URL). Optional: `headers` (string map).
|
|
123
51
|
|
|
124
52
|
```json
|
|
125
53
|
{
|
|
@@ -135,77 +63,18 @@ Example:
|
|
|
135
63
|
}
|
|
136
64
|
```
|
|
137
65
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
Use `sse` only for legacy remote MCP servers that still require SSE.
|
|
141
|
-
|
|
142
|
-
Required:
|
|
66
|
+
### SSE (legacy remote servers)
|
|
143
67
|
|
|
144
|
-
- `type
|
|
145
|
-
- `url`: full HTTP or HTTPS URL
|
|
146
|
-
|
|
147
|
-
Optional:
|
|
148
|
-
|
|
149
|
-
- `headers`: HTTP headers as string key/value pairs
|
|
150
|
-
|
|
151
|
-
Example:
|
|
152
|
-
|
|
153
|
-
```json
|
|
154
|
-
{
|
|
155
|
-
"mcpServers": {
|
|
156
|
-
"legacy": {
|
|
157
|
-
"type": "sse",
|
|
158
|
-
"url": "https://example.com/sse",
|
|
159
|
-
"headers": {
|
|
160
|
-
"Authorization": "Bearer ..."
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
```
|
|
68
|
+
Same shape as `streamable-http` but with `type: "sse"`. Use only for legacy remote MCP servers that still require SSE.
|
|
166
69
|
|
|
167
70
|
## Common Edits
|
|
168
71
|
|
|
169
|
-
Add a server by inserting a new entry under `mcpServers
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
{
|
|
173
|
-
"mcpServers": {
|
|
174
|
-
"github": {
|
|
175
|
-
"type": "stdio",
|
|
176
|
-
"command": "npx",
|
|
177
|
-
"args": ["-y", "@modelcontextprotocol/server-github"],
|
|
178
|
-
"env": {
|
|
179
|
-
"GITHUB_PERSONAL_ACCESS_TOKEN": "..."
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
Update a server by replacing only that server's object:
|
|
187
|
-
|
|
188
|
-
```json
|
|
189
|
-
{
|
|
190
|
-
"mcpServers": {
|
|
191
|
-
"github": {
|
|
192
|
-
"type": "stdio",
|
|
193
|
-
"command": "npx",
|
|
194
|
-
"args": ["-y", "@modelcontextprotocol/server-github"],
|
|
195
|
-
"env": {
|
|
196
|
-
"GITHUB_PERSONAL_ACCESS_TOKEN": "...",
|
|
197
|
-
"GITHUB_TOOLSETS": "repos,issues,pull_requests"
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
Delete a server by removing its key from `mcpServers`.
|
|
72
|
+
- Add a server by inserting a new entry under `mcpServers`.
|
|
73
|
+
- Update a server by replacing only that server's object (e.g. adding a key to its `env`).
|
|
74
|
+
- Delete a server by removing its key from `mcpServers`.
|
|
205
75
|
|
|
206
76
|
## Notes
|
|
207
77
|
|
|
208
78
|
- Prefer `streamable-http` over `sse` for remote servers unless the user specifically needs SSE.
|
|
209
|
-
- For bearer tokens, use `headers.Authorization`.
|
|
210
|
-
- For local subprocess secrets, use `env`.
|
|
79
|
+
- For bearer tokens, use `headers.Authorization`; for local subprocess secrets, use `env`.
|
|
211
80
|
- If a server package's README gives a specific JSON block, adapt it into the `mcpServers` object and preserve the required command, args, env, URL, and headers.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: hooman-skills
|
|
3
|
-
description: Manage Hooman skills under ~/.hooman/skills. Use when the user asks to list, search,
|
|
3
|
+
description: Manage Hooman skills under ~/.hooman/skills. Use when the user asks to list, search, install, add, create, author, update, inspect, or remove Hooman skills or SKILL.md files. Not for activating or using a skill in the current task, and not for Hooman config or MCP server changes (use hooman-config or hooman-mcp).
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Hooman Skills
|
|
@@ -9,44 +9,26 @@ Use this skill when the user asks you to inspect, install, remove, create, or ch
|
|
|
9
9
|
|
|
10
10
|
## Source Of Truth
|
|
11
11
|
|
|
12
|
-
- Hooman user-installed skills live under `~/.hooman/skills
|
|
13
|
-
- Each installed skill is a directory directly under `~/.hooman/skills`.
|
|
14
|
-
- Each skill directory must contain a `SKILL.md` file.
|
|
12
|
+
- Hooman user-installed skills live under `~/.hooman/skills`; each installed skill is a directory directly under it containing a `SKILL.md` file (for example `~/.hooman/skills/code-review/SKILL.md`).
|
|
15
13
|
- Built-in skills shipped with Hooman are separate from user-installed skills. Do not edit bundled skill files when the user means their installed skills.
|
|
16
14
|
|
|
17
|
-
|
|
15
|
+
## Reference File
|
|
18
16
|
|
|
19
|
-
|
|
20
|
-
~/.hooman/skills/
|
|
21
|
-
code-review/
|
|
22
|
-
SKILL.md
|
|
23
|
-
reference.md
|
|
24
|
-
jira-workflow/
|
|
25
|
-
SKILL.md
|
|
26
|
-
```
|
|
17
|
+
Read `authoring.md` (next to this SKILL.md) before creating a new skill, editing a `SKILL.md`, or installing by manual copy. It covers frontmatter shape, naming rules, the creation checklist, update steps, and manual install steps.
|
|
27
18
|
|
|
28
19
|
## Operating Rules
|
|
29
20
|
|
|
30
21
|
1. Use the `skills` CLI for catalog search, installs, listing, and removal when the user asks for those operations.
|
|
31
22
|
2. Run every `skills` CLI command with working directory `~/.hooman` so the OpenClaw layout maps to `~/.hooman/skills`.
|
|
32
23
|
3. Hooman discovers installed skills by scanning direct child directories under `~/.hooman/skills` for `SKILL.md`.
|
|
33
|
-
4. Preserve unrelated skill folders and files.
|
|
34
|
-
5.
|
|
35
|
-
6.
|
|
36
|
-
7.
|
|
37
|
-
8. Any skill install, removal, creation, or edit requires restarting the running Hooman agent/session before the runtime skill inventory changes.
|
|
24
|
+
4. Preserve unrelated skill folders and files; treat files inside a skill directory as user data and read before overwriting.
|
|
25
|
+
5. Never delete a skill folder unless the user explicitly asks to remove that skill.
|
|
26
|
+
6. For custom local authoring or edits, create/edit files directly under `~/.hooman/skills/<folder>`.
|
|
27
|
+
7. Any skill install, removal, creation, or edit requires restarting the running Hooman agent/session before the runtime skill inventory changes.
|
|
38
28
|
|
|
39
29
|
## Exact CLI Commands
|
|
40
30
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
Working directory:
|
|
44
|
-
|
|
45
|
-
```bash
|
|
46
|
-
mkdir -p ~/.hooman && cd ~/.hooman
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
Run the following commands from that directory. If using a shell tool that supports a working-directory option, set it to `~/.hooman` instead of relying on a previous `cd`.
|
|
31
|
+
Run from `~/.hooman` (`mkdir -p ~/.hooman && cd ~/.hooman`), or set the shell tool's working-directory option to `~/.hooman`.
|
|
50
32
|
|
|
51
33
|
List installed skills:
|
|
52
34
|
|
|
@@ -76,130 +58,12 @@ Command notes:
|
|
|
76
58
|
|
|
77
59
|
- `<source>` can be a package source accepted by the skills CLI, such as `owner/repo`, a GitHub URL, or a local path.
|
|
78
60
|
- Use `--copy` for Hooman installs so skill files are copied into `~/.hooman/skills` instead of relying on symlinks.
|
|
79
|
-
- If `list --json` fails or output is not useful,
|
|
61
|
+
- If `list --json` fails or output is not useful, list skills by inspecting `~/.hooman/skills` directly: read each direct child directory's `SKILL.md` frontmatter and report `name`, `description`, folder name, and path. Ignore directories without `SKILL.md`.
|
|
80
62
|
- After installing or removing, verify the result by checking `~/.hooman/skills/<folder>/SKILL.md`.
|
|
81
63
|
|
|
82
|
-
## SKILL.md Shape
|
|
83
|
-
|
|
84
|
-
Every `SKILL.md` should start with YAML frontmatter:
|
|
85
|
-
|
|
86
|
-
```markdown
|
|
87
|
-
---
|
|
88
|
-
name: skill-name
|
|
89
|
-
description: What this skill does and when Hooman should use it.
|
|
90
|
-
---
|
|
91
|
-
|
|
92
|
-
# Skill Title
|
|
93
|
-
|
|
94
|
-
Instructions for the agent.
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
Rules:
|
|
98
|
-
|
|
99
|
-
- `name` should be lowercase words separated by hyphens when possible.
|
|
100
|
-
- `description` should be specific and include trigger scenarios, because Hooman uses it to decide when the skill applies.
|
|
101
|
-
- Keep the main `SKILL.md` focused. Put long references in nearby files such as `reference.md` and link to them.
|
|
102
|
-
- Use relative links only inside the same skill directory.
|
|
103
|
-
|
|
104
|
-
## Listing Skills
|
|
105
|
-
|
|
106
|
-
To list installed skills without relying on CLI output:
|
|
107
|
-
|
|
108
|
-
1. Open `~/.hooman/skills`.
|
|
109
|
-
2. For each direct child directory, look for `SKILL.md`.
|
|
110
|
-
3. Read each `SKILL.md` frontmatter.
|
|
111
|
-
4. Report the frontmatter `name`, `description`, folder name, and `SKILL.md` path.
|
|
112
|
-
|
|
113
|
-
Ignore files and directories that do not contain `SKILL.md`.
|
|
114
|
-
|
|
115
|
-
## Creating A Skill Manually
|
|
116
|
-
|
|
117
|
-
Create a new skill by making a directory under `~/.hooman/skills`:
|
|
118
|
-
|
|
119
|
-
```text
|
|
120
|
-
~/.hooman/skills/<folder>/SKILL.md
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
Use a safe folder name:
|
|
124
|
-
|
|
125
|
-
- lowercase letters, numbers, and hyphens
|
|
126
|
-
- no slashes
|
|
127
|
-
- no `..`
|
|
128
|
-
- no spaces
|
|
129
|
-
|
|
130
|
-
Minimal example:
|
|
131
|
-
|
|
132
|
-
```markdown
|
|
133
|
-
---
|
|
134
|
-
name: pull-request-review
|
|
135
|
-
description: Review pull requests for correctness, maintainability, tests, and project conventions. Use when the user asks to review a PR, diff, branch, or code changes.
|
|
136
|
-
---
|
|
137
|
-
|
|
138
|
-
# Pull Request Review
|
|
139
|
-
|
|
140
|
-
When reviewing code, lead with findings ordered by severity. Focus on bugs,
|
|
141
|
-
regressions, missing tests, and maintainability risks.
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
Creation checklist:
|
|
145
|
-
|
|
146
|
-
- Clarify the skill's purpose, trigger scenarios, and expected behavior.
|
|
147
|
-
- Choose a folder name that is short, lowercase, and hyphenated.
|
|
148
|
-
- Write a specific frontmatter `description` that includes when to use the skill.
|
|
149
|
-
- Keep `SKILL.md` concise and actionable.
|
|
150
|
-
- Put longer reference material in files next to `SKILL.md`, such as `reference.md` or `examples.md`.
|
|
151
|
-
- Link supporting files with relative links.
|
|
152
|
-
- Avoid time-sensitive claims unless the skill explicitly needs them.
|
|
153
|
-
- Do not include secrets in skill files.
|
|
154
|
-
|
|
155
|
-
## Updating A Skill
|
|
156
|
-
|
|
157
|
-
To update an installed skill:
|
|
158
|
-
|
|
159
|
-
1. Locate the folder under `~/.hooman/skills`.
|
|
160
|
-
2. Read its current `SKILL.md` and any referenced files.
|
|
161
|
-
3. Make the smallest edit that satisfies the request.
|
|
162
|
-
4. Preserve frontmatter unless the user asked to rename or retarget the skill.
|
|
163
|
-
5. Keep supporting files in the same skill directory.
|
|
164
|
-
|
|
165
|
-
If changing the frontmatter `name`, consider whether the folder name should also change. Rename only when the user asks or the old folder name is clearly wrong.
|
|
166
|
-
|
|
167
|
-
## Installing By Copying Or CLI
|
|
168
|
-
|
|
169
|
-
Prefer the CLI for normal installs:
|
|
170
|
-
|
|
171
|
-
```bash
|
|
172
|
-
npx --yes skills@latest add "<source>" -y -a openclaw --copy
|
|
173
|
-
```
|
|
174
|
-
|
|
175
|
-
To install from a local skill directory manually:
|
|
176
|
-
|
|
177
|
-
1. Verify the source directory contains `SKILL.md`.
|
|
178
|
-
2. Choose a destination folder under `~/.hooman/skills`.
|
|
179
|
-
3. Copy the skill directory into that destination.
|
|
180
|
-
4. If the destination already exists, ask before replacing or merge carefully after reading both copies.
|
|
181
|
-
|
|
182
|
-
For GitHub or web sources, prefer `skills add`. Fetch or clone manually only when the user asks or the CLI cannot handle the source. After retrieval, install by copying the actual skill directory into `~/.hooman/skills`.
|
|
183
|
-
|
|
184
|
-
## Removing A Skill
|
|
185
|
-
|
|
186
|
-
To remove a skill:
|
|
187
|
-
|
|
188
|
-
1. Confirm the exact skill name or folder.
|
|
189
|
-
2. Prefer the CLI removal command:
|
|
190
|
-
|
|
191
|
-
```bash
|
|
192
|
-
npx --yes skills@latest remove "<skill-or-folder>" -y
|
|
193
|
-
```
|
|
194
|
-
|
|
195
|
-
3. Verify the folder is gone from `~/.hooman/skills`.
|
|
196
|
-
4. If manual deletion is required, verify the folder contains `SKILL.md` and delete only that folder.
|
|
197
|
-
|
|
198
|
-
Do not remove built-in Hooman skills or unrelated folders.
|
|
199
|
-
|
|
200
64
|
## Common Mistakes
|
|
201
65
|
|
|
202
66
|
- Do not create a single `~/.hooman/skills/SKILL.md`; each skill needs its own folder.
|
|
203
|
-
- Do not put installed Hooman skills under
|
|
67
|
+
- Do not put installed Hooman skills under another application's skills directory; they belong under `~/.hooman/skills`.
|
|
204
68
|
- Do not edit bundled Hooman skills when the user asked to install or update a personal skill.
|
|
205
69
|
- Do not assume a catalog result is installed. A skill is installed only when its folder exists under `~/.hooman/skills` with `SKILL.md`.
|