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
|
@@ -1,71 +1,76 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: hooman-coding
|
|
3
|
-
description: Required
|
|
3
|
+
description: Required playbook for every programming task — load before the first implementation tool call whenever you will write or edit code, fix a bug, add or upgrade dependencies, scaffold a project, or run package/build/test commands, even for one-file scripts or spikes. Covers workflow, conventions, tests, verification, security, debugging/RCA, and greenfield setup. Skip only when purely reading or explaining code with no changes planned.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Coding / Software Engineering
|
|
7
7
|
|
|
8
|
-
Act like a senior engineer: ship correct, maintainable changes that match **this** repository. Prefer **local** patterns, tooling, and conventions over generic or invented architecture—
|
|
8
|
+
Act like a senior engineer: ship correct, maintainable changes that match **this** repository. Prefer **local** patterns, tooling, and conventions over generic or invented architecture. Scope includes **any** code in this workspace—minimal or large, durable or exploratory—unless the user asked for guidance only. Treat vague requests as real engineering work: prefer an actual code change over a text-only reply, and do not refuse work solely because it is large.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
Work through every task in this order: **orient → plan → implement → verify → self-review → report**. Scale each phase to the task—a one-line fix needs seconds of orientation, not ceremony—but never skip a phase outright.
|
|
11
11
|
|
|
12
|
-
##
|
|
12
|
+
## Reference files
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
- **Dependencies**: When adding or upgrading packages, favor **latest stable** releases that are **maintained** (recent publishes, healthy issue/PR activity, clear ownership). Avoid abandoned forks and deprecated APIs unless the project already depends on them or the user directs otherwise.
|
|
16
|
-
- **Conventions**: Infer structure, naming, formatting, and architectural boundaries from existing code and project docs (`CONTRIBUTING`, linters, CI). Match the house style; do not impose a different framework or layout without a strong, stated reason.
|
|
14
|
+
Read these siblings (next to this SKILL.md) when they apply:
|
|
17
15
|
|
|
18
|
-
|
|
16
|
+
- `debugging.md` — required for bug fixes and non-obvious failures: reproduce-first discipline, hypothesis-driven debugging, bisection, RCA reporting.
|
|
17
|
+
- `new-project.md` — required when creating a project or component from scratch: stack choice, scaffolding, manifests, tooling setup.
|
|
19
18
|
|
|
20
|
-
|
|
21
|
-
- Respect the user’s scope; do not refuse work solely because it is large—confirm only when ambiguity would cause harm.
|
|
22
|
-
- **Read** surrounding code and **open a file before editing it**. Preserve public behavior unless the user asked for a change or the behavior is clearly wrong.
|
|
23
|
-
- Keep edits **narrow**, **coherent**, and easy to review. Prefer **simple** code that fully solves the problem over clever or over-generalized designs.
|
|
24
|
-
- Add abstractions only when they remove real duplication, clarify a real concept, or mirror an established local pattern.
|
|
25
|
-
- Avoid throwaway compatibility shims, placeholder re-exports, “removed” tombstones, and legacy aliases when old code can be deleted cleanly.
|
|
26
|
-
- **Comments**: do not add them by default. Add only for non-obvious constraints, invariants, workarounds, or surprising behavior.
|
|
27
|
-
- Avoid drive-by changes: no unrelated types, docstrings, formatting-only edits, new files, features, config knobs, speculative validation, feature flags, or defensive branches for impossible scenarios. Do not invent one-off helpers for hypothetical futures.
|
|
19
|
+
## Orient
|
|
28
20
|
|
|
29
|
-
|
|
21
|
+
Build real understanding before editing; this phase determines the quality of everything after it.
|
|
30
22
|
|
|
31
|
-
- **
|
|
32
|
-
-
|
|
23
|
+
- **Locate the code path**: search for the relevant symbols, then read definitions _and_ call sites—never change a signature or behavior without knowing who depends on it. Read a module's tests to learn its actual contract.
|
|
24
|
+
- **Copy the house pattern**: when adding a feature, find the closest existing sibling feature and use it as the template for structure, naming, and wiring. Infer conventions from existing code and project docs (`CONTRIBUTING`, linters, CI).
|
|
25
|
+
- **Detect the environment**: package manager from the lockfile (npm/pnpm/yarn/bun, pip/uv/poetry, …), runtime pins (`.nvmrc`, `engines`), monorepo workspace layout—run commands with the right tool in the right directory.
|
|
26
|
+
- **Research when needed**: targeted lookup of official docs, release notes, issues/PRs, migration guides, advisories. Prefer widely used, documented, actively maintained solutions and APIs.
|
|
33
27
|
|
|
34
|
-
##
|
|
28
|
+
## Plan
|
|
35
29
|
|
|
36
|
-
|
|
30
|
+
- Identify the **minimal change set** that fully solves the request, and its blast radius. Sequence multi-file edits so the tree keeps compiling: contracts/types first, then implementations, then call sites.
|
|
31
|
+
- For wide mechanical changes, convert **one instance**, verify it, then replicate the pattern.
|
|
32
|
+
- **Ambiguity protocol**: when a decision is low-risk and reversible, pick the option most consistent with the codebase, **state the assumption in your reply**, and proceed. Ask one focused question only when the answer would materially change the work or a wrong guess would cause harm.
|
|
33
|
+
- If the task reveals a deeper design problem, flag it and stay scoped—do not silently expand into a redesign.
|
|
37
34
|
|
|
38
|
-
|
|
39
|
-
2. Run **build** (compile/bundle) if applicable.
|
|
40
|
-
3. Run **tests** relevant to the change (full suite when reasonable and fast enough; otherwise the narrowest meaningful subset).
|
|
35
|
+
## Implement
|
|
41
36
|
|
|
42
|
-
|
|
37
|
+
- **Read before writing**: open a file before editing it. Preserve public behavior unless the user asked for a change or it is clearly wrong.
|
|
38
|
+
- Keep edits **narrow, coherent, and easy to review**. Prefer simple code that fully solves the problem over clever or over-generalized designs. Add abstractions only when they remove real duplication, clarify a real concept, or mirror an established local pattern.
|
|
39
|
+
- **Dependencies**: favor latest stable, maintained releases. Avoid abandoned forks and deprecated APIs unless the project already depends on them or the user directs otherwise.
|
|
40
|
+
- No drive-by changes: no unrelated types, docstrings, formatting-only edits, features, config knobs, feature flags, speculative validation, compatibility shims, or defensive branches for impossible scenarios. Delete old code cleanly instead of aliasing it.
|
|
41
|
+
- **Comments**: none by default; only for non-obvious constraints, invariants, workarounds, or surprising behavior.
|
|
42
|
+
- **Edge-case reflex**: for the paths you touched, consider empties, nulls, unicode, timezones, boundary indices, concurrency, idempotency—handle what is reachable, skip what is impossible.
|
|
43
|
+
- **Performance**: optimize only with evidence, but notice obvious N+1s or quadratic loops on hot paths you touch—fix in scope, otherwise flag.
|
|
43
44
|
|
|
44
|
-
##
|
|
45
|
+
## Verify
|
|
45
46
|
|
|
46
|
-
- **
|
|
47
|
-
-
|
|
48
|
-
-
|
|
49
|
-
|
|
50
|
-
-
|
|
47
|
+
- **Tests**: add or update unit/integration tests that lock in the behavior you changed, matching the project's existing stack, locations, and patterns—unless the user explicitly skips tests or the repo has no harness for that layer.
|
|
48
|
+
- After substantive edits, when the project provides the hooks: run **formatter**, **linter**, **build**, and tests—**narrowest meaningful check first** (the one test file, the one workspace package), full suite only when blast radius warrants and it is reasonably fast.
|
|
49
|
+
- **Never claim a check passed without running it.** If a command fails, diagnose from output before retrying; do not mask failures. Distinguish "compiles" from "works": for runtime-visible changes, prefer an actual execution or repro over reasoning that it should work.
|
|
50
|
+
|
|
51
|
+
## Self-review
|
|
51
52
|
|
|
52
|
-
|
|
53
|
+
Before reporting, reread your own diff as a reviewer would:
|
|
53
54
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
55
|
+
- leftover debug prints, unused imports, dead code, stray TODOs;
|
|
56
|
+
- naming and style inconsistent with the surrounding file;
|
|
57
|
+
- accidentally weakened types, broadened catches, or disabled checks;
|
|
58
|
+
- comments/docs now stale because behavior changed;
|
|
59
|
+
- generated artifacts, lockfiles, migrations, and shared config treated as contracts—touched only when the task required it, kept consistent.
|
|
58
60
|
|
|
59
|
-
|
|
61
|
+
## Security and correctness
|
|
62
|
+
|
|
63
|
+
- **Credentials**: keep secrets out of source. Use environment variables, per-environment local files the stack already uses (e.g. `.env.local`), or documented secrets paths—**`.gitignore`d** so keys never get committed—wired through the stack's normal config loader. Never embed keys in code, fixtures, or checked-in JSON unless the user explicitly demands it. If credentials appear exposed, warn **without repeating** the secret.
|
|
64
|
+
- Stay alert to injection (command, SQL), XSS, path traversal, unsafe deserialization, authz mistakes, and secret leakage in code, logs, and errors.
|
|
65
|
+
- Prefer structured parsers and APIs over fragile string parsing. Do not swallow errors with broad catches, silent fallbacks, or weakened checks unless the codebase establishes that pattern for a good reason.
|
|
60
66
|
|
|
61
67
|
## Project hygiene
|
|
62
68
|
|
|
63
|
-
- Work on the **current** working tree; do not revert user changes unless asked.
|
|
64
|
-
-
|
|
65
|
-
- Do **not** create commits, push, amend, force-push, or alter remotes unless the user explicitly requests it.
|
|
66
|
-
- Never put secrets in commits, patches, or user-facing text; align with **`.gitignore`d** env/secrets files when adding new credential plumbing. If credentials appear exposed, warn **without repeating** the secret.
|
|
69
|
+
- Work on the **current** working tree; do not revert user changes unless asked. If unrelated local changes affect the task, inspect and adapt; ask only when safe progress is impossible.
|
|
70
|
+
- Do **not** commit, push, amend, force-push, or alter remotes unless the user explicitly requests it. Never put secrets in commits, patches, or user-facing text.
|
|
67
71
|
|
|
68
|
-
##
|
|
72
|
+
## Report
|
|
69
73
|
|
|
70
|
-
-
|
|
71
|
-
-
|
|
74
|
+
- State the outcome, what you verified (and how), and any assumption made under the ambiguity protocol.
|
|
75
|
+
- For bug fixes, give a concise RCA and fix summary; if certainty is limited, say what remains unproven and what would verify it.
|
|
76
|
+
- When research influenced a decision, mention it briefly. Skip time estimates; describe what you did and what remains.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Debugging And Bug Fixes
|
|
2
|
+
|
|
3
|
+
Root cause first. Never fix by guesswork or blind retries.
|
|
4
|
+
|
|
5
|
+
## Reproduce first
|
|
6
|
+
|
|
7
|
+
1. **Reproduce the failure before touching code.** Gather logs, stack traces, CI output, failing tests, and user steps; turn them into a concrete repro you can run—ideally a **failing test** in the project's existing harness, which later becomes the regression test.
|
|
8
|
+
2. If you cannot reproduce, say so and instrument instead of guessing: add targeted logging or assertions around the suspected path, run, and read the evidence.
|
|
9
|
+
3. **Minimize the repro** when the failure is noisy: cut inputs, config, and steps until the smallest case that still fails remains.
|
|
10
|
+
|
|
11
|
+
## Trace to root cause
|
|
12
|
+
|
|
13
|
+
- Work **hypothesis-driven**: form an explicit hypothesis about the cause, pick the cheapest observation that would confirm or kill it, run it, repeat. Do not shotgun edits.
|
|
14
|
+
- Read stack traces from the **deepest frame you own** upward; the top frame is often a symptom.
|
|
15
|
+
- Follow the failure from symptom to responsible code path; verify assumptions at each hop (actual values, not expected ones).
|
|
16
|
+
- **Bisect** when the cause is not obvious: halve the input, disable half the suspects, or bisect history—`git log`/`git blame` on the failing path, or `git bisect` with the repro when the bug is a regression.
|
|
17
|
+
- Check the boring causes early: stale build artifacts, wrong environment/versions, cached state, unset env vars, timezone/locale, and recent dependency bumps.
|
|
18
|
+
|
|
19
|
+
## Fix and close the loop
|
|
20
|
+
|
|
21
|
+
1. Apply the **smallest change that addresses the cause**, not the symptom. If the real fix is out of scope, say so explicitly rather than papering over it.
|
|
22
|
+
2. Re-run the **exact repro** (and the new regression test) to confirm the fix; then run the surrounding checks per the main skill's Verify phase.
|
|
23
|
+
3. Remove any temporary instrumentation you added.
|
|
24
|
+
4. Report a concise **RCA** (what broke and why) and **fix summary** (what changed and how it resolves the issue). If certainty is limited, state what remains unproven and what would verify it.
|
|
25
|
+
|
|
26
|
+
If blocked after genuine investigation, ask **one focused question** with the evidence you gathered—not a list of open-ended possibilities.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Greenfield Projects And Components
|
|
2
|
+
|
|
3
|
+
For creating a project, package, or substantial component from scratch (no existing house pattern to copy).
|
|
4
|
+
|
|
5
|
+
## Stack and structure
|
|
6
|
+
|
|
7
|
+
- Choose a **boring, standard stack**: widely used, documented, actively maintained tools that match the user's stated constraints and ecosystem. Do not invent architecture or pick niche frameworks without a stated reason.
|
|
8
|
+
- Match the ecosystem's conventional layout (e.g. `src/` + entrypoint, standard config file locations) so future tools and contributors find things where they expect them.
|
|
9
|
+
- Start with the **smallest scaffold that builds and runs**, verify it, then add features incrementally—never a big-bang tree of untested files.
|
|
10
|
+
|
|
11
|
+
## Manifests and tooling
|
|
12
|
+
|
|
13
|
+
- Create a real dependency manifest (`package.json`, `requirements.txt`/`pyproject.toml`, `go.mod`, …) with **actual current versions**—add dependencies via the package manager rather than guessing version numbers.
|
|
14
|
+
- Pin the runtime where the ecosystem supports it (`.nvmrc`/`engines`, `requires-python`, …).
|
|
15
|
+
- Set up the basics the ecosystem expects: formatter, linter, test runner, and the corresponding scripts/commands—configured minimally, using defaults over bespoke rule sets.
|
|
16
|
+
- Add a `.gitignore` appropriate to the stack before generating build artifacts, and keep env/secrets files ignored from the start.
|
|
17
|
+
|
|
18
|
+
## Deliverables
|
|
19
|
+
|
|
20
|
+
- A **README** with what the project is, prerequisites, install, run, and test commands—short and accurate beats long and aspirational.
|
|
21
|
+
- A working entrypoint the user can run immediately; verify the documented commands actually work before reporting.
|
|
22
|
+
- For web apps: a clean, modern UI with sensible defaults (layout, spacing, typography, responsive behavior)—polish the default experience rather than shipping unstyled scaffolding.
|
|
23
|
+
- Example configuration (`.env.example` or equivalent) when the project needs credentials, with placeholders instead of real values.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: hooman-config
|
|
3
|
-
description: Read and update Hooman's own config.json and instructions.md
|
|
3
|
+
description: Read and update Hooman's own ~/.hooman/config.json and instructions.md. Use when the user asks about Hooman's config, custom instructions, agent name, model providers, LLMs/models, API keys, reasoning options, web search settings, tool or prompt toggles, or compaction. Not for MCP servers (use hooman-mcp), channel integrations (hooman-channels), or installed skills (hooman-skills).
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Hooman Config
|
|
@@ -14,6 +14,13 @@ Use this skill when the user asks you to inspect, explain, or change Hooman's ow
|
|
|
14
14
|
- User instructions: `~/.hooman/instructions.md`.
|
|
15
15
|
- This skill does not cover `mcp.json`, installed skill directories, or bundled skill files.
|
|
16
16
|
|
|
17
|
+
## Reference Files
|
|
18
|
+
|
|
19
|
+
Read these files (next to this SKILL.md) only when the task needs the details they cover:
|
|
20
|
+
|
|
21
|
+
- `providers.md` — full `providers`/`llms` shapes, all supported provider ids, per-provider option and `reasoning` details, and worked examples. Read it before adding or changing any provider or LLM entry.
|
|
22
|
+
- `search.md` — the `search` section shape, supported search providers, and per-provider notes. Read it before enabling or changing web search.
|
|
23
|
+
|
|
17
24
|
## Effective Runtime View
|
|
18
25
|
|
|
19
26
|
Use `hooman config` to inspect the merged runtime `config.json` for
|
|
@@ -25,10 +32,11 @@ overlays walked from git root to the current directory). The command prints full
|
|
|
25
32
|
|
|
26
33
|
1. Read the existing JSON first. Preserve user values, comments are not supported, and secrets such as API keys may be present.
|
|
27
34
|
2. Make the smallest JSON edit that satisfies the request. Do not rewrite unrelated sections or normalize formatting beyond valid pretty JSON.
|
|
28
|
-
3. `name`, `providers`, and `llms` are required. `providers` stores shared credentials/config, and `llms` must be a **non-empty array** of entries that reference provider names (see
|
|
35
|
+
3. `name`, `providers`, and `llms` are required. `providers` stores shared credentials/config, and `llms` must be a **non-empty array** of entries that reference provider names (see `providers.md`). `search`, `prompts`, `tools`, and `compaction` are optional in input, but Hooman expands them with defaults when loading.
|
|
29
36
|
4. Unknown keys are unsupported and may be dropped when Hooman parses and persists the config.
|
|
30
37
|
5. `tools` only manages built-in runtime toggles exposed in `config.json`.
|
|
31
38
|
6. Any change to `config.json` or `instructions.md` requires restarting the running Hooman agent/session before it takes effect. In an interactive `chat` session, running the `/config` command applies this automatically: it reloads config and re-bootstraps the session on exit.
|
|
39
|
+
7. When editing `providers` or `llms`, preserve unrelated entries and API keys unless the user asks to remove or replace them.
|
|
32
40
|
|
|
33
41
|
## Full Config Shape
|
|
34
42
|
|
|
@@ -85,228 +93,25 @@ This is the default shape Hooman writes when `~/.hooman/config.json` is missing:
|
|
|
85
93
|
}
|
|
86
94
|
```
|
|
87
95
|
|
|
96
|
+
Hooman fills all optional sections with defaults on load and persist, so a minimal valid config is just `name`, `providers`, and `llms`.
|
|
97
|
+
|
|
88
98
|
## Top-Level Options
|
|
89
99
|
|
|
90
100
|
- `name`: non-empty display name for the agent.
|
|
91
|
-
- `providers`: required reusable provider definitions. Each entry has `name`, runtime `provider`, and provider-specific `options`.
|
|
92
|
-
- `llms`: required non-empty list of named LLM configs. Each entry has `name`, provider reference `provider`, model `options`, and `default`.
|
|
93
|
-
- `search`: optional web search config; defaults to disabled Brave.
|
|
101
|
+
- `providers`: required reusable provider definitions. Each entry has `name`, runtime `provider`, and provider-specific `options`. Supported runtime providers: `anthropic`, `azure`, `bedrock`, `google`, `groq`, `minimax`, `moonshot`, `ollama`, `openai`, `openrouter`, `xai` — details in `providers.md`.
|
|
102
|
+
- `llms`: required non-empty list of named LLM configs. Each entry has `name`, provider reference `provider`, model `options` (`model`, optional `temperature`, optional `maxTokens`), and `default` (mark exactly one entry `true`). Details in `providers.md`.
|
|
103
|
+
- `search`: optional web search config; defaults to disabled Brave. Details in `search.md`.
|
|
94
104
|
- `prompts`: optional built-in static prompt toggles; omitted fields default to `true`. Custom user instructions live in `~/.hooman/instructions.md`.
|
|
95
105
|
- `tools`: optional tool toggles and tool-specific settings.
|
|
96
106
|
- `compaction`: optional context compaction settings. `ratio` must be `0..1`; `keep` must be a non-negative integer.
|
|
97
107
|
|
|
98
|
-
## LLMs array
|
|
99
|
-
|
|
100
|
-
Each element of `llms` has:
|
|
101
|
-
|
|
102
|
-
- `name`: non-empty label for this entry.
|
|
103
|
-
- `provider`: provider reference name. It must match one of the entries in top-level `providers`.
|
|
104
|
-
- `options.model`: model id passed to the resolved runtime provider.
|
|
105
|
-
- `options.temperature`: optional normalized temperature override.
|
|
106
|
-
- `options.maxTokens`: optional normalized output token limit.
|
|
107
|
-
- `default`: boolean; mark one entry `"default": true` for the active model.
|
|
108
|
-
|
|
109
|
-
## Providers array
|
|
110
|
-
|
|
111
|
-
Each element of `providers` has:
|
|
112
|
-
|
|
113
|
-
- `name`: non-empty reference name used by `llms[].provider`.
|
|
114
|
-
- `provider`: runtime provider id such as `"openai"`, `"bedrock"`, or `"ollama"`.
|
|
115
|
-
- `options`: provider-specific shared settings such as API keys, base URL, headers, region, or AWS credentials.
|
|
116
|
-
|
|
117
|
-
Supported `providers[].provider` values:
|
|
118
|
-
|
|
119
|
-
```json
|
|
120
|
-
[
|
|
121
|
-
"anthropic",
|
|
122
|
-
"azure",
|
|
123
|
-
"bedrock",
|
|
124
|
-
"google",
|
|
125
|
-
"groq",
|
|
126
|
-
"minimax",
|
|
127
|
-
"moonshot",
|
|
128
|
-
"ollama",
|
|
129
|
-
"openai",
|
|
130
|
-
"openrouter",
|
|
131
|
-
"xai"
|
|
132
|
-
]
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
Common shape:
|
|
136
|
-
|
|
137
|
-
```json
|
|
138
|
-
{
|
|
139
|
-
"providers": [
|
|
140
|
-
{
|
|
141
|
-
"name": "Anthropic",
|
|
142
|
-
"provider": "anthropic",
|
|
143
|
-
"options": {
|
|
144
|
-
"apiKey": "..."
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
],
|
|
148
|
-
"llms": [
|
|
149
|
-
{
|
|
150
|
-
"name": "Claude Sonnet",
|
|
151
|
-
"provider": "Anthropic",
|
|
152
|
-
"options": {
|
|
153
|
-
"model": "claude-sonnet-4-20250514",
|
|
154
|
-
"temperature": 0.2,
|
|
155
|
-
"maxTokens": 4096
|
|
156
|
-
},
|
|
157
|
-
"default": true
|
|
158
|
-
}
|
|
159
|
-
]
|
|
160
|
-
}
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
Provider notes:
|
|
164
|
-
|
|
165
|
-
- `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`.
|
|
166
|
-
- `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.
|
|
167
|
-
- `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`.
|
|
168
|
-
- `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).
|
|
169
|
-
- `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`.
|
|
170
|
-
- `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.
|
|
171
|
-
- `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.
|
|
172
|
-
- `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`.
|
|
173
|
-
- `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).
|
|
174
|
-
- `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`.
|
|
175
|
-
- `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`.
|
|
176
|
-
|
|
177
|
-
Examples:
|
|
178
|
-
|
|
179
|
-
```json
|
|
180
|
-
{
|
|
181
|
-
"providers": [
|
|
182
|
-
{
|
|
183
|
-
"name": "MiniMax",
|
|
184
|
-
"provider": "minimax",
|
|
185
|
-
"options": {
|
|
186
|
-
"apiKey": "..."
|
|
187
|
-
}
|
|
188
|
-
},
|
|
189
|
-
{
|
|
190
|
-
"name": "Kimi",
|
|
191
|
-
"provider": "moonshot",
|
|
192
|
-
"options": {
|
|
193
|
-
"apiKey": "..."
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
],
|
|
197
|
-
"llms": [
|
|
198
|
-
{
|
|
199
|
-
"name": "MiniMax M3",
|
|
200
|
-
"provider": "MiniMax",
|
|
201
|
-
"options": {
|
|
202
|
-
"model": "MiniMax-M3"
|
|
203
|
-
},
|
|
204
|
-
"default": true
|
|
205
|
-
},
|
|
206
|
-
{
|
|
207
|
-
"name": "Kimi K2.7 Code",
|
|
208
|
-
"provider": "Kimi",
|
|
209
|
-
"options": {
|
|
210
|
-
"model": "kimi-k2.7-code"
|
|
211
|
-
},
|
|
212
|
-
"default": false
|
|
213
|
-
}
|
|
214
|
-
]
|
|
215
|
-
}
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
```json
|
|
219
|
-
{
|
|
220
|
-
"providers": [
|
|
221
|
-
{
|
|
222
|
-
"name": "Bedrock",
|
|
223
|
-
"provider": "bedrock",
|
|
224
|
-
"options": {
|
|
225
|
-
"region": "us-west-2",
|
|
226
|
-
"accessKeyId": "AKIA...",
|
|
227
|
-
"secretAccessKey": "...",
|
|
228
|
-
"sessionToken": "..."
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
],
|
|
232
|
-
"llms": [
|
|
233
|
-
{
|
|
234
|
-
"name": "Claude Sonnet",
|
|
235
|
-
"provider": "Bedrock",
|
|
236
|
-
"options": {
|
|
237
|
-
"model": "anthropic.claude-sonnet-4-20250514-v1:0",
|
|
238
|
-
"temperature": 0.2,
|
|
239
|
-
"maxTokens": 4096
|
|
240
|
-
},
|
|
241
|
-
"default": true
|
|
242
|
-
}
|
|
243
|
-
]
|
|
244
|
-
}
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
When editing `providers` or `llms`, preserve unrelated entries and API keys unless the user asks to remove or replace them.
|
|
248
|
-
|
|
249
|
-
## Search
|
|
250
|
-
|
|
251
|
-
`search.provider` must be `"brave"`, `"exa"`, `"firecrawl"`, `"litellm"`, `"serper"`, or `"tavily"`.
|
|
252
|
-
|
|
253
|
-
```json
|
|
254
|
-
{
|
|
255
|
-
"search": {
|
|
256
|
-
"enabled": true,
|
|
257
|
-
"provider": "brave",
|
|
258
|
-
"brave": {
|
|
259
|
-
"apiKey": "..."
|
|
260
|
-
},
|
|
261
|
-
"exa": {
|
|
262
|
-
"apiKey": "..."
|
|
263
|
-
},
|
|
264
|
-
"firecrawl": {
|
|
265
|
-
"apiKey": "..."
|
|
266
|
-
},
|
|
267
|
-
"litellm": {
|
|
268
|
-
"baseURL": "https://your-litellm-host",
|
|
269
|
-
"apiKey": "sk-...",
|
|
270
|
-
"tool": "perplexity-search"
|
|
271
|
-
},
|
|
272
|
-
"serper": {
|
|
273
|
-
"apiKey": "..."
|
|
274
|
-
},
|
|
275
|
-
"tavily": {
|
|
276
|
-
"apiKey": "..."
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
```
|
|
281
|
-
|
|
282
|
-
Hooman calls Exa through the official **`exa-js`** SDK ([Exa search API](https://exa.ai/docs/reference/search-api-guide-for-coding-agents)).
|
|
283
|
-
|
|
284
|
-
Hooman calls Firecrawl through **`@mendable/firecrawl-js`** ([Firecrawl search API](https://docs.firecrawl.dev/api-reference/endpoint/search)).
|
|
285
|
-
|
|
286
|
-
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.
|
|
287
|
-
|
|
288
|
-
Defaults: `enabled: false`, `provider: "brave"`, all provider API keys unset.
|
|
289
|
-
|
|
290
108
|
## Prompts
|
|
291
109
|
|
|
292
|
-
Each prompt toggle is optional and defaults to `true`. Coding and software-engineering guidance is not a config toggle; it lives in the built-in **hooman-coding** skill and is loaded when relevant (see the system prompt skills section).
|
|
293
|
-
|
|
294
|
-
```json
|
|
295
|
-
{
|
|
296
|
-
"prompts": {
|
|
297
|
-
"behaviour": true,
|
|
298
|
-
"communication": true,
|
|
299
|
-
"execution": true,
|
|
300
|
-
"guardrails": true
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
```
|
|
304
|
-
|
|
305
|
-
Set a prompt to `false` only when the user explicitly wants to omit that harness section.
|
|
110
|
+
Each prompt toggle (`behaviour`, `communication`, `execution`, `guardrails`) is optional and defaults to `true`. Set one to `false` only when the user explicitly wants to omit that harness section. Coding and software-engineering guidance is not a config toggle; it lives in the built-in **hooman-coding** skill and is loaded when relevant (see the system prompt skills section).
|
|
306
111
|
|
|
307
112
|
## Tools
|
|
308
113
|
|
|
309
|
-
Simple toggles:
|
|
114
|
+
Simple toggles, all enabled by default:
|
|
310
115
|
|
|
311
116
|
```json
|
|
312
117
|
{
|
|
@@ -321,27 +126,11 @@ Simple toggles:
|
|
|
321
126
|
}
|
|
322
127
|
```
|
|
323
128
|
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
```json
|
|
327
|
-
{
|
|
328
|
-
"tools": {
|
|
329
|
-
"subagents": {
|
|
330
|
-
"enabled": true
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
```
|
|
335
|
-
|
|
336
|
-
Defaults: `todo`, `fetch`, `filesystem`, `shell`, `sleep`, and `subagents` enabled. MCP servers and installed skills are not controlled by these toggles; do not inspect or edit them for this skill.
|
|
337
|
-
|
|
338
|
-
`subagents`: the default file Hooman writes when `config.json` is missing includes `tools.subagents.enabled: true`. If `tools` or `tools.subagents` is omitted, the merged config still defaults this toggle to enabled.
|
|
129
|
+
MCP servers and installed skills are not controlled by these toggles; do not inspect or edit them for this skill.
|
|
339
130
|
|
|
340
131
|
## Instructions
|
|
341
132
|
|
|
342
|
-
`~/.hooman/instructions.md` contains the user's custom instructions. Read or edit it only when the user asks about Hooman instructions, custom instructions, persistent guidance, or agent behavior that belongs outside `config.json`.
|
|
343
|
-
|
|
344
|
-
Keep instruction edits focused and preserve existing wording unless the user asks for a rewrite.
|
|
133
|
+
`~/.hooman/instructions.md` contains the user's custom instructions. Read or edit it only when the user asks about Hooman instructions, custom instructions, persistent guidance, or agent behavior that belongs outside `config.json`. Keep instruction edits focused and preserve existing wording unless the user asks for a rewrite.
|
|
345
134
|
|
|
346
135
|
## Compaction
|
|
347
136
|
|
|
@@ -356,30 +145,3 @@ Keep instruction edits focused and preserve existing wording unless the user ask
|
|
|
356
145
|
|
|
357
146
|
- `ratio`: target fraction of context after compaction, from `0` to `1`.
|
|
358
147
|
- `keep`: minimum number of recent turns/message groups to preserve verbatim.
|
|
359
|
-
|
|
360
|
-
## Minimal Valid Config
|
|
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
|
-
}
|
|
383
|
-
```
|
|
384
|
-
|
|
385
|
-
Hooman fills all optional sections with defaults on load and persist.
|