Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
04eaf7b
feat(skill): serve packaged skill content from the CLI
SaulMoro Sep 21, 2026
c1ca0ac
refactor(skills): move content to skill-data and deploy a single stub
SaulMoro Sep 21, 2026
6b2f4fc
fix(skills): repair stale commands, broken refs and frontmatter
SaulMoro Sep 21, 2026
d6b0ac0
feat(pull): prune legacy builtin skill directories, gate recall at ru…
SaulMoro Sep 21, 2026
916b514
docs: align the nudge and the guides with CLI-served skills
SaulMoro Sep 21, 2026
42d241c
fix(skills): apply standards review findings
SaulMoro Sep 21, 2026
03be898
fix(skills): apply spec review findings
SaulMoro Sep 21, 2026
61fbde3
fix(skills): prune only directories the CLI owned, gate every content…
SaulMoro Sep 22, 2026
b019895
test(skills): drive the recall gate through the real CLI, guard the s…
SaulMoro Sep 22, 2026
eea67a0
fix(skills): gate skill show on recall, prune Codex's shared dir only…
SaulMoro Sep 22, 2026
2639c55
fix(skills): one resolver for served skills, legacy names kept out of…
SaulMoro Sep 22, 2026
ee25129
fix(skills): prune only files the CLI packaged, let local skills win …
SaulMoro Sep 22, 2026
32b4bf3
fix(skills): close the last recall bypass, uninstall Codex's shared stub
SaulMoro Sep 22, 2026
5578d40
fix(skills): uninstall by the same ownership rule as pull, quote {SKI…
SaulMoro Sep 22, 2026
3ade92d
fix(skills): deploy the stub in reporting-only mode, drop the stale l…
SaulMoro Sep 22, 2026
f605fba
fix(skills): carry the TGit provider guide into the served setup skill
SaulMoro Sep 22, 2026
d4fe118
fix(skills): make the blocked catalog entry unrepresentable, drop uns…
SaulMoro Sep 22, 2026
cb85fbb
fix(skills): keep publishing a skill reachable when recall is off
SaulMoro Sep 22, 2026
fa61cc1
fix(skills): back up what the prune removes, so no edit is a one-way …
SaulMoro Sep 22, 2026
5a0dff0
fix(skills): let no backup failure authorise a delete, give each root…
SaulMoro Sep 22, 2026
5b494c1
fix(skills): stop at a symlinked root, archive only what is retired
SaulMoro Sep 22, 2026
d1e8145
fix(skills): stop at the first link above a skill dir, report a half …
SaulMoro Sep 22, 2026
12cf110
fix(skills): route the nudge and skill publishing where they land, cl…
SaulMoro Sep 22, 2026
dda2e37
fix(skills): pre-push review — gate the nudge on recall, keep bytecod…
SaulMoro Sep 22, 2026
ecc70dd
fix(skills): English-only served content, one link guard for every ca…
SaulMoro Sep 22, 2026
b029329
fix(skills): check every path component below the base for a link, in…
SaulMoro Sep 22, 2026
94081b5
fix(skills): withhold the share hint on read-only sources, route lega…
SaulMoro Sep 22, 2026
bed4c69
fix(skills): deploy and prune built-ins where the tool keeps its skills
SaulMoro Sep 22, 2026
067a020
fix(skills): check an external skills root for a link, keep config-lo…
SaulMoro Sep 22, 2026
899e357
fix(skills): walk the link guard from the scope root, so a linked COP…
SaulMoro Sep 22, 2026
cba3c46
fix(skills): keep generated documents in Simplified Chinese, fail on …
SaulMoro Sep 22, 2026
0e4df71
fix(config): raise NotInitializedError only when the config file is m…
SaulMoro Sep 23, 2026
d19a100
fix(skills): prove ownership by content, not path alone; retire the s…
SaulMoro Sep 23, 2026
493cb63
chore(skills): carry main's skill edits into the served copies after …
SaulMoro Sep 23, 2026
a74e6d0
fix(skills): deploy before pruning, block share on an unloadable conf…
SaulMoro Sep 23, 2026
518dd78
fix(skills): whole-file ownership, stub before its references, no sid…
SaulMoro Sep 23, 2026
5f5b2c1
fix(config): report a broken higher-priority project config even when…
SaulMoro Sep 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ TypeScript, Node 20+, tsup (ESM), Vitest. Commands: `npm run build`, `npx tsc --
- CLI user-facing output must be English. No Chinese in production code. Tests assert English output.
- Keep bilingual docs in sync (`README` / `*.zh-CN.md`, `docs/usage-guide.*`). Behavior changes must update every affected doc (including `docs/designs/`); grep old wording before opening the PR.
- **README 精简**:尽量少改动 README,保持简洁。确需改动时,所有语言版本(`README.md` 及全部 `README.*.md`,改前先 `ls README*` 确认清单)必须全部改完并保持一致。
- **`skill-data/` 与文档同等对待**:那是 agent 真正读到的内容。行为变更必须同步更新受影响的 skill(`core` / `setup` / `wiki` / `share`),并在 PR 前 grep 旧措辞。
- `skill-data/core/references/commands.md` 由 Commander 命令表生成,改动命令或 flag 后运行 `npx vitest run commands-reference -u` 重新生成。
- 部署到 agent 的只有 `skills/teamai/SKILL.md`(发现入口),保持与版本无关:新增工作流是在 `skill-data/` 下加目录 + 在 stub 里加一行,不要把内容写进 stub。
- **奥卡姆剃刀**:避免过早添加新 CLI 命令;非必要不加;优先复用或扩展现有命令与选项。

## PR 前测试
Expand Down
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ All notable changes to this project will be documented in this file. See [standa

### ✨ Features

- Built-in skill content ships inside the npm package and is printed by the installed CLI: `teamai skill get <core|setup|wiki|share> [--full] [--all]`, `teamai skill path <name>` for the directory holding a skill's scripts, and `teamai skill list --json` for the catalog. Agents receive one file, `skills/teamai/SKILL.md`, a discovery stub that points at those commands, so what an agent reads always matches the CLI version it is running. `teamai pull` removes the `team-wiki-codebase`, `teamai-share-learnings` and `teamai/references/*.md` trees earlier releases copied into every agent directory, removing only files whose content a release shipped (an edited file, or a member's own skill under an old name, stays), archiving each removed file under `~/.teamai/removed-skills/<run>/…` first, and keeping any directory that holds a member's own file; `teamai uninstall` removes only the packaged files from CLI-owned skill directories by the same rule. `share` is served only while recall is on and the team source is writable (not a read-only HTTP one), and the end-of-session share reminder is withheld until then too. The served workflows are English; learning and knowledge-base documents are still written in Simplified Chinese, and an existing knowledge base keeps its file names and headings. The legacy names still resolve as aliases (for [#678](https://github.com/Tencent/teamai-cli/issues/678), [#730](https://github.com/Tencent/teamai-cli/issues/730)).

- Hooks, MCP servers and env variables can be scoped by logical project, the second membership axis they lacked. A `hooks/hooks.yaml` hook and an `mcp/mcp.yaml` server accept an optional `projects:` list beside `roles:`, and an `env/env.yaml` variable accepts both. An entry reaches a member when one of the projects its directory is bound to (`teamai projects set`) is listed; `projects: []` reaches nobody, and a directory bound to no project keeps receiving every entry, so nothing changes until a maintainer adds the key. The two axes compose as AND, the way `tools:` and `roles:` already do, so `roles: [frontend] projects: [checkout]` reaches frontend members of checkout rather than everyone on either. Rebinding with `teamai projects set` removes the previous project's entries on the next pull — for env that means the variable leaves `env.sh`, also on a pull that finds the team repo unchanged, so a machine upgrading from a CLI that ignored the keys drops a withheld variable without `--force`, and a refresh that cannot be written there is reported with the path and the way out rather than passing silently under `Already synced`; `teamai doctor` applies the same filter, so a variable correctly withheld is not reported as undelivered, while one that `env.sh` still exports after a rebind is reported until the next pull rewrites the file. An id that `manifest/projects.yaml` does not define produces one warning per pull, and so does a `projects:` key in a team with no projects manifest: the key still filters against the ids in the directory's `config.yaml`, but nothing can validate them. `teamai mcp list`, `teamai hooks list` and `teamai env list` show the restriction, and `pull` reports `Synced 1 of 3 env variable(s)` when scoping withheld some. This is what the keys exist to control: a team with five projects and three MCP servers each gave every member of a role fifteen server processes and fifteen tool lists in the context of every session (for [#668](https://github.com/Tencent/teamai-cli/issues/668)).

- `teamai doctor` now checks what landed for every resource, not only skills and docs. `Rules delivered to <tool>` and `Agents delivered to <tool>` ask the resource handler where an item lands — a rule's filename and content change per tool, an agent's destination comes from its render and its `targets:` — and compare a delivered rule with the bytes the handler renders for that tool, so a `.mdc` whose `globs` drifted from the team rule's `paths:` is reported rather than passing on the presence of its frontmatter keys. An agent is compared with the bytes its render produces, so a copy left behind by an older spec is reported rather than counted as delivered. `Every team agent reaches a tool` names an agent that renders for no installed tool, and is reported whenever a tool is installed to receive agents, including when no agent renders anywhere. Two tools do not read a rules directory and get a check each: `Team rules are active in opencode` fails when `opencode.json` stops listing the glob that makes the delivered `.md` files load at all, and `Team rules are inlined in Hermes SOUL.md` compares the managed block of `SOUL.md` with what the team rules inline to. `MCP servers delivered to <tool>` compares each server the team resolves for a tool with the entry in that tool's own config — the entry, not the name, since reconciliation leaves an entry teamai does not own alone, so an unrelated server under a team name holds the key while the team's definition never arrives — and names any the reconcile skipped with its reason, so an unresolved `${VAR}` is reported with the variable instead of being mentioned once during a pull and never again. An `mcp.yaml` that does not parse is reported as `Team MCP servers can be read` rather than read as a team shipping no MCP at all. `Env variables injected in shell profile` stops at the marker comment no longer: it checks that `env/env.yaml` parses and declares its variables under `variables:` (an explicit `variables: []` is an empty configuration and fails nothing), that each reached `env.sh` with the declared value — read back through the generator's own inverse, so a multiline value quoted across several lines is matched rather than reported stale — and that the injected block would actually load it. The two expensive registries, rules and agents, are built for `teamai doctor` only, so the checks at the end of a pull keep their budget (for [#624](https://github.com/Tencent/teamai-cli/issues/624)).
Expand Down
3 changes: 3 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ TypeScript, Node 20+, tsup (ESM), Vitest. Commands: `npm run build`, `npx tsc --
- CLI user-facing output must be English. No Chinese in production code. Tests assert English output.
- Keep bilingual docs in sync (`README` / `*.zh-CN.md`, `docs/usage-guide.*`). Behavior changes must update every affected doc (including `docs/designs/`); grep old wording before opening the PR.
- **README 精简**:尽量少改动 README,保持简洁。确需改动时,所有语言版本(`README.md` 及全部 `README.*.md`,改前先 `ls README*` 确认清单)必须全部改完并保持一致。
- **`skill-data/` 与文档同等对待**:那是 agent 真正读到的内容。行为变更必须同步更新受影响的 skill(`core` / `setup` / `wiki` / `share`),并在 PR 前 grep 旧措辞。
- `skill-data/core/references/commands.md` 由 Commander 命令表生成,改动命令或 flag 后运行 `npx vitest run commands-reference -u` 重新生成。
- 部署到 agent 的只有 `skills/teamai/SKILL.md`(发现入口),保持与版本无关:新增工作流是在 `skill-data/` 下加目录 + 在 stub 里加一行,不要把内容写进 stub。
- **奥卡姆剃刀**:避免过早添加新 CLI 命令;非必要不加;优先复用或扩展现有命令与选项。

## PR 前测试
Expand Down
2 changes: 1 addition & 1 deletion docs/designs/git-native-memory.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@
1. `src/types.ts` — LearningDoc, SearchIndex types
2. `src/utils/search-index.ts` — buildIndex(), loadIndex(), search() with Intl.Segmenter
3. `src/pull.ts` — syncLearnings() step + index rebuild
4. `skills/teamai-share-learnings/SKILL.md` — frontmatter 标准化
4. `skill-data/share/SKILL.md` — frontmatter 标准化(由 `teamai skill get share` 提供,不再部署到各 agent)
5. Tests: index build, search, CJK, edge cases

### Phase 2: Recall + Voting
Expand Down
Loading
Loading