codemap.md 4.3 KB

src/skills/

Responsibility

  • Owns metadata-driven OpenCode custom skills shipped with this package
  • Maintains the skill contract artifacts (SKILL.md, README.md, per-skill helper files) that are copied into ${configDir}/skills at install time
  • Preserves a canonical registry boundary: runtime code consumes skill definitions as data, not as executable plugin dependencies
  • Skills are partitioned into orchestrator-only workflows and general-purpose skills for broad reuse

Design

Skill Registry

  • CUSTOM_SKILLS in src/cli/custom-skills-registry.ts is the authoritative skill manifest for bundled skills
  • Each entry maps folder name + sourcePath to an install-time consumer
  • Skills are categorized by purpose and access scope:
Skill Type Purpose
codemap/ General-purpose Repository mapping and codebase documentation skill
clonedeps/ General-purpose Workflow skill for dependency source mirroring and inspection
simplify/ General-purpose Readability and maintainability guidance skill
deepwork/ Orchestrator-only Heavy coding sessions, multi-phase implementation, and risky refactors
verification-planning/ Orchestrator-only Project-specific evidence planning and verification affordances before non-trivial implementation
reflect/ Orchestrator-only Learning from repeated work and suggesting reusable improvements
worktrees/ Orchestrator-only Safe Git worktree lanes for parallel, risky, or isolated work
oh-my-opencode-slim/ Orchestrator-only Plugin configuration and self-improvement guidance

Installation Pipeline

  • install.ts runs installCustomSkill() which recursively copies bundled skill directories into the OpenCode skills directory
  • During plugin release, the files whitelist in package.json must include src/skills so src/skills/** survive npm pack
  • OpenCode plugin startup discovers these installed folders and reads each SKILL.md as a prompt-level contract

Runtime Consumption

  • Files are considered static runtime payload
  • No plugin TS module in src/ imports these files directly
  • They are loaded by OpenCode via filesystem installation at runtime

Flow

  1. Skill Discovery: src/cli/custom-skills-registry.ts defines CUSTOM_SKILLS array with skill metadata
  2. Installation: bun run install delegates to src/cli/install.ts, where installCustomSkills() gates copying of each CUSTOM_SKILLS entry
  3. Validation: installCustomSkill() computes packageRoot, validates sourcePath, then performs a recursive directory copy via copyDirRecursive()
  4. Distribution: During plugin release, package.json files whitelist ensures src/skills/** are included in the published tarball
  5. Runtime Discovery: OpenCode plugin startup discovers installed skill folders and reads each SKILL.md as a prompt-level contract

Integration

Build & Release Dependencies

  • src/cli/custom-skills-registry.ts: Source-of-truth registry consumed by installer and permission helpers
  • src/cli/install.ts: Contains installCustomSkills() and installCustomSkill() functions
  • verify-release-artifact.ts: Enforces artifact completeness by asserting key bundled skill payloads are present in the tarball:
    • src/skills/simplify/SKILL.md
    • src/skills/codemap/SKILL.md
    • src/skills/clonedeps/SKILL.md
    • src/skills/deepwork/SKILL.md
    • src/skills/verification-planning/SKILL.md
    • src/skills/reflect/SKILL.md
    • src/skills/worktrees/SKILL.md
    • src/skills/oh-my-opencode-slim/SKILL.md
  • package.json scripts (verify:release, build) rely on these assets to ensure install-time skill availability

Permission System

  • src/cli/skills.ts:getSkillPermissionsForAgent() auto-populates permission rules for bundled skills when agent policy is derived from built-in recommendations
  • Bundled skills are treated as data payloads with explicit permission boundaries defined in the skill manifests

Skill Contracts

Each skill directory contains:

  • SKILL.md: Skill contract defining name, description, and usage contract
  • README.md: Documentation and examples for the skill
  • Optional helper files and subdirectories for skill-specific functionality

These artifacts are copied verbatim to the OpenCode skills directory during installation and serve as the skill's interface definition.