neoskills
Homebrew-style skill manager for AI coding agents.
neoskills manages portable skill definitions across agent ecosystems (Claude Code, OpenCode, OpenClaw). Browse skills in one place, sync to GitHub, deploy selectively via symlinks, and discover relationships through a built-in ontology graph.
Table of Contents
- Installation
- Quick Start
- How It Works
- Ontology Layer
- Agent Targets
- Operating Modes
- CLI Reference
- Development
Installation
From PyPI (recommended)
pip install neoskills
Or with uv:
uv tool install neoskills
From source
git clone https://github.com/neolaf2/neoskills
cd neoskills
uv sync --dev
uv run neoskills --help
Requirements
- Python 3.13+ (required)
- Git (for tap operations)
- uv (recommended for development)
Quick Start
# 1. Initialize the workspace
neoskills init
# 2. Add a tap (a git-hosted skill repository)
neoskills tap https://github.com/your-org/my-skills
# 3. Browse and search
neoskills list # all skills in your taps
neoskills list --linked # what's deployed to your agent
neoskills search "document processing" # cross-tap search
# 4. Deploy a skill to your agent
neoskills install kstar-loop # copies to tap + symlinks to agent
# 5. Create your own skill
neoskills create my-new-skill -d "What it does" --type task
# 6. Check system health
neoskills doctor
What just happened?
neoskills init created ~/.neoskills/ with a default tap. install found the skill in a tap and created a symlink into your agent's skill directory (e.g., ~/.claude/skills/). Your agent can now use the skill. create scaffolded a new skill with SKILL.md + ontology.yaml.
How It Works
Architecture
~/.neoskills/ # Workspace root
├── config.yaml # Targets, taps, defaults
├── taps/ # Git-cloned skill repositories
│ ├── mySkills/ # Default tap
│ │ └── skills/
│ │ └── <skill-id>/
│ │ ├── SKILL.md # Skill definition (frontmatter + body)
│ │ ├── ontology.yaml # Graph metadata (optional, recommended)
│ │ ├── scripts/ # Executable code (optional)
│ │ ├── references/ # Supporting docs (optional)
│ │ └── assets/ # Media/templates (optional)
│ └── <other-taps>/ # Additional skill sources
└── cache/ # Backups and temp storage
Deployment model
Skills are deployed to agents via per-skill symlinks (zero-copy, instantly reversible):
~/.claude/skills/kstar-loop --> ~/.neoskills/taps/mySkills/skills/kstar-loop
This means:
- One source of truth in your tap (version controlled with git)
- Multiple agents can link the same skill simultaneously
- No copying -- changes to the tap are immediately reflected
- Reversible --
neoskills unlinkremoves the symlink, nothing else
Skill anatomy
Every skill is a directory with at minimum a SKILL.md:
# SKILL.md frontmatter
---
name: my-skill
description: "What this skill does"
author: "Your Name"
tags: [productivity, automation]
targets: [claude-code]
---
# My Skill
Instructions, prompts, and documentation that the agent will read.
Optionally, an ontology.yaml sidecar adds graph metadata (type, domain, lifecycle, edges, versioning). See Ontology Layer.
Ontology Layer
The ontology adds a property graph over your skills -- nodes and typed edges stored as ontology.yaml sidecar files. No external database. The graph materializes from the filesystem at runtime.
Progressive enrichment
Skills don't need full metadata on day one:
| Level | What's present | How to get there |
|---|---|---|
| L0 -- Bare | SKILL.md only | Default for all existing skills |
| L1 -- Tagged | + ontology.yaml with type, domain, tags | neoskills ontology enrich <id> |
| L2 -- Connected | + edges (requires, extends, composes, conflicts) | Author declares relationships |
| L3 -- Governed | + lifecycle state, version, capability manifest | Maintained over time |
Discovery
# Faceted search
neoskills ontology discover --domain agent-architecture --state operational
neoskills ontology discover --type meta --text "compiler"
# Load and inspect the full graph
neoskills ontology load # prints summary: skills, edges, domains
neoskills ontology stats # JSON statistics
Dependencies
neoskills ontology deps kstar-loop --transitive # what it requires
neoskills ontology rdeps kstar-planner --tree # what depends on it
neoskills ontology add-edge skill-a skill-b -t requires
Edge types: requires, extends, composes_with, conflicts_with, supersedes, derived_from.
Lifecycle
Skills move through a state machine:
candidate --> validated --> operational --> refined --> deprecated --> archived
neoskills ontology lifecycle # all skills by state
neoskills ontology transition my-skill validated --reason "tested" # change state
Composition
# Compose skills into a pipeline
neoskills ontology compose source-text-to-markdown research-md-to-latex \
--mode pipeline --name md-to-paper
# Plan a decomposition
neoskills ontology split monolithic-skill sub-a sub-b sub-c
Versioning
neoskills ontology version kstar-loop --bump minor # 0.1.0 -> 0.2.0
Visualization & export
neoskills ontology graph kstar-loop --depth 2 --format mermaid
neoskills ontology export --format json --output graph.json
neoskills ontology export --format dot # Graphviz
Validation
neoskills ontology validate # broken edges, cycles, conflicts
Auto-enrichment
neoskills ontology enrich my-skill # single skill, L0 -> L1
neoskills ontology enrich --all --level L1 --dry-run # preview batch
neoskills ontology enrich --all --level L1 # apply batch
Domain taxonomy
Skills are classified into a two-level hierarchy: agent-architecture, education, document-processing, business, knowledge-work, meta, and more. Domains are auto-inferred from skill names when possible.
See docs/ontology-design.md for the full design document.
Agent Targets
Built-in targets:
| Target | Agent | Skill path |
|---|---|---|
claude-code |
Claude Code | ~/.claude/skills |
opencode |
OpenCode | ~/.config/opencode/skills |
Add custom targets:
neoskills config set targets.my-agent.skill_path /path/to/skills
Operating Modes
- CLI (default) --
neoskillsruns as a standalone command-line tool - Agent-invoked tool -- Claude Code or OpenCode calls neoskills programmatically
- Embedded MCP plugin -- neoskills runs inside Claude Code as an MCP server, exposing 12+ tools including ontology operations
Authentication (for Claude-powered features)
neoskills resolves authentication automatically:
- .env API key -- loads from
./,.neoskills/, or~/.neoskills/.env - SDK subscription reuse -- works inside Claude Code/Desktop without a key
- Disabled -- non-LLM features work without any key (tap, link, list, ontology, etc.)
CLI Reference
Workspace
| Command | Description |
|---|---|
neoskills init |
Create ~/.neoskills/ workspace |
neoskills config set|get|show |
Manage configuration |
neoskills doctor |
Health check (symlinks, config, taps) |
neoskills migrate |
Migrate from v0.2 structure to v0.3+ |
Taps
| Command | Description |
|---|---|
neoskills tap <url> |
Add a tap (git clone) |
neoskills untap <name> |
Remove a tap |
neoskills update [name] |
Pull latest from tap(s) |
neoskills upgrade |
Update all taps + refresh links |
neoskills push |
Commit and push tap to GitHub |
Skills
| Command | Description |
|---|---|
neoskills list [--linked|--available] |
List skills |
neoskills search <query> |
Cross-tap search |
neoskills info <skill_id> |
Detailed skill info |
neoskills create <skill_id> |
Scaffold new skill (SKILL.md + ontology.yaml) |
neoskills install <skill_id> |
One-step deploy (copy + link) |
neoskills uninstall <skill_id> |
Remove (unlink + optionally delete) |
neoskills link <skill_id> |
Create symlink (tap -> target) |
neoskills unlink <skill_id> |
Remove symlink |
Ontology
| Command | Description |
|---|---|
neoskills ontology load |
Build graph, print summary |
neoskills ontology stats |
Graph statistics (JSON) |
neoskills ontology validate |
Check integrity |
neoskills ontology discover |
Faceted search (--domain, --type, --state, --tag, --text) |
neoskills ontology deps <id> |
Dependency tree |
neoskills ontology rdeps <id> |
Reverse dependencies |
neoskills ontology graph <id> |
Neighborhood graph (Mermaid/DOT/JSON) |
neoskills ontology lifecycle |
Skills by lifecycle state |
neoskills ontology transition <id> <state> |
Change state |
neoskills ontology add-edge <src> <tgt> -t <type> |
Add relationship |
neoskills ontology remove-edge <src> <tgt> -t <type> |
Remove relationship |
neoskills ontology version <id> --bump <level> |
Version bump (major/minor/patch) |
neoskills ontology compose <ids...> |
Create composite skill |
neoskills ontology split <id> <names...> |
Decomposition plan |
neoskills ontology enrich [<id>|--all] |
Auto-enrich metadata |
neoskills ontology export --format <fmt> |
Export graph (json/mermaid/dot) |
neoskills ontology conflicts |
Report conflict edges |
Advanced
| Command | Description |
|---|---|
neoskills enhance audit|normalize|add-docs|add-tests |
Claude-powered skill enhancement |
neoskills agent list|run |
Autonomous agent operations |
neoskills plugin create|validate |
Plugin scaffolding and validation |
neoskills schedule daily |
Memory-enabled schedule planning |
Development
Setup
git clone https://github.com/neolaf2/neoskills
cd neoskills
uv sync --dev
Commands
uv run pytest -v # run all tests (172 tests)
uv run ruff check src/ # lint
uv run neoskills --help # run from source
Project structure
src/neoskills/
├── cli/ # Click CLI commands
│ ├── main.py # Entry point and command registry
│ ├── create_cmd.py # Skill scaffolding
│ ├── ontology_cmd.py # 17 ontology subcommands
│ └── ... # tap, link, list, doctor, etc.
├── core/ # Cellar, config, checksum, frontmatter, linker
├── ontology/ # Property graph layer (v0.4)
│ ├── models.py # Enums + dataclasses (SkillNode, OntologyEdge, etc.)
│ ├── graph.py # SkillGraph -- in-memory property graph
│ ├── loader.py # Filesystem -> graph
│ ├── writer.py # Graph -> filesystem (ontology.yaml)
│ ├── engine.py # High-level API (OntologyEngine)
│ ├── taxonomy.py # Domain taxonomy + inference
│ ├── lifecycle.py # State machine transitions
│ ├── versioning.py # Semver operations
│ ├── composition.py # Compose/decompose skills
│ ├── export.py # Mermaid, DOT, JSON, ASCII tree
│ └── scaffold.py # Template-based skill creation
├── runtime/ # Agent runtime integrations
│ └── claude/
│ └── plugin.py # MCP plugin (12+ tools)
└── __init__.py
tests/
├── unit/ # 172 tests across 12 test modules
└── integration/ # End-to-end workflow tests
docs/
└── ontology-design.md # Full ontology design document
Release process
# 1. Bump version in pyproject.toml and src/neoskills/__init__.py
# 2. Build and upload
uv build
uv run twine upload dist/*
# 3. Verify
pip install --upgrade neoskills && neoskills --version
License
MIT -- see LICENSE
Author
Richard Tong
Metadata
Release files for neoskills 0.4.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| neoskills-0.4.2.tar.gz | 196.0 kB | Without provenance | Details for neoskills-0.4.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| neoskills-0.4.2-py3-none-any.whl | Python 3 | none | any | Details for neoskills-0.4.2-py3-none-any.whl |
Total release size: 294.3 kB
Release files / neoskills-0.4.2.tar.gz
| Download URL | neoskills-0.4.2.tar.gz |
|---|---|
| Size | 196.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c4f9b22d1a68b5b8fe99bd40af27b00f53df18e9f7ca21edc46c221f5026a328
|
|
BLAKE2b-256 checksum How to use checksums |
2deb516809055f43ea507e7ac645d83e5fc84d3d6ee589505ba413c1c98a27ad
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.1
|
Release files / neoskills-0.4.2-py3-none-any.whl
| Download URL | neoskills-0.4.2-py3-none-any.whl |
|---|---|
| Size | 98.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
60b2f1c3a2488dcec62ed8e53a1a0475ef11867c45f47f6d8b85a2bebbd1da9c
|
|
BLAKE2b-256 checksum How to use checksums |
fa4f0be8aa61ce0a9a48d6a065fd2cdb927025b1f6b5bc8ef8c269e3614308f2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.1
|
Security for neoskills 0.4.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.