[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-80620":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":23,"hasPages":23,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":29,"readmeContent":30,"aiSummary":31,"trendingCount":16,"starSnapshotCount":16,"syncStatus":32,"lastSyncTime":33,"discoverSource":34},80620,"xskill","SkillNerds\u002Fxskill","SkillNerds","Self-evolving skills lib for coding agents","https:\u002F\u002Fxskill.wiki\u002F",null,"Python",65,10,53,15,0,1,7,12,5,49.82,"MIT License",false,"main",[26,27,28],"claude-code","codex","openclaw","2026-06-12 04:01:29","\u003Cdiv align=\"center\">\n\n\u003Cimg src=\"docs\u002Fassets\u002Fheader.png\" width=\"800\" alt=\"xskill — One solves it. Everyone gets it.\">\n\n[![PyPI](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fxskill.svg?style=flat-square&color=E07A5F&label=PyPI)](https:\u002F\u002Fpypi.org\u002Fproject\u002Fxskill\u002F)\n[![Python](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fpyversions\u002Fxskill.svg?style=flat-square&color=4A90B8)](https:\u002F\u002Fpypi.org\u002Fproject\u002Fxskill\u002F)\n[![License](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-5B8C5A?style=flat-square)](LICENSE)\n[![GitHub](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fgithub-SkillNerds%2Fxskill-D4A574?style=flat-square&logo=github&logoColor=white)](https:\u002F\u002Fgithub.com\u002FSkillNerds\u002Fxskill)\n\n**English** · [简体中文](.\u002FREADME.zh-CN.md)\n\n\u003C\u002Fdiv>\n\n\u003Cbr>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fassets\u002Fdemo.gif\" width=\"700\"\n       alt=\"A coding agent listing the Skills xskill distilled from past sessions\">\n\u003C\u002Fp>\n\n\u003Cbr>\n\n## What problem it solves\n\nYour coding agent re-derives the same solution every time it bumps into a familiar problem. You either re-explain it, or hand-maintain a prompt library that quietly rots when no one is looking.\n\nWith xskill running, that work goes away:\n\n- Patterns that actually worked get distilled into Skill files your agent loads automatically.\n- The library grows itself as you keep using your agent — no review queue, no one curating \"best practices.\"\n- When you edit a Skill by hand, xskill picks up your edit immediately and learns from it.\n- A new Skill version only replaces the old one if it measurably serves users better (UX-driven evolution, not naive LLM self-grading).\n\n## Get started\n\n```bash\npip install xskill          # Python 3.9+\nxskill serve                # writes ~\u002F.xskill\u002Fconfig.yaml, then exits\n```\n\nOpen `~\u002F.xskill\u002Fconfig.yaml` and fill in two model endpoints:\n\n```yaml\nskill_dir: ~\u002F.xskill\u002Fskill\n\nllm:\n  base_url: https:\u002F\u002Fapi.deepseek.com\n  model:    deepseek-v4-flash\n  api_key:  YOUR_KEY\n\nembedding:\n  # DeepSeek does NOT provide embeddings. Alternatives:\n  # Alibaba DashScope:  base_url=https:\u002F\u002Fdashscope.aliyuncs.com\u002Fcompatible-mode\u002Fv1  model=text-embedding-v4\n  # OpenAI:             base_url=https:\u002F\u002Fapi.openai.com\u002Fv1                          model=text-embedding-3-small\n  # Ollama (local):     base_url=http:\u002F\u002Flocalhost:11434\u002Fv1                          model=nomic-embed-text\n  base_url: https:\u002F\u002Fdashscope.aliyuncs.com\u002Fcompatible-mode\u002Fv1\n  model:    text-embedding-v4\n  api_key:  YOUR_KEY\n  dim:      0\n```\n\nRun `xskill serve` again — it auto-detects every supported agent on your machine (Claude Code, Codex, OpenCode, OpenClaw, Cursor, Trae) and starts watching. To also index an archive of older trajectories:\n\n```bash\nxskill registry add \u002Fpath\u002Fto\u002Ftrajectories\n```\n\n### Rate limiting (cloud-plan users)\n\nDefault `watcher.max_concurrent: 4` is conservative and OK for accounts without\na hard concurrency cap. If your provider has RPM\u002FTPM quotas (OpenAI Tier-1,\nAzure 60 RPM, OneAPI, etc.) add `rate_limit` under `llm`:\n\n```yaml\nllm:\n  base_url: https:\u002F\u002Fapi.deepseek.com\n  model:    deepseek-v4-flash\n  api_key:  YOUR_KEY\n  rate_limit:\n    rpm: 60          # match your provider plan\n    tpm: 100000      # optional within rate_limit\n    burst: 10        # optional; default = ceil(rate\u002F6)\n```\n\nBuckets are shared per `base_url` across `utils\u002Fllm` and `agno_factory`\npaths, so the same key is never double-debited. Self-hosted vLLM \u002F high-tier\naccounts should leave `rate_limit` out and raise `max_concurrent` to 20-30.\n\nDesign rationale: `docs\u002Fadr\u002F0001-rate-limit-diy-not-litellm.md`.\n\n## Team mode — the killer use case\n\nThe way xskill really wants to be deployed in an organization is team mode: one machine is the server, everyone else joins as a thin client, and the whole team works against the same evolving Skill library.\n\n```bash\nxskill serve --server                        # prints a join token\nxskill connect \u003Chost:port> --token \u003Ctoken>\n```\n\n- **Silently distill your top performers.** When one person solves something in their own work, the rest of the team gets that solution automatically — nobody has to write it down. (Capability democratized.)\n- **Any coding workflow plugs in.** Codex, Claude Code, Cursor IDE — pick whatever; everyone joins the same library, synced across tools.\n- **Trajectories stay private.** Sessions are redacted before upload; agent privacy built in.\n- **A\u002FB-driven evolution.** A Skill change is measured per person before it spreads — the more people in the team, the faster and sharper the evolution.\n- **Experts can teach manually.** When an expert edits a Skill locally, the change is pulled into the server as `user-staging\u002F\u003Cclient_id>` and feeds the next round of evolution.\n\n## Architecture\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fassets\u002Farchitecture.svg\" width=\"900\"\n       alt=\"xskill architecture: agent ecosystems → trajectory watcher → atom splitter → skill router → skill edit agent → canary A\u002FB → skill repository ↔ team mode\">\n\u003C\u002Fp>\n\n## How it works\n\nA few narrow LLM agents do the work. One splits a trajectory into single-intent Atoms; one routes each Atom to a Skill; one rewrites the `SKILL.md` once a Skill has enough material; one A\u002FB-tests new versions on live traffic and keeps the winner. Every Skill is its own git repository, so every change is versioned and reversible. Details: [`docs\u002Fagent.md`](docs\u002Fagent.md).\n\n## Works with your agents\n\n| Agent | Status | Trajectory ingest | Skill install |\n| ----- | ------ | ----------------- | ------------- |\n| **Claude Code** | ✅ verified | auto-detects `~\u002F.claude\u002Fprojects\u002F` | symlink → `~\u002F.claude\u002Fskills\u002F\u003Cname>\u002F` |\n| **Codex CLI** | ✅ verified | auto-detects `~\u002F.codex\u002Fsessions\u002F` | symlink → `~\u002F.agents\u002Fskills\u002F\u003Cname>\u002F` |\n| **OpenCode** | ✅ verified | SQLite `~\u002F.local\u002Fshare\u002Fopencode\u002Fopencode.db` | symlink → `~\u002F.agents\u002Fskills\u002F\u003Cname>\u002F` |\n| **OpenClaw** | 🟡 implemented, not well tested | auto-detects `~\u002F.openclaw\u002Fagents\u002F` | copy → `~\u002F.agents\u002Fskills\u002F\u003Cname>\u002F` |\n| **Cursor** | 🟡 implemented, not well tested | auto-detects `~\u002F.cursor\u002Fprojects\u002F*\u002Fagent-transcripts\u002F` | symlink → `~\u002F.cursor\u002Fskills\u002F\u003Cname>\u002F` |\n| **Trae** | 🟡 implemented, not well tested | IDE: `%APPDATA%\u002FTrae*\u002FUser\u002FworkspaceStorage\u002F*\u002Fstate.vscdb`; CLI: `~\u002Ftrajectories\u002Ftrajectory_*.json` | symlink → `~\u002F.trae-cn\u002Fskills\u002F` and\u002For `~\u002F.trae\u002Fskills\u002F` |\n| **Any other agent** | manual | SDK: `xskill.adapters.submit_trajectory` | copy or symlink the `SKILL.md` directory |\n\n## Concepts\n\n| Term | Meaning |\n| ---- | ------- |\n| **Trajectory** | One agent run — the transcript of a session. Stored as `traj_*.md`. |\n| **Atom** | The smallest single-intent slice of a trajectory. Routing happens at this level. |\n| **Skill** | A `SKILL.md` plus optional scripts, in its own versioned git directory. |\n| **Canary** | A live-traffic A\u002FB test of the current Skill against a new candidate. |\n| **UX score** | How well a Skill served the user on a given Atom, scored 1–10 from the interaction itself. The canary keeps whichever version scores higher. |\n\n## Roadmap\n\n- More agent adapters — Goose, OpenHands, Aider\n- More mature user profiling and recommendation\n- Native MCP server interface (Skills exposed as tools)\n- Web UI for browsing the library and viewing canary stats\n- Skill marketplace — import \u002F export portable bundles\n- Multi-tenant libraries (per-team `skill_dir`)\n\n## News\n\n- **2026-05-23** — Officially open-source, `v0.5.0` released: team mode (client-server), trajectory redaction, Python 3.9 support, no `git` binary needed at runtime. See the [release notes](https:\u002F\u002Fgithub.com\u002FSkillNerds\u002Fxskill\u002Freleases\u002Ftag\u002Fv0.5.0).\n- **2026-05-20** — MIT-licensed open source; on PyPI: `pip install xskill`.\n- **2026-05-12** — Claude Code, Codex, OpenCode supported; OpenClaw and Cursor connected.\n- **2026-05-29** — Trae IDE \u002F Trae Agent adapter: workspaceStorage chat ingest + skill install to `~\u002F.trae-cn\u002Fskills` \u002F `~\u002F.trae\u002Fskills`.\n\n## License\n\nMIT © [370025263](https:\u002F\u002Fgithub.com\u002F370025263). See [LICENSE](LICENSE).\n","SkillNerds\u002Fxskill 是一个用于编码代理的自我进化技能库。该项目通过自动提炼实际工作中有效的模式并将其保存为技能文件，使得编码代理能够自动加载这些技能，从而避免了重复解决相同问题的情况。xskill 的核心功能包括自动技能更新、用户编辑即时学习以及基于用户体验驱动的技能版本迭代。技术上，它支持多种模型端点，并且可以自动检测和监视本地机器上的多个代理。适合需要提高开发效率、减少重复劳动的开发者或团队使用，在持续集成、自动化测试等场景中尤为有用。",2,"2026-06-11 04:01:23","CREATED_QUERY"]