skills
cli.skills
tvbo skills — manage TVBO skill files for AI coding assistants.
Three subcommands:
tvbo skills sync— repo-side: regenerate.claude/skills/,.github/instructions/,.cursor/rules/and the index region ofAGENTS.mdfrom the canonical sources inskills/andtvbo/skills/canonical/.tvbo skills install— user-side: render canonical user skills onto a user’s machine (~/.claude/skills/,./.cursor/rules/, stdout, …).tvbo skills uninstall— user-side: remove files previously written byinstall(detected via themanaged-by: tvbofrontmatter marker).
See :mod:tvbo.skills._render for the canonical schema.
Attributes
| Name | Description |
|---|---|
| app |
Classes
| Name | Description |
|---|---|
| Audience | Intended reader of a skill, used to filter which skills apply. |
| Scope | Install location for rendered skill files. |
| Target | Output format a skill is rendered to. |
Audience
cli.skills.Audience()Intended reader of a skill, used to filter which skills apply.
A skill declares an audience of user, maintainer, or both; this enum selects the subset to act on, where all keeps every skill regardless of its declared audience.
Scope
cli.skills.Scope()Install location for rendered skill files.
user writes to the per-user config directory (e.g. ~/.claude/skills), while project writes to the current working directory (e.g. ./.claude/skills).
Target
cli.skills.Target()Output format a skill is rendered to.
Selects which assistant-specific artifact install or sync produces: Claude Code skill files, GitHub Copilot instructions, Cursor rules, the AGENTS.md index, a plain prompt on stdout, or all of them at once.
Functions
| Name | Description |
|---|---|
| install | Render user skills to --target and write them to disk (or stdout). |
| sync | Regenerate .claude/skills/, .github/instructions/, .cursor/rules/ and AGENTS.md. |
| uninstall | Remove files in target whose frontmatter carries managed-by: tvbo. |
install
cli.skills.install(
target=typer.Option(Target.claude_code, '--target', '-t', help='Adapter format.'),
audience=typer.Option(Audience.user, '--audience', help='Which skills to install.'),
scope=typer.Option(Scope.user, '--scope', help='user (~/.claude/) or project (./.claude/).'),
skill=typer.Option(None, '--skill', '-s', help='Limit to specific skill(s). Repeatable.'),
out=typer.Option(None, '--out', '-o', help='Override the install directory or output path.'),
force=typer.Option(False, '--force', '-f', help='Overwrite unmanaged files.'),
dry_run=typer.Option(False, '--dry-run', help='Show what would happen; write nothing.'),
strict=typer.Option(False, '--strict', help='Exit non-zero if any skill is refused/skipped.'),
)Render user skills to --target and write them to disk (or stdout).
sync
cli.skills.sync(
check=typer.Option(False, '--check', help='Exit non-zero if any adapter file would change. CI guard.'),
repo_root=typer.Option(Path.cwd(), '--repo-root', help='Repo root containing skills/ and AGENTS.md.'),
)Regenerate .claude/skills/, .github/instructions/, .cursor/rules/ and AGENTS.md.
uninstall
cli.skills.uninstall(
target=typer.Option(Target.claude_code, '--target', '-t', help='Adapter format.'),
scope=typer.Option(Scope.user, '--scope', help='user or project.'),
out=typer.Option(None, '--out', '-o', help='Override the install directory.'),
dry_run=typer.Option(False, '--dry-run', help='Show what would be removed.'),
)Remove files in target whose frontmatter carries managed-by: tvbo.