intent list discovers skill-enabled packages and prints available skills.
npx @tanstack/intent@latest list [--json] [--debug] [--global] [--global-only] [--show-hidden] [--no-notices]npx @tanstack/intent@latest list [--json] [--debug] [--global] [--global-only] [--show-hidden] [--no-notices]SOURCE is a lightweight indicator showing whether the selected package came from local discovery or explicit global scanning. When both local and global packages are scanned, local packages take precedence.
--json prints an adapter-friendly skill list:
{
"skills": [
{
"use": "@tanstack/query#fetching",
"packageName": "@tanstack/query",
"packageRoot": "/path/to/project/node_modules/@tanstack/query",
"packageVersion": "5.0.0",
"packageSource": "local",
"skillName": "fetching",
"description": "Query data fetching patterns",
"type": "skill (optional)",
"framework": "react (optional)"
}
],
"packages": [
{
"name": "@tanstack/query",
"version": "5.0.0",
"source": "local",
"packageRoot": "/path/to/project/node_modules/@tanstack/query",
"skillCount": 1
}
],
"hiddenSourceCount": 1,
"hiddenSources": [
{
"name": "hidden-package",
"skillCount": 1
}
],
"warnings": ["string"],
"conflicts": [
{
"packageName": "string",
"chosen": {
"version": "string",
"packageRoot": "string"
},
"variants": [
{
"version": "string",
"packageRoot": "string"
}
]
}
]
}{
"skills": [
{
"use": "@tanstack/query#fetching",
"packageName": "@tanstack/query",
"packageRoot": "/path/to/project/node_modules/@tanstack/query",
"packageVersion": "5.0.0",
"packageSource": "local",
"skillName": "fetching",
"description": "Query data fetching patterns",
"type": "skill (optional)",
"framework": "react (optional)"
}
],
"packages": [
{
"name": "@tanstack/query",
"version": "5.0.0",
"source": "local",
"packageRoot": "/path/to/project/node_modules/@tanstack/query",
"skillCount": 1
}
],
"hiddenSourceCount": 1,
"hiddenSources": [
{
"name": "hidden-package",
"skillCount": 1
}
],
"warnings": ["string"],
"conflicts": [
{
"packageName": "string",
"chosen": {
"version": "string",
"packageRoot": "string"
},
"variants": [
{
"version": "string",
"packageRoot": "string"
}
]
}
]
}When the same package exists both locally and globally and global scanning is enabled, intent list prefers the local package. When project node_modules exists, intent list scans it. In Yarn PnP projects without usable node_modules, intent list uses Yarn's PnP API.
package.json#intent.skills is the allowlist that decides which discovered packages are surfaced. Only listed packages contribute skills.
{
"intent": {
"skills": ["@tanstack/query", "workspace:@scope/internal"]
}
}{
"intent": {
"skills": ["@tanstack/query", "workspace:@scope/internal"]
}
}Each entry is one source:
The list as a whole has three special forms:
A package that ships skills but is not listed is dropped. When packages are dropped this way, Intent prints one summary line naming them so you can opt in. In agent sessions, hidden sources are reported by count only; run intent list --show-hidden outside the agent session to review candidates. A listed package that was not discovered is reported as well. Matching is currently by package name. See Configuration and Trust model.
Package excludes are hard filters for packages that should not be used in a repo, applied after the allowlist. Intent reads intent.exclude arrays from package.json files while walking from the workspace or project root to the current working directory. Manage persistent excludes with intent exclude add|remove|list.
{
"intent": {
"exclude": ["@tanstack/*devtools*", "@tanstack/router#experimental-*"]
}
}{
"intent": {
"exclude": ["@tanstack/*devtools*", "@tanstack/router#experimental-*"]
}
}A pattern without # excludes a whole package. A pattern with # excludes a single skill (@scope/pkg#search-params), and the skill segment may itself be a glob (@scope/pkg#experimental-*). A pattern may cross package boundaries at skill granularity (*#experimental-*). The #* shortcut (@scope/pkg#*) excludes the whole package. Only exact names and * wildcards are supported on each segment. Bare package-name patterns keep working unchanged.
An excluded package never triggers the unlisted-source warning, because an exclude is an explicit decision rather than an oversight.