A Next.js 15 webapp for managing AI coding agent skills and configurations. Build once, deploy to Claude Code, Cursor, Windsurf, OpenCode, and Codex — with an extensible adapter pattern for adding more tools.
- Skills — Write reusable AI agent instructions in Markdown with YAML frontmatter
- Profiles — Compose skill sets for different use cases (e.g., "python-only", "full-stack")
- Adapters — Automatically translate skills into each tool's native format
- Build & Link — Generate output files and symlink them into each tool's config directory
- Safety — Atomic writes, backups, duplicate detection, manifest tracking
npm install
npm run devOpen http://localhost:3000.
| Layer | Technology |
|---|---|
| Framework | Next.js 15 (App Router, Server Actions, Turbopack) |
| Language | TypeScript (strict) |
| UI | React 19, TailwindCSS 4, Lucide icons |
| Validation | Zod |
| Toasts | sonner |
app/ Pages (App Router)
lib/ Core logic
types.ts Zod schemas, shared types
registry.ts Load skills & profiles from disk
builder.ts Build output files per adapter
linker.ts Symlink management
detector.ts Detect installed AI tools
doctor.ts Health diagnostics
safety.ts Atomic writes, backups, dedup
adapters/ Tool-specific translators
base.ts Abstract BaseAdapter
claude-code.ts Claude Code
cursor.ts Cursor
windsurf.ts Windsurf
opencode.ts OpenCode
codex.ts Codex
agents-md.ts AGENTS.md (cross-tool)
actions/ Next.js Server Actions
skills/ Skill definitions (source of truth)
profiles/ Profile YAML files
dist/ Built output (gitignored)
| Route | Description |
|---|---|
/ |
Dashboard — skill count, profiles, detected tools, health |
/skills |
Browse skills grouped by domain |
/skills/[domain]/[name] |
Skill detail — metadata, activation, content |
/skills/new |
Create a new skill |
/add-skill |
Deploy skills to selected tools |
/install |
Guided wizard — detect → profile → build & link |
/doctor |
Health checks + tool detection |
/profiles |
Profile management |
/projects |
Link skills to project directories |
/mcp |
MCP server configuration |
/settings |
Toolkit info and configuration |
Create skills/<domain>/<skill-name>/SKILL.md:
---
name: my-skill
description: >
What this skill teaches AI agents.
domain: my-domain
version: 1.0.0
tags: [tag1, tag2]
author: your-name
activation:
claude-code: model
cursor: auto
windsurf: model_decision
opencode: model
codex: auto
---
# Skill content in markdownNaming: [a-z0-9]+(-[a-z0-9]+)* — must match directory name.
Create profiles/<name>.yaml:
name: my-profile
description: What this profile is for
include:
- "python/*"
- "devops/*"
exclude: []
tools:
claude-code:
enabled: true
cursor:
enabled: true- Create
lib/adapters/<tool>.ts - Import
BaseAdapterfrom./base(not./index) - Implement:
translateSkill,translateGlobal,getGlobalSymlinkTargets,getProjectSymlinkTargets,getCharacterLimit - Register in
lib/adapters/index.tsand add tool ID tolib/types.ts
| Tool | Global Skills | Project Skills | Format |
|---|---|---|---|
| Claude Code | ~/.claude/skills/ |
.claude/skills/ |
SKILL.md with frontmatter |
| Cursor | ~/.cursor/rules/ |
.cursor/rules/ |
.mdc with frontmatter |
| Windsurf | ~/.codeium/windsurf/memories/ |
.windsurf/rules/ |
.md with trigger frontmatter |
| OpenCode | ~/.config/opencode/skills/ |
.opencode/skills/ |
SKILL.md with frontmatter |
| Codex | ~/.codex/ |
project root | AGENTS.md sections |
- Atomic writes — temp file +
fs.renameprevents partial writes - Backups — existing files backed up to
~/.agent-toolkit-backup/before modification - Duplicate detection — checks for toolkit ownership markers before overwriting
- Manifest tracking — tracks all deployed files with checksums
- AGENTS.md section markers — safe merge without clobbering existing content
- Character limit enforcement — per-tool limits (e.g., Windsurf 12k, Codex 32KB)
MIT