feat: skill system #207
Labels
No labels
Compat/Breaking
Kind/Bug
Kind/Competitor
Kind/Documentation
Kind/Enhancement
Kind/Epic
Kind/Feature
Kind/Security
Kind/Story
Kind/Testing
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Scope/Core
Scope/Cross-Plugin
Scope/Plugin-System
Scope/Single-Plugin
Status
Abandoned
Status
Blocked
Status
Need More Info
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
ultanio/cobot#207
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Product Requirements Document: Cobot Skill System
Author: David
Date: 2026-03-06
Executive Summary
Cobot is a minimal self-sovereign AI agent runtime (~6K lines of Python) built around the insight that agents need trust infrastructure before they can meaningfully cooperate. Today, Cobot has 20+ plugins covering identity (Nostr), communication (FileDrop, Telegram, Nostr DMs), economic capability (Lightning wallet), and LLM inference — but an agent's capabilities are fixed at deployment time.
This PRD defines a skill system that makes agent capabilities dynamic. Skills are markdown-based instruction files — portable, ecosystem-compatible (OpenClaw, Vercel agent-skills, Claude Code), and composable with Cobot's existing tools and plugins. The LLM discovers available skills from its system prompt and loads them on demand to execute workflows it couldn't perform before.
The skill system targets two horizons: v1 delivers discovery, loading, and execution of skills authored by developers, with lightweight provenance via Nostr npub in skill metadata. Future iterations unlock agent-to-agent skill sharing via FileDrop and self-improving agents that create their own skills — the point where Cobot agents become learning entities.
What Makes This Special
Skills sit at the top of Cobot's stack — pure context/instructions for the LLM. They automatically inherit whatever trust, security, and capability layers exist below. Because every identity in Cobot is a Nostr npub, skill authorship comes with cryptographic provenance without needing a separate trust mechanism. An agent evaluating whether to install a skill asks the same question it asks about any interaction: "do I trust this npub?" This reuses existing infrastructure (pairing today, WoT tomorrow) rather than creating skill-specific auth.
Format compatibility with the emerging agent skills standard means instant access to a growing ecosystem of community-authored skills. Identity-aware provenance means Cobot agents can evaluate skills by who wrote them — a natural defense against compromised skill registries that no other agent runtime can offer because no other runtime has identity infrastructure.
Project Classification
Success Criteria
User Success
Developer (skill consumer):
cobot skill add <github-repo> --skill <name>, available on next runskills/— agent gains new capability with zero code changescobot skill listAgent (autonomous skill user):
react-best-practicesskill from its system prompt, loads it viaload_skill, and follows the skill's guidelines without human promptingBusiness Success
Technical Success
context.system_promptintegrate with existing trust plugin (role: system, automatically treated as authoritative)Measurable Outcomes
skills)Product Scope
MVP Strategy
Approach: Problem-solving MVP — the minimum that makes skills work end-to-end. A developer installs a skill, the agent discovers it at startup, recognizes when to use it, and loads it on demand.
Resource Requirements: Single developer. One new plugin (
skills), one new tool (load_skill), CLI subcommands. No changes to existing plugins.MVP Feature Set (Phase 1)
Core Journeys Supported:
skill addfrom GitHub/Forgejo/local path)load_skill)skills/, restart)skill list,skill show,skill remove)Must-Have Capabilities:
context.system_prompt<available_skills>XML block (name, description, location)load_skilltoolcobot skill addgit clone+ copycobot skill listcobot skill showcobot skill removeskills.pathsandskills.disabledincobot.ymltrustedcontactsPhase 2: Growth (Post-MVP)
cobot skill searchfor community registriesPhase 3: Vision (Future)
Risk Mitigation
Technical Risks:
role: systemand trusted by the LLM; mitigation is provenance checks at install time (npub verification) and quick removal (skill remove)skill add:gitis expected on developer machines; local path install works as fallbackMarket Risks:
Resource Risks:
skill add) could be deferred (manual file placement works), but core plugin + system prompt +load_skilltool are non-negotiable MVPUser Journeys
Journey 1: David installs a community skill (Developer - Success Path)
David is building a Cobot agent that helps with frontend development. He's heard about the Vercel react-best-practices skill and wants his agent to use it. He runs
cobot skill add vercel-labs/agent-skills --skill react-best-practices. The CLI clones the skill into~/.cobot/skills/react-best-practices/, validates the SKILL.md frontmatter, and confirms: "Installed react-best-practices (v1.0.0) by vercel". On nextcobot run, the skill appears in the agent's system prompt. David messages his agent "refactor this component for performance" and the agent loads the skill, follows its guidelines, and delivers optimized code. David realizes he never has to re-explain React best practices to his agent again.Journey 2: Alpha autonomously uses a skill (Agent - Success Path)
Alpha is running with three installed skills:
react-best-practices,git-workflow, andcode-review. A human asks Alpha to "build a React dashboard with charts." Alpha's system prompt lists available skills with trigger descriptions. It recognizes "React" matchesreact-best-practices, callsload_skillto read the full SKILL.md, and discovers multiple topic areas. As it builds components, it follows references in the SKILL.md to load relevant sub-files on demand — reading guidance on server vs client components when making that decision, loading bundle optimization advice when adding chart libraries. The sub-file structure is whatever the skill author chose; the LLM simply follows the references in SKILL.md. The human gets performant code without knowing a skill was involved.Journey 3: David creates a custom skill (Developer - Authoring)
David has a set of Cobot-specific conventions he keeps explaining to his agent. He creates
skills/cobot-plugin-dev/SKILL.mdwith frontmatter:name: cobot-plugin-dev,description: "Guidelines for developing Cobot plugins following architecture patterns". The body references supporting files he organizes however he sees fit — the only requirement is that SKILL.md is at the root. On restart, the skill appears in the agent's available skills. Next time he asks his agent to create a plugin, it loads the skill and follows all conventions — PluginMeta vocabulary, priority bands, co-located tests, factory functions. No more correcting the agent on architecture patterns.Journey 4: David troubleshoots a skill issue (Developer - Edge Case)
David installs a skill from an unknown GitHub author. He runs
cobot skill add someuser/ai-skills --skill prompt-engineering. The install succeeds but shows a notice: "Author npub: npub1abc... (unknown identity — not in your trust network)". David runscobot skill listand sees the skill flagged as "unverified author." He inspects the SKILL.md manually, decides it looks fine, and keeps it. Later, when the skill produces unexpected guidance, he cancobot skill remove prompt-engineeringin seconds. The provenance warning gave him the information to make an informed decision.Journey Requirements Summary
skill addwith GitHub/Forgejo integration, frontmatter validation, skill directory managementload_skilltool, relative path resolution for sub-files referenced in SKILL.mdskill listwith provenance display,skill remove, npub author verification noticeCLI/Developer Tool Specific Requirements
Command Structure
Source detection:
./path,/absolute/path,~/home/pathhttps://forgejo.tail593e12.ts.net/ultanio/skills,https://github.com/user/repouser/repo(resolves to GitHub by default)Configuration Schema
Implementation Considerations
cli.commandsextension point (same pattern as pairing, subagent)git clonefor remote sources — forge-agnostic (GitHub, Forgejo, GitLab)paths.skillsalready exists incobot.yml.example— skills plugin reads from thistrustedcontacts list — no new trust infrastructureFunctional Requirements
Skill Discovery & Loading
context.system_promptextension pointskills.disabledconfig) from discoverySkill Execution
load_skilltoolload_skilltool can resolve relative file paths referenced in SKILL.md against the skill's root directoryread_file) to load sub-files referenced within a loaded skillSkill Installation (CLI)
cobot skill add <user/repo> --skill <name>cobot skill add <url> --skill <name>cobot skill add <path>--skill <name1> <name2>Skill Management (CLI)
cobot skill list, showing name, description, source, and authorcobot skill show <name>cobot skill remove <name>Skill Authoring
Skill Format & Compatibility
name(required),description(required),author(optional npub),version(optional)Provenance & Trust
trustedcontacts list incobot.ymltrustedlist or missing) during installation and listingConfiguration
skills.pathsincobot.ymlskills.disabledincobot.ymlNon-Functional Requirements
Performance
load_skilltool returns skill content within the same latency asread_filefor equivalent file sizescobot skill addfrom a remote git source completes within network latency + 5 seconds for post-processing (clone, validate, copy)Security
role: system) — the existing trust plugin's trust model applies without modificationload_skilltool restricts file reads to within the skill's own directory — no path traversal outside the skill rootCompatibility
nameanddescriptionfrontmatter) work without Cobot-specific modificationsauthornpub) are ignored by other platforms — no breaking changes to the specMaintainability