v0.5.0 — Team mode + Cursor/OpenClaw + line-anchored atoms
中文版
v0.5.0 是 xskill 的首个 0.5 系列正式版(PyPI 上 0.4.2 之后跳过 alpha 直接 stable)。
本版本核心是 Team 模式(C/S 架构)落地、Cursor / OpenClaw 生态接入、线号锚定的 atom 切分,
以及把运行时对系统 git 的依赖彻底去掉。
重大特性
- Team 模式(多用户客户端-服务端)
- 服务端独占 LLM key 与 git 主分支写权限;客户端只采集、脱敏、上传轨迹,再按 manifest 同步 skill。
xskill serve --server起 server,xskill connect <host:port> --token <t>接客户端。- 服务端按
client_id做 canary 分桶(per-client 而非时间窗),manifest 由 80 ranked + 20 recommended slot 组成。 - 客户端手改隔离在
user-staging/<client_id>分支,只作为参考材料推回,不污染 main。 - 传输用 git bundle,状态用 SQLite 持久化。
- Cursor 生态完整接入:采集 + skill install + Windows 适配 + 导入脚本。
- OpenClaw 生态接入:用
shutil.copytree替代 symlink(OpenClaw 拒绝符号链接),并加 dest→source 回流桥让用户在~/.agents/skills/下的手改能被边吸收管线感知。 - 行号锚定 atom 切分:替换原先靠 LLM 瞎猜 char-offset 的方案,标记格式改成
[line:N],atom 边界稳定可复现。 - Python 3.9 支持:补回
eval_type_backport等运行时依赖,worker 线程显式装事件循环修复 agno 懒加载在 3.9 下的崩溃。
安全 / 隐私
- detect-secrets 脱敏:轨迹上传到 server 前先过 detect-secrets,把 API key、token、credential 等敏感内容 mask 掉。
- 客户端无 LLM API key、无 main 分支写权限——团队中 client 不可信。
体验改进
- recommended-20 改为用户画像质心推荐:基于客户端使用 profile 的 embedding 质心算最近邻,比之前的纯热度排序更贴用户。
- 运行时 dulwich 替代 subprocess git:
pip install xskill后无需系统git,CI / Docker 镜像不再额外装。 - 首次启动自动生成 config 模板,附 example 和注释。
- opencode ingester 修复:正确读 part 表渲染真实对话内容,不再丢消息。
架构 / 内部重构
- 源码按职责拆子包:
pipeline/、skill/、utils/、api/、ecosystems/、agents/、team/{server,client,shared}/。 - 移除 chat archive / SWE-bench sandbox / skill_eval / Evaluator 等历史子系统,砍掉死代码。
- 移除 web 面板遗留的 chat 端点,server 接口收敛到
/api/v1/team/*与 skill 管理。
工程治理
- 添加 OSS 治理文件:issue / PR 模板、CONTRIBUTING、CODEOWNERS、SECURITY。
- README 重写为 outcome-first 风格,加 demo GIF 和 News 板块。
- 新增 Docker E2E:
make e2e覆盖runtime_ecosystem_detect/runtime_openclaw_detect两个场景,用 fake LLM 跑端到端。
已知限制
- 团队模式 server canary 决策仍按
pick_side(client_id, ...)做,多个客户端 ID 经常重置时灰度分桶会失稳——计划在 0.5.x 加入 stable client_id 持久化。 - recommended-20 在用户使用 profile 还很稀疏(首日)时退化为热度排序。
English
v0.5.0 is the first stable release in the 0.5 line of xskill (jumping past the alpha series after 0.4.2 on PyPI).
The headline of this release is the Team mode (client-server architecture) landing, Cursor / OpenClaw ecosystem integrations, line-anchored atom splitting, and dropping the runtime dependency on the system git binary.
Major Features
- Team mode (multi-user client/server)
- Server owns LLM keys and write access to
mainbranches; clients only collect, redact, and upload trajectories, then sync skills per the server-issued manifest. xskill serve --serverstarts the server;xskill connect <host:port> --token <t>registers a client.- Per-client canary bucketing via
pick_side(client_id, ...)(deterministic per-client, no time-window rotation needed); manifests carry 80 ranked + 20 recommended slots. - Client user edits are isolated to
user-staging/<client_id>branches, pushed back as reference material only — they never touchmain. - Git bundle transport; SQLite-backed client registry and state.
- Server owns LLM keys and write access to
- Cursor ecosystem full integration: collector + skill installer + Windows adaptation + import script.
- OpenClaw ecosystem integration: uses
shutil.copytreeinstead of symlinks (OpenClaw rejects symlinks); a dest→source reverse-sync bridge lets user edits under~/.agents/skills/flow back into the absorb pipeline. - Line-anchored atom splitting: replaces the old LLM-guessed char-offset scheme; markers are now
[line:N], atom boundaries are stable and reproducible. - Python 3.9 support: pulled in
eval_type_backport, and worker threads now explicitly install an event loop to fix the agno lazy-import crash on 3.9.
Security / Privacy
- detect-secrets redaction: trajectories pass through detect-secrets before being uploaded to the server; API keys, tokens, and credentials are masked.
- Clients hold no LLM API key and have no write access to
main— clients are untrusted by design.
UX Improvements
- recommended-20 now uses user-profile centroid recommendations: nearest-neighbor over the embedding centroid of each client's usage profile, instead of plain popularity ranking.
- Runtime git via dulwich, replacing all subprocess
gitcalls:pip install xskillno longer needs the systemgitbinary, simplifying CI / Docker images. - First-run auto-generates a config template with examples and inline comments.
- opencode ingester fix: correctly reads the
parttable to render the real conversation content; no more dropped messages.
Architecture / Internal Refactor
- Source tree split into responsibility-scoped subpackages:
pipeline/,skill/,utils/,api/,ecosystems/,agents/,team/{server,client,shared}/. - Removed legacy chat archive, SWE-bench sandbox, skill_eval, and Evaluator subsystems — dead code is gone.
- Removed leftover chat endpoints from the old web panel; server surface area now lives under
/api/v1/team/*and the skill management routes.
Engineering / Governance
- OSS governance files added: issue/PR templates,
CONTRIBUTING,CODEOWNERS,SECURITY. - README rewritten in outcome-first style with a demo GIF and a News section.
- New Docker E2E:
make e2ecoversruntime_ecosystem_detectandruntime_openclaw_detect, end-to-end against a fake LLM.
Known Limitations
- Server-side canary bucketing keys on
client_id; when client IDs are reset frequently, bucket assignment becomes unstable. Persistentclient_idis on the 0.5.x roadmap. recommended-20degrades to popularity ranking on day one when the user-profile signal is still sparse.
Install
pip install xskill==0.5.0Full Changelog
v0.4.2...v0.5.0 — 61 commits.