luigidemasi opened a new issue, #103: URL: https://github.com/apache/camel-kit/issues/103
> Imported from [luigidemasi/camel-kit#243](https://github.com/luigidemasi/camel-kit/issues/243), opened by [Croway](https://github.com/Croway) on 2026-10-10. --- ## Problem For `camel kit init --ai claude`, the generated `.claude/skills/*/SKILL.md` files keep the source frontmatter unchanged, and Claude Code (2.1.294) reads very little of it: - `user_invocable: false` / `true` is camel-kit's own key. Claude Code only knows `user-invocable` and `disable-model-invocation`, and [its docs](https://code.claude.com/docs/en/skills) say a field that does not match exactly, hyphens included, is ignored without an error. In a generated Claude workspace all 13 skills, including the internal camel-design, camel-implement, camel-test and camel-verify, show up in the session's init event under both `skills` (the model can invoke them) and `slash_commands`. - The descriptions say what a skill is, not when to use it. Claude Code decides from `description` (and `when_to_use`) whether to load a skill on its own. Today we have `camel-migrate`: "Migrate an existing integration from another product to Apache Camel", `camel-start`: "Route to the right camel-kit skill for integration work", `camel-knowledge`: "Look up Camel documentation, components, CVEs/security advisories, and versions". camel-design/implement/test also say "NOT user-invocable" in prose, which nothing enforces. - `CommandStubGenerator` also writes 9 `.claude/commands/camel-*.md` stubs ("Read .claude/skills/camel-migrate/SKILL.md and follow those instructions. Requested input: $ARGUMENTS"). Both create the same `/camel-migrate`, and Claude Code docs say the skill wins over a command with the same name, so the stubs do nothing for Claude. ## Evidence In an evaluation of coding agents (Claude Code and IBM Bob) on migration tasks with camel-kit 0.4.1, Claude Code sessions with Claude 5.5 models (Haiku and Sonnet) almost never invoked a camel-kit skill: one Skill call (camel-ship) in about 80 sessions, even though every prompt was a migration request. The model's own explanations: "I did the migration directly rather than through the camel-kit pipeline skills, because your spec was complete"; "I did not use `/camel-ship` or the brainstorm and plan skills, since the requirements were fully specified". Older Haiku 4.5 sessions did follow the camel-start router. Bob uses the skills because the bob2 target writes `user-invocable` and has `whenToUse` text in its modes. ## Where `camel-kit-core/src/main/java/io/github/luigidemasi/camelkit/generator/SkillResourceInstaller.java` (tag camel-kit-0.4.1): - `copySkillFile` (L157-170) rewrites frontmatter only for BOB2/QWEN (`addHyphenatedUserInvocableMetadata`, `user_invocable` -> `user-invocable`) and for COPILOT/PI (`addInternalSkillInvocationMetadata`, which adds `user-invocable: false` and `disable-model-invocation: true` to `MODEL_HIDDEN_INTERNAL_SKILLS` = camel-design, camel-implement, camel-test, camel-verify). Claude gets neither. - `CommandStubGenerator.generate` (L13-22) writes a stub for every user-facing command, even when the same-name skill is installed. - Descriptions in `camel-kit-core/src/main/resources/skills/*/SKILL.md`. Nothing has changed on `main` in these files since 0.4.1. ## Proposal 1. Apply the Copilot/Pi internal-skill metadata to the Claude target too: `user-invocable: false` and `disable-model-invocation: true` on camel-design, camel-implement, camel-test, camel-verify. 2. Map `user_invocable` to `user-invocable` for Claude (or emit the hyphenated key in the source and drop the underscore one); keep migrate/brainstorm/plan/execute/validate/debug/knowledge invocable by the model. 3. Rewrite the descriptions as triggers, key use case first. For example, camel-migrate: "Use when the user asks to migrate, convert or port a MuleSoft, BizTalk, Fuse, Camel 2/3 or other integration project to Apache Camel, even if the request includes the full requirements." Similar "Use when ..." wording for camel-start, camel-knowledge, camel-debug, camel-validate, camel-brainstorm. `when_to_use` can hold example requests. 4. Do not generate `.claude/commands/<name>.md` when `.claude/skills/<name>/SKILL.md` exists (or mark the command skill-only for the claude agent in the workflow manifest). -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
