README
¶
Skills
Flowbot ships with AI assistant skills that teach Claude Code, opencode, and
other AI coding assistants how to use the flowbot CLI for daily tasks. Each
skill corresponds to a Flowbot capability: the skill name equals the
capability ID (hub.CapabilityType / provider ID). The skill body describes
the CLI command tree for that capability (CLI domain names may differ from the
capability ID, e.g. karakeep → flowbot bookmark).
Skills follow the SKILL.md convention. The AI assistant loads the skill's
frontmatter (name + description) at startup, and only pulls the full SKILL.md
body when the user's request matches the description. Additional files in the
skill directory (for example reference.md or scripts/run.sh) can be loaded
via read_skill with the path argument.
Available Skills
| Skill (Cap ID) | CLI root | Description |
|---|---|---|
karakeep |
bookmark |
Create, search, and archive bookmarks / saved links |
kanboard |
kanban |
Manage kanban boards, tasks, and subtasks |
miniflux |
reader |
Subscribe to RSS/Atom feeds, read entries, mark status |
memos |
memo |
Create, list, update, and delete memos |
trilium |
trilium |
Create, list, search, update, and delete trilium notes |
fireflyiii |
fireflyiii |
Create transactions and check Firefly III health |
transmission |
transmission |
Add, list, stop, and remove Transmission torrents |
nocodb |
nocodb |
Discover bases/tables and CRUD NocoDB records |
devops |
devops |
Query beszel, uptimekuma, traefik, grafana, wakapi, dozzle |
gitea |
forge |
Inspect forge repos, issues, diffs, and files |
github |
github |
Inspect GitHub repos, issues, notifications, releases |
Each skill file is in the corresponding subdirectory:
docs/skills/
├── karakeep/
│ ├── SKILL.md
│ └── references/cli.md
├── kanboard/
│ ├── SKILL.md
│ └── references/cli.md
├── miniflux/
│ ├── SKILL.md
│ └── references/cli.md
├── memos/
│ ├── SKILL.md
│ └── references/cli.md
├── trilium/
│ ├── SKILL.md
│ └── references/cli.md
├── fireflyiii/
│ ├── SKILL.md
│ └── references/cli.md
├── transmission/
│ ├── SKILL.md
│ └── references/cli.md
├── nocodb/
│ ├── SKILL.md
│ └── references/cli.md
├── devops/
│ ├── SKILL.md
│ └── references/cli.md
├── gitea/
│ ├── SKILL.md
│ └── references/cli.md
├── github/
│ ├── SKILL.md
│ └── references/cli.md
└── README.md (you are here)
Capabilities without a CLI tree (notify, agent, example) are
not generated as skills. The devops skill is the multi-provider aggregator Cap ID.
How Skills Work with AI Assistants
-
An AI assistant (Claude Code, opencode, etc.) reads
available_skillsat startup, which includes every skill's name and description from the SKILL.md YAML frontmatter. -
When the user sends a message that matches a skill's description (e.g. "save this URL to my bookmarks"), the assistant loads the full SKILL.md body into its context.
-
The SKILL.md body contains:
- Setup (login, server URL, output format)
- Common workflows (multi-step recipes)
- Troubleshooting
- A link to
references/cli.mdfor the full command tree (loaded on demand)
-
The assistant follows the instructions in the skill to compose the correct
flowbotCLI commands and handle errors.
Enabling Skills in Your Environment
Skills files are already generated in docs/skills/. To use them with your AI
assistant, configure the tool to scan this directory.
opencode: Add a --skill-dir or equivalent path pointing to this directory.
Claude Code: Place the skill directories under your global skills path. For example, to make them available project-wide:
# Symlink Flowbot skills into your project's .claude/skills/
mkdir -p .claude/skills/
ln -sf "$(pwd)/docs/skills/karakeep" .claude/skills/karakeep
ln -sf "$(pwd)/docs/skills/kanboard" .claude/skills/kanboard
ln -sf "$(pwd)/docs/skills/miniflux" .claude/skills/miniflux
ln -sf "$(pwd)/docs/skills/memos" .claude/skills/memos
ln -sf "$(pwd)/docs/skills/trilium" .claude/skills/trilium
ln -sf "$(pwd)/docs/skills/fireflyiii" .claude/skills/fireflyiii
ln -sf "$(pwd)/docs/skills/transmission" .claude/skills/transmission
ln -sf "$(pwd)/docs/skills/nocodb" .claude/skills/nocodb
ln -sf "$(pwd)/docs/skills/devops" .claude/skills/devops
ln -sf "$(pwd)/docs/skills/gitea" .claude/skills/gitea
ln -sf "$(pwd)/docs/skills/github" .claude/skills/github
For global availability:
# Symlink into the global Claude Code skills directory
mkdir -p ~/.claude/skills/
ln -sf "$(pwd)/docs/skills/karakeep" ~/.claude/skills/karakeep
ln -sf "$(pwd)/docs/skills/kanboard" ~/.claude/skills/kanboard
ln -sf "$(pwd)/docs/skills/miniflux" ~/.claude/skills/miniflux
ln -sf "$(pwd)/docs/skills/memos" ~/.claude/skills/memos
ln -sf "$(pwd)/docs/skills/trilium" ~/.claude/skills/trilium
ln -sf "$(pwd)/docs/skills/fireflyiii" ~/.claude/skills/fireflyiii
ln -sf "$(pwd)/docs/skills/transmission" ~/.claude/skills/transmission
ln -sf "$(pwd)/docs/skills/nocodb" ~/.claude/skills/nocodb
ln -sf "$(pwd)/docs/skills/devops" ~/.claude/skills/devops
ln -sf "$(pwd)/docs/skills/gitea" ~/.claude/skills/gitea
ln -sf "$(pwd)/docs/skills/github" ~/.claude/skills/github
Generating Skills
Skills are generated from the live CLI command tree by the composer tool. This ensures the skill always matches the actual CLI interface.
# Generate all SKILL.md files to docs/skills/
go tool task skills
When you add a new CLI command tree for a capability, register it in
metaSpecs in cmd/composer/action/skills/skills.go (Name = capability ID)
and re-run the generator.
Import into the database
The server binary embeds docs/skills (package skills) and upserts them
into agent_skills / agent_skill_files on every startup (after DB migrate in
cmd → server.newDatabaseAdapter). source is set to bundled. Existing
enabled / disable_model_invocation values are preserved on update.
Flow:
go tool task skills— regenerate markdown underdocs/skills/- Rebuild/restart the server (
go tool task run) — auto-import into Postgres - Chat agent loads skills from DB via
read_skill/ system prompt
No manual Web UI paste or composer --sync-db step is required for bundled skills.
Adding a New Skill
-
Implement the CLI command tree in
cmd/cli/command/following existing conventions. -
Register the capability in
metaSpecsincmd/composer/action/skills/skills.go. Name must equal the capability ID frompkg/hub(e.g.hub.CapKarakeep), not the CLI domain name. (hub.CapExampleis shown only as a pattern — example has no CLI skill.){ Name: string(hub.CapKarakeep), Title: "Karakeep", CommandFn: command.BookmarkCommand, Description: "Create, list, search, archive, and delete bookmarks via flowbot bookmark.", Keywords: "bookmarks, karakeep, saved URLs", Workflows: []workflowSpec{ { Title: "Common task name", Description: "When the user wants to do X:", Steps: []workflowStep{ {Step: 1, Command: "flowbot bookmark list"}, {Step: 2, Command: "flowbot bookmark get <id>"}, }, }, }, }, -
Regenerate the skills:
go tool task skillsThe new subdirectory and SKILL.md will appear under
docs/skills/. -
Add the skill directory to your AI assistant's skills path as shown above.
Skill File Anatomy
Each skill directory follows Agent Skills progressive disclosure:
{capability-id}/
├── SKILL.md # frontmatter + setup + workflows (lean)
└── references/
└── cli.md # full CLI command/flag reference (on demand)
---
name: karakeep
description: >-
Create, list, search, archive, and delete bookmarks via flowbot bookmark.
Use when the user mentions bookmarks, karakeep, ...
compatibility: Requires flowbot CLI, network access to a Flowbot server
metadata:
capability: karakeep
cli_root: bookmark
---
# Karakeep
## Setup
## Workflows
## Troubleshooting
- Frontmatter:
nameequals capability ID and directory name;descriptionis WHAT + WHEN (≤1024 chars);metadata.capabilitymirrors the Cap ID. - SKILL.md body: Imperative setup, workflows, and troubleshooting only.
- references/cli.md: Auto-generated command tree from cobra (loaded only when needed).
- Workflows: Hand-written multi-step recipes for common tasks.
References
- Composer skills code — The generator that produces these files.
- Capability types — Canonical capability IDs.
- CLI commands — The CLI command tree implementations.
- Skill Cap ID migration —
Rename
homelab-*agent_skills rows to Cap IDs after upgrade.
Migrating from homelab-* names
Skill name and directory now equal the capability ID. If you previously
stored skills as homelab-bookmark / homelab-kanban / homelab-reader:
- Run
docs/migrations/2026-07-agent-skills-cap-id.sql. - Update pipeline / subagent allowlists to Cap IDs (
karakeep,kanboard,miniflux). Runtime still resolves the old names this release. - Point Claude/opencode skill symlinks at
docs/skills/{cap}/.
Documentation
¶
Overview ¶
Package skills embeds Cap-ID Agent Skills for server startup import.
Index ¶
Constants ¶
This section is empty.
Variables ¶
var FS embed.FS
FS holds Cap-ID skill trees under this directory (SKILL.md + references/).
Functions ¶
This section is empty.
Types ¶
This section is empty.