Skip to content

refactor(config): Make tool prompts configurable via prompts.yaml#450

Merged
edenreich merged 1 commit intomainfrom
refactor/configurable-tool-prompts
Apr 27, 2026
Merged

refactor(config): Make tool prompts configurable via prompts.yaml#450
edenreich merged 1 commit intomainfrom
refactor/configurable-tool-prompts

Conversation

@edenreich
Copy link
Copy Markdown
Contributor

@edenreich edenreich commented Apr 27, 2026

Summary

  • Move every static tool's LLM-visible description out of Definition() and into config/prompts.go so users can override them in .infer/prompts.yaml under the new tools key.
  • Add INFER_PROMPTS_TOOLS_<NAME>_DESCRIPTION env-var overrides for every tool, following the existing prompts-env precedence (env > file > in-code defaults).
  • Defaults are the verbatim strings that used to live in each tool — no LLM-visible behaviour change unless a user explicitly overrides.

What's covered

27 static tools: Bash, BashOutput, KillShell, ListShells, Read, Write, Edit, MultiEdit, Delete, Grep, Tree, TodoWrite, RequestPlanApproval, WebFetch, WebSearch, Github, Schedule, A2A_QueryAgent/QueryTask/SubmitTask, MouseMove/Click/Scroll, KeyboardType, GetFocusedApp, ActivateApp, GetLatestScreenshot.

Out of scope (intentional):

  • MCP tool descriptions — they come from the MCP server at runtime; overriding here would create drift.
  • Parameter descriptions — some are dynamic (Bash whitelist enum); future work if needed.

Notes

  • Github tool keeps its dynamic owner-suffix logic on top of the configurable base description.
  • ListShellsTool gained a config field (previously didn't store it).
  • 13 tool *_test.go Definition tests now seed Prompts: *config.DefaultPromptsConfig() in their test config — without the seed, the new config-driven Definition() would produce empty descriptions.
  • New tests in config/prompts_test.go and cmd/prompts_load_test.go cover defaults, partial-file backfill, env-override precedence, and the YAML key contract (PascalCase + A2A_* underscore form).
  • Documentation updates: README, docs/tools-reference.md, CLAUDE.md.

Closes #446

Move the LLM-visible description from each tool's Definition() into
config/prompts.go so users can override per-tool descriptions in
.infer/prompts.yaml under the new `tools` key (or via
INFER_PROMPTS_TOOLS_<NAME>_DESCRIPTION). Defaults are unchanged — a
missing or empty entry falls back to the verbatim string previously
hardcoded in each tool, courtesy of mergeToolDefaults backfill.

MCP tool descriptions remain runtime-sourced from the MCP server.
Parameter descriptions stay in code (some are dynamic, e.g. Bash
whitelist enum) — out of scope for this change.

Closes #446
@edenreich edenreich merged commit 9fc1bb5 into main Apr 27, 2026
9 of 10 checks passed
@edenreich edenreich deleted the refactor/configurable-tool-prompts branch April 27, 2026 10:11
ig-semantic-release-bot Bot pushed a commit that referenced this pull request Apr 27, 2026
## [0.104.1](v0.104.0...v0.104.1) (2026-04-27)

### 🐛 Bug Fixes

* **ui:** Restore typing while agent is busy ([#455](#455)) ([92840d6](92840d6)), closes [#410](#410)
* **services:** Trigger auto-compact from gateway-reported tokens ([#454](#454)) ([1fc19dd](1fc19dd))
* **config:** Update model context windows and pricing for current model lineup ([#452](#452)) ([655f9f8](655f9f8))

### ♻️ Code Refactoring

* **config:** Centralize config loading and remove service indirection ([#443](#443)) ([babf173](babf173))
* **config:** Centralize sub-config definitions and consolidate prompts ([#448](#448)) ([9979ac7](9979ac7))
* Extract keybindings configuration to separate file ([#438](#438)) ([6d04195](6d04195))
* **config:** Generate viper defaults via reflection over DefaultConfig() ([#436](#436)) ([85c6e0a](85c6e0a))
* **config:** Make tool prompts configurable via prompts.yaml ([#450](#450)) ([9fc1bb5](9fc1bb5)), closes [#446](#446)
* Move channels to separate channels.yaml config ([#444](#444)) ([aa43e0e](aa43e0e)), closes [#441](#441)
* Move computer_use to a separate config ([#447](#447)) ([a762c64](a762c64)), closes [#444](#444)
* Move prompts to separate prompts.yaml config ([#442](#442)) ([45e4fb6](45e4fb6))
* **config:** Unify sub-configs behind CollectionConfig + utils.{Load,Save}YAML ([#445](#445)) ([aab481c](aab481c))

### 📚 Documentation

* Add directory-structure reference ([#451](#451)) ([95d26f8](95d26f8))

### 👷 CI/CD

* Reduce runs of nix ([acac364](acac364))

### 🧹 Maintenance

* **deps:** Bump modernc.org/sqlite from 1.49.1 to 1.50.0 ([#449](#449)) ([06a535d](06a535d))
* **nix:** Update package to v0.104.0 ([#432](#432)) ([5564697](5564697))
@ig-semantic-release-bot
Copy link
Copy Markdown
Contributor

🎉 This PR is included in version 0.104.1 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[TASK] Tools prompts should be configurable

1 participant