Skip to content

maintainer review treats SKILL.md files in hidden agent directories as library skills #294

Description

@viclafouch

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions