Problem
intent maintainer review treats every SKILL.md under a skills/ directory as a library skill, including skills in hidden agent directories such as .claude/skills/. These are repository-local agent skills: they are not published and declare no sources. Review reports each one as pending, and recording fails, so maintainer check cannot pass in a repository that has project-level agent skills.
maintainer setup already excludes these paths when it registers existing skills, so the two commands disagree on what a library skill is.
Reproduction
In a pnpm workspace with one package skill and one project-level Claude Code skill:
.claude/skills/add-a-package/SKILL.md # repository-local agent skill, no sources
packages/client/skills/client-core/SKILL.md
_artifacts/{domain_map.yaml,skill_spec.md,skill_tree.yaml}
pnpm exec intent maintainer setup
pnpm exec intent maintainer review --updated "Initial review."
pnpm exec intent maintainer check
maintainer setup registers only packages/client/skills/client-core/SKILL.md, as expected.
maintainer review --updated fails:
Review skill:.claude/skills/add-a-package/SKILL.md has unresolved source evidence. Fix the source mapping before recording it.
maintainer check reports:
Review skill .claude/skills/add-a-package/SKILL.md: No source paths declared. Add the evidence used to author this skill.
Adding .claude/** to review.ignore in skill_tree.yaml does not help: that list filters unmapped changes, not skill discovery.
Cause
Review selects skill files with a path test only (review.ts#L565-L572):
basename(path) === 'SKILL.md' &&
(/(^|\/)skills\//.test(path) || /* ... */)
Setup applies the same test and also skips hidden segments and node_modules (existing.ts#L74-L83):
basename(path) === 'SKILL.md' &&
/(^|\/)skills\//.test(path) &&
!path
.split('/')
.some((part) => part.startsWith('.') || part === 'node_modules')
Expected
Review discovers the same default set as setup: hidden agent directories (.claude/, .cursor/, .agents/, …) stay out unless the skill tree declares the path explicitly, or review state already records it.
Suggested fix
Apply the hidden-segment filter of existing.ts to the /(^|\/)skills\// branch in review.ts, and keep the customRoots, declaredSkills and review-state branches as they are. A shared helper would keep the two rules from drifting again.
Environment
@tanstack/intent preview https://pkg.pr.new/@tanstack/intent@292 (commit 80ed89d), source checked against main at 305ca7f
- Node.js 24.21, pnpm 12.3.4, macOS arm64
Problem
intent maintainer reviewtreats everySKILL.mdunder askills/directory as a library skill, including skills in hidden agent directories such as.claude/skills/. These are repository-local agent skills: they are not published and declare nosources. Review reports each one as pending, and recording fails, somaintainer checkcannot pass in a repository that has project-level agent skills.maintainer setupalready excludes these paths when it registers existing skills, so the two commands disagree on what a library skill is.Reproduction
In a pnpm workspace with one package skill and one project-level Claude Code skill:
maintainer setupregisters onlypackages/client/skills/client-core/SKILL.md, as expected.maintainer review --updatedfails:maintainer checkreports:Adding
.claude/**toreview.ignoreinskill_tree.yamldoes not help: that list filters unmapped changes, not skill discovery.Cause
Review selects skill files with a path test only (
review.ts#L565-L572):Setup applies the same test and also skips hidden segments and
node_modules(existing.ts#L74-L83):Expected
Review discovers the same default set as setup: hidden agent directories (
.claude/,.cursor/,.agents/, …) stay out unless the skill tree declares the path explicitly, or review state already records it.Suggested fix
Apply the hidden-segment filter of
existing.tsto the/(^|\/)skills\//branch inreview.ts, and keep thecustomRoots,declaredSkillsand review-state branches as they are. A shared helper would keep the two rules from drifting again.Environment
@tanstack/intentpreviewhttps://pkg.pr.new/@tanstack/intent@292(commit80ed89d), source checked againstmainat305ca7f