A privacy-first AI agent that learns your workflows and turns them into one-click Skills.
Project description
SkillCapture ๐ง
A privacy-first, local AI agent that watches your daily chats, automatically learns your repetitive workflows, and turns them into one-click Skills โ all stored safely on your own hard drive.
Built with FastMCP ยท Works with Claude Desktop, Cursor, Windsurf, and any MCP-compatible client.
How It Works
SkillCapture uses a two-tier pipeline inspired by how human memory consolidation works:
Day 1 โ Lightweight Draft (Cheap)
The AI scans your chat log and extracts potential workflows into a flat JSON cache. No heavy processing โ just keywords and action summaries.
Day 2 โ Heavy Promotion (Only on Match)
If you repeat a workflow, the system detects the keyword overlap and only then triggers the expensive generation: building a full, reusable Skill with named variables, step-by-step actions, and trigger phrases.
DISCOVERED โ PENDING โ PROMOTED โ DEPRECATED
(Day 1) (Cache) (Vault) (30d unused)
The Storage Architecture
| Layer | Location | Purpose |
|---|---|---|
| The Sandbox | data/pending.json |
Lightweight Day 1 cache โ fast read/write |
| The Vault | skills/*.md |
Promoted skills as human-readable Markdown with YAML frontmatter |
| The Index | skills/index.json |
Ultra-light manifest so the AI never overloads its context window |
Skills are stored as Markdown files โ you can read, edit, and version-control them with Git.
Quick Start
1. Install
Python (uvx / pipx) ๐
uvx skill-capture-mcp
# or
pipx install skill-capture
2. Configure your LLM provider
cp .env.example .env
# Edit .env with your provider and API key
SkillCapture ships with three built-in providers. Set LLM_PROVIDER in .env:
| Provider | LLM_PROVIDER |
API Key Env Var | Default Model |
|---|---|---|---|
| OpenAI | openai |
OPENAI_API_KEY |
gpt-4o-mini |
| Anthropic | anthropic |
ANTHROPIC_API_KEY |
claude-sonnet-4-20250514 |
| Google Gemini | gemini |
GOOGLE_API_KEY |
gemini-2.0-flash |
Extensible: Need a different provider? Implement the
LLMClient.chat()interface incore/providers.py.
3. Run the MCP Server
skill-capture-mcp
# (or `npx @YOUR_USERNAME/skill-capture-mcp`)
Then connect from Claude Desktop, Cursor, Windsurf, or any MCP-compatible client.
4. Connect to your MCP client
Claude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"skill-capture": {
"command": "python",
"args": ["/absolute/path/to/skill-capture/server.py"],
"env": { "LLM_PROVIDER": "openai", "OPENAI_API_KEY": "sk-..." }
}
}
}
Cursor
Add to ~/.cursor/mcp.json (global) or .cursor/mcp.json (project):
{
"mcpServers": {
"skill-capture": {
"command": "skill-capture-mcp",
"args": [],
"env": { "LLM_PROVIDER": "openai", "OPENAI_API_KEY": "sk-..." }
}
}
}
Windsurf
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"skill-capture": {
"command": "skill-capture-mcp",
"args": [],
"env": { "LLM_PROVIDER": "openai", "OPENAI_API_KEY": "sk-..." }
}
}
}
Codex CLI
Run:
codex mcp add skill-capture -- skill-capture-mcp
Or add to ~/.codex/config.toml:
[mcp_servers.skill-capture]
type = "stdio"
command = "skill-capture-mcp"
args = []
[mcp_servers.skill-capture.env]
LLM_PROVIDER = "openai"
OPENAI_API_KEY = "sk-..."
CLI Mode
Don't need MCP? Use SkillCapture standalone from the terminal:
skill-capture-cli analyze # Run the Day 1/Day 2 pipeline
skill-capture-cli list # List all promoted skills
skill-capture-cli pending # View pending drafts in the sandbox
skill-capture-cli run "Deploy App" # Load and display a specific skill
MCP Tools
Once connected, your AI client has access to these tools:
| Tool | Description |
|---|---|
list_skills() |
Browse all promoted skills (reads the lightweight index) |
run_skill(name) |
Load the full content of a specific skill from the Vault |
analyze_today() |
Manually trigger the Day 1/Day 2 pipeline |
get_pending() |
View workflow drafts sitting in the sandbox |
Project Structure
skill-capture/
โโโ data/
โ โโโ pending.json # The Sandbox
โโโ skills/
โ โโโ index.json # The Index
โ โโโ *.md # The Vault
โโโ logs/ # Daily chat logs (input)
โโโ core/
โ โโโ models.py # Two-tier Pydantic schemas
โ โโโ storage.py # File-system I/O layer
โ โโโ evaluator.py # LLM client interface + evaluator logic
โ โโโ providers.py # OpenAI, Anthropic, Gemini clients
โ โโโ scheduler.py # APScheduler nightly worker
โโโ server.py # FastMCP server
โโโ cli.py # Standalone CLI interface
โโโ requirements.txt
Tech Stack
- Python โ Core language
- FastMCP โ Model Context Protocol server framework
- Pydantic โ Structured data validation
- OpenAI ยท Anthropic ยท Google Gemini โ LLM providers (swappable)
- python-frontmatter โ Markdown + YAML parsing
- APScheduler โ Background task scheduling
Contributing
Contributions are welcome! Some ideas:
- ๐ Add more LLM providers (Ollama, local models)
- ๐จ Build the web UI for skill management
- ๐ Add usage analytics and skill effectiveness tracking
- ๐งช Improve the keyword matching with embeddings
- ๐ Add support for more chat log formats
License
MIT License โ see LICENSE for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file skill_capture-1.0.0.tar.gz.
File metadata
- Download URL: skill_capture-1.0.0.tar.gz
- Upload date:
- Size: 17.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ed9bf8a593f3fb8d2cd937c9e8d4e997c53fb62f8019b611d2c622028ab070bc
|
|
| MD5 |
4937ce649f087d398d6bb50d015a79ba
|
|
| BLAKE2b-256 |
a08038db1e710fdece255d47ed252ac6fb1d4e12f9e560a142cecb6a5025f0df
|
File details
Details for the file skill_capture-1.0.0-py3-none-any.whl.
File metadata
- Download URL: skill_capture-1.0.0-py3-none-any.whl
- Upload date:
- Size: 17.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1e9f5caaeb9bffaf18994f844b9fb8bc0f5dd10ff1a24eee60432f19785112f8
|
|
| MD5 |
60024575e777c48fa0dc5db3519d08ca
|
|
| BLAKE2b-256 |
458d78bffaca65fe67a7447d3b676ac114f1eb8da4a720088b6cded88585f27b
|