mirror of
https://github.com/fabro-sh/fabro.git
synced 2026-10-17 04:37:03 +00:00
Kimi models ran on the OpenAI profile, which exists to look like Codex. Give them their own profile derived from Kimi Code's system prompt. Routing is per model, not per provider, because Kimi models are served both directly by Moonshot and through gateways. `kimi` sets agent_profile at the provider level; the Kimi model rows on `openrouter` set it individually, so a gateway route behaves like the direct one while other OpenRouter models keep the provider's OpenAI profile. The profile targets a measured failure. Across two observed K3 implementation stages, 32 of 35 tool failures were the same thing: writes to files the model had not read, rejected by the workspace read-before-write guard, or `old_string` values reconstructed from memory rather than taken from a read. Kimi Code drills this rule in its own tool descriptions, so the profile does too -- `edit_file` and `write_file` carry Kimi-specific descriptions naming the guard and the failure text the model will see, alongside a "Reading Before Writing" section in the system prompt. Profiles own their tool registries, so this re-describes the tools for Kimi only; every other profile is untouched and the executors and JSON schemas are shared unchanged. Tool names stay fabro's existing snake_case. Whether Kimi Code's PascalCase vocabulary measurably helps is untested, and renaming would also mean updating the name-keyed categories in tool_permissions.rs, where an unknown tool falls back to Shell. That is a separate change to make on evidence. The prompt is a subtractive port: capabilities fabro does not have -- plan mode, background tasks, cron, subagent swarms, the cwd tree listing -- are dropped rather than promised. The shell timeout default matches Kimi Code's 60s and memory discovery reads AGENTS.md, which is the only instruction file Kimi Code looks for. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| src | ||
| Cargo.toml | ||