Repository navigation
feat(skill): install, update and check skills from the brevo-skills catalog - #140
Merged
piyushsarin-sib merged 5 commits intoOct 15, 2026
Conversation
…atalog Replace the one-skill `skill:cli` group with `brevo skill install|update| uninstall|list|check`. Skills come from the brevo-skills catalog (latest release asset, or `--pin <release>`), are fetched from the release tag and hashed by the catalog's contract before they are written; a mismatch skips that skill and exits 1. Skills marked `default` are always included, platform fit and `min_cli_version` are honoured, `--mcp` registers the Brevo MCP server through each agent's own CLI, `--dry-run` writes nothing. Each installed directory carries `.brevo-skill.json`; `~/.brevo/skills.lock.json` records versions, releases and pins. The catalog is cached at `~/.brevo/skills-catalog.json`; after any command, when the cache is older than 12 hours and something is installed, outdated unpinned skills are reinstalled, silently on network failure. Offline, `skill install brevo-cli` installs the bundled copy. `skill:cli install|uninstall` stay as hidden aliases. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… docs Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Collaborator
Author
|
Note on CI: the |
…ute path Catalog file and skill paths are validated as `/`-joined plain segments (letters, digits, dot, underscore, dash; never `.`, `..`, an empty segment, a backslash, a drive letter, a control character or the marker name), and the write site checks again: the resolved destination must stay under the skill directory and no component between the two may be a symbolic link. A refused file skips that skill, like a hash mismatch, and the run exits 1. `--mcp` resolves the agent CLI to an absolute path from absolute PATH entries only and spawns that path with no shell, so the OS performs no lookup of its own. On Windows only an `.exe` is run; a `.cmd`/`.bat` launcher needs a shell, so its command is printed instead. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…lling skills After a brevo command, an installed skill that is behind the catalog is now named in one stderr line pointing to `brevo skill update`; nothing on disk changes. BREVO_SKILL_AUTOREFRESH=1 restores the reinstall, and BREVO_NO_SKILL_AUTOREFRESH=1 still turns the check off. The offline bundled copy follows the same rule. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
5 of 6 tasks
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.




Stacked on #138 (
feat/skill-install-any-agent): this PR generalises itsskill:cli install --agent …into abrevo skillcommand group that installs from the brevo-skills catalog. It implements section 3 ("CLI installer") of the skill distribution framework design (brevo-skills PR #4), coding to the catalog shape from section 2 (themcpblock is tolerated when absent).Commands
brevo skill install [names...]defaultare always includedbrevo skill update [names...]brevo skill uninstall [names...].brevo-skill.jsonare touchedbrevo skill listbrevo skill checkinstallandupdatetake--agent claude,codex,gemini|all,--pin <release>(latestclears it),--mcp(runsclaude|codex|gemini mcp addwhen the agent CLI is on the PATH, prints it otherwise),--force,--dry-run,--json.brevo skill:cli install|uninstallkeep working as hidden aliases ofbrevo skill install|uninstall brevo-cli.Behaviour
sha256over<path>\0<bytes>\0in sorted path order, verified against the realcatalog.json); a mismatch skips that skill and the run exits 1.codex→openai) andmin_cli_versionfilters, each with a message..brevo-skill.jsonper installed directory; lock file~/.brevo/skills.lock.jsonwith versions, releases and pins.~/.brevo/skills-catalog.json, 2 s fetch timeout. After any command, when something is installed and the cache is older than 12 h, one stderr line names the outdated unpinned skills and points tobrevo skill update; nothing on disk changes.BREVO_SKILL_AUTOREFRESH=1reinstalls them right away instead (what earlier releases did for the bundled skill); same skip rules as before (CI,--json, anyskillcommand,BREVO_NO_SKILL_AUTOREFRESH=1); silent on network failure, and a failed attempt is recorded so an offline machine is not retried on every command.brevo skill install brevo-cliinstalls the bundledagent-context/SKILL.mdwith the CLI version; other skills fail with the URL and the cached release.install/update;list/checkfall back to the cached copy.BREVO_SKILLS_CATALOG_URLandBREVO_SKILLS_FILES_URLoverride the sources;BREVO_CLAUDE_HOME/BREVO_AGENTS_HOMEunchanged.Tests
New suites:
services/skill-catalog,services/skill,services/skill-mcp,commands/skill/{install,update,uninstall,list,check,aliases}, run against temp homes and afetchstub serving a release from memory. 1875 tests pass. Coverage of the new files:services/skill.tsservices/skill-catalog.tsservices/skill-mcp.tscommands/skill/*Also smoke-tested the public build against the real brevo-skills
catalog.jsonserved from a local stub: install/dry-run/list/check/tamper detection/forced update/uninstall/offline fallback all behave as specified (the realbrevo-clientry is skipped on 2.4.0 because itsmin_cli_versionis 2.5.0, which this minor bump will satisfy).Docs
README (new command group, env vars),
agent-context/SKILL.mdandagent-context/AGENTS.md(preflight now usesbrevo skill check),CLAUDE.md, plus a minor changeset.Hardening
/-joined segments (no..,., empty segments, backslashes, drive letters, control characters or the marker name) and re-checked at the write site (resolved destination must stay under the skill directory, no symlinked component), skipping the skill with exit 1 otherwise;--mcpresolves the agent CLI to an absolute path from absolute PATH entries only and spawns that path with no shell, printing the command instead of running a Windows.cmd/.batlauncher.🤖 Generated with Claude Code