feat(skills): manage skills for every agent from Settings - #15
Merged
Merged
Conversation
Claude Code output styles set Claude's role, tone, and response format for a whole session. Jean drives the CLI non-interactively, so `/output-style` and `/config` were unreachable — there was no way to pick one. Adds a per-session output style picker (global preference as the default), discovery of custom styles from ~/.claude/output-styles and the worktree's .claude/output-styles chain, an authoring UI under Settings > Providers, and 20 presets vendored from smixs/awesome-claude-output-styles (MIT). Also fixes a pre-existing bug this would have widened: `build_claude_args` emitted `--settings` twice (custom CLI profile file, then Jean's inline JSON). The CLI's `--settings` is non-variadic, so the last flag won and the profile's env — including API keys and base URLs — was silently discarded whenever a thinking/effort/fast setting was active. The two sources are now merged into a single value, written to a per-session file when a profile contributes so secrets stay out of the process arguments. Bumps FALLBACK_CODEX_VERSION from 0.116.0-alpha.12 to 0.160.0. Co-Authored-By: Claude <noreply@anthropic.com>
Each CLI backend reads skills from its own directory, so installing one meant copying the same SKILL.md into up to eight places by hand. Jean only ever read skills — there was no UI to add them. Adds Settings > Tools > Skills: paste a SKILL.md, pick the agents (all by default), and Jean writes it to each backend's skill root. The list shows every installed skill with badges for the agents that have it, plus edit and remove, and a reference table of the directories involved. Frontmatter is normalized on save: name and description are injected or overwritten from the form fields while any other keys the paste carried are preserved, so a bare paste with no frontmatter still produces a valid skill. Renaming a skill cleans up the old directory in every backend. Also fixes skill descriptions in the slash-command picker, which only read a leading `# Heading` and so showed nothing for the YAML-frontmatter skills every CLI actually ships. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 23 minutes. View limit detailsLimit details: You’ve used the included review currently available. Review configuration: ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (59)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Every CLI backend reads skills from a different directory, so installing one skill meant copying the same
SKILL.mdinto up to eight places by hand. Jean only ever read skills — there was no UI to add one.What
Settings → Tools → Skills (new pane):
SKILL.md, pick the agents (all selected by default), hit Install. Jean writes the file into each backend's skill root.Frontmatter is normalized on save:
nameanddescriptioncome from the form fields (falling back to whatever the paste carried), while any other keys —disable-model-invocation,allowed-tools, … — are preserved. A bare paste with no frontmatter still produces a valid skill. Renaming cleans up the old directory in every backend.Write targets mirror the read paths in
projects::list_*_skills, so a saved skill appears in Jean's slash-command picker as well as in the CLI:~/.claude/skills~/.agents/skills$XDG_CONFIG_HOME/opencode/skills~/.cursor/skills-cursor~/.grok/skills~/.jean/skills/<backend>Project-level skills (
.claude/skills,.agents/skills) are still discovered automatically and are deliberately not managed here.Drive-by fix
collect_skills_from_dirread a skill's description from a leading# Headingonly. Real skills put it in YAML frontmatter, so the slash-command picker showed no description for essentially every installed skill. It now reads frontmatter first and keeps the heading as a fallback.Notes
cli-skillsquery so the picker refreshes without a restart.Testing
cargo test -p jean-core: 1133 passed, 0 failed — 10 new skills tests (slugify, slug validation/traversal, frontmatter parse incl. broken YAML, frontmatter injection/preservation/clearing, backend resolution, dir coverage, atomic write round-trip) and 2 for the description fix.bunx vitest run SkillsPane: 5 new tests (list rendering with agent badges, paste → install payload, install blocked with no agents selected, edit loads the file, remove).bun run typecheck,bun run lint,cargo fmt --check,cargo clippy -- -D warnings: clean.bun run test:run: 2136 passed. The failures inDesktopBackendModelPicker/BackendModelPickerContentreproduce unchanged onorigin/main— pre-existing, unrelated.make docker-build→jean:devsucceeds.How to test manually
jean:dev.SKILL.md→ Install. Verify the file lands in each selected directory:ls ~/.claude/skills/<slug>/ ~/.agents/skills/<slug>/ ~/.grok/skills/<slug>/./— the new skill appears, now with its description.Related
PR #14 (output styles) is open against the same base. This branch is cut from
mainand is independent of it; say the word if you'd rather I fold them together.🤖 Generated with Claude Code