[bug] push --all skips an edited skill that pull kept after a project switch
Maintainers usually reply within 1 day
A pull request for this has already been merged.
- #1022 by @SaulMoro — merged
Assessment
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Newbie friendliness
- 25/100
- Issue type
- Bug
- Clarity
- Clearly specified
- Activity status
- Stale
- Tech stack
- git, typescript
Research direction
Start in src/resources/skills.ts at scanLocalForPush, where the third pass fills blockedSkills (around lines 574-583) and the continue at line 641 skips them. Check how deliveredHashes from #822 records the copy teamai wrote. The "Kept skill" warning comes from src/pull.ts at lines 347 and 1896. Done when push --all offers an edited skill back to its team path, names an ambiguous skill for --skill, and prints the warning once. Linked PR #1022 is already open against this issue, so review it before starting.
Written by the indexing model from the issue text.
Description
Description
After a member changes projects, pull keeps a skill they edited and says to push it, but push --all doesn't offer it. The skill sits in an inactive namespace, so the skill scan skips it. The only way out is push --skill <path>, which the message doesn't mention.
pull (projects: svc-a → svc-b)
a-skill was edited, so pull keeps it (#865)
"Kept skill "a-skill" (claude): … Push or back them up, then delete it manually." src/pull.ts:347 and :1896, both fire
push --all
SkillsHandler.scanLocalForPush src/resources/skills.ts:538
third pass: every skill in a namespace the scope doesn't select → blockedSkills :574-583
if (blockedSkills.has(dir)) continue :641
"No new or modified resources to push"
push --skill .claude/skills/a-skill
→ skills/svc-a/a-skill works
Rules don't have this gap. A kept rules/svc-a/a-rule.md is offered by push --all and goes back to rules/svc-a/a-rule.md. The difference is the local layout: a rule keeps its namespace directory, while a skill is delivered flat (.claude/skills/a-skill). The block exists so a member's own skill doesn't get read as an edit of a same-named skill in someone else's namespace.
Expected: push --all offers an edited skill back to its team path when teamai delivered that copy, as it does for rules.
Proposed fix.
- In the skill scan, let a blocked name through when the delivery record (
deliveredHashes, #822) shows teamai wrote that copy. Map it to the one inactive namespace that holds the name. A name that two inactive namespaces hold stays blocked, and push names it with--skill. - A local skill with no record stays blocked, as today.
- Say the "Kept skill" warning once. Today the inactive-namespace cleanup and the Step 3b sweep both print it.
This also covers #913: a workspace delivers its children's skills, and an edit made there has to go back to the child's namespace.
Reproduction
- Team repo with
manifest/projects.yaml(svc-a:skills: [svc-a, payments],svc-b:skills: [svc-b, payments]) andskills/svc-a/a-skill/SKILL.md. Project scope withprojects: [svc-a],teamai pull. - Edit
.claude/skills/a-skill/SKILL.md. teamai projects set svc-b,teamai pull --force:Kept skill "a-skill" (claude): … Push or back them up, printed twice.teamai push --all:No new or modified resources to push.teamai push --all --skill .claude/skills/a-skill:to: skills/svc-a/a-skill.
Environment
- OS: macOS 27.0
- Node.js: v24.21.0
- teamai:
mainat b69f888 - Provider: git (local bare remote)
- AI tool(s): Claude Code
Logs
Where it was found
Found while checking how push would behave in the workspace mode from #913. Reproduced with the built CLI in a sandbox with a local bare team repo and TEAMAI_NONINTERACTIVE=1. The branches each push created confirm the destinations. The PR step failed only because the remote was a local path.
- Dominant language
- TypeScript
- Stars
- 5.7k
- Forks
- 486
- Avg merge
- 15h 14m
- Merged PRs (30d)
- 429
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from Tencent/teamai-cli
-
Difficulty 5/5 Over a week Newbie friendliness 12/100
Tencent/teamai-cli#1670 ·
Maintainers usually reply within 1 day
-
enhancement
Difficulty 5/5 Over a week Newbie friendliness 25/100
Tencent/teamai-cli#1605 · 1 comment ·
Maintainers usually reply within 1 day
-
Difficulty 5/5 Over a week Newbie friendliness 25/100
Tencent/teamai-cli#1589 · 1 comment ·
Maintainers usually reply within 1 day
-
Difficulty 5/5 Over a week Newbie friendliness 20/100
Tencent/teamai-cli#1564 ·
Maintainers usually reply within 1 day
-
[feat] Deepen a team's knowledge: relations across every asset, delivered to every tool, proved on the task bankPossibly taken @Walternater claimed this 3 days ago. Open
Difficulty 5/5 Over a week Newbie friendliness 20/100
Tencent/teamai-cli#1552 · 4 comments ·
Maintainers usually reply within 1 day
All issues in Tencent/teamai-cli
Similar issues
-
ci-cd desktop size:low telemetry-improvement telemetry-round-1
Difficulty 2/5 1-3 hours Newbie friendliness 66/100
vfarcic/dot-agent-deck#2079 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
Maintainers usually reply within 1 day
-
Difficulty 1/5 Under an hour Newbie friendliness 83/100
Maintainers usually reply within 1 day
-
status:in-linear
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
n8n-io/n8n#43006 · 3 comments ·
Maintainers usually reply within 1 day
-
🔊 a11y
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
betagouv/mon-entreprise#4726 ·
Maintainers usually reply within 9 days