Intent reads consumer configuration from the intent object in package.json. Two keys control which skills reach your agent: skills (the allowlist) and exclude (the blocklist).
{
"intent": {
"skills": ["@tanstack/query", "workspace:@scope/internal"],
"exclude": ["@tanstack/router#experimental-*"]
}
}{
"intent": {
"skills": ["@tanstack/query", "workspace:@scope/internal"],
"exclude": ["@tanstack/router#experimental-*"]
}
}Intent merges these keys from every package.json between the current working directory and the workspace or project root. A monorepo package inherits the root configuration and adds its own.
intent.skills is the allowlist. Only packages it permits contribute skills to list, load, install, and stale. See Trust model for the reasoning.
Each array entry names one source:
| Entry | Kind | Meaning |
|---|---|---|
| @scope/pkg or pkg | npm | A package reachable through the dependency tree, direct or transitive. |
| workspace:@scope/pkg | workspace | A package in the current workspace. |
| git:<host>/<repo>#<ref> | git | Reserved. Not yet supported, and rejected until a future version adds it. |
A malformed entry fails the whole command, and every bad entry is reported at once. Intent currently matches an allowlist entry against a discovered package by name. This matching will tighten in a future version.
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. A listed package that was not discovered is reported as well.
A project that has not set intent.skills keeps working. Intent surfaces every discovered package and prints the deprecation notice described under the absent form. Nothing breaks. Add an allowlist when you are ready, before a future version requires one. Run intent list to confirm which packages are surfaced.
Use --no-notices to suppress non-critical notices on stderr for one run:
npx @tanstack/intent@latest list --no-notices
npx @tanstack/intent@latest install --map --no-noticesnpx @tanstack/intent@latest list --no-notices
npx @tanstack/intent@latest install --map --no-noticesFor CI or wrapper scripts, set INTENT_NO_NOTICES=1 to suppress notices without changing command arguments.
intent.exclude removes packages or individual skills after the allowlist resolves.
Use intent exclude to manage this list from the CLI:
npx @tanstack/intent@latest exclude add @tanstack/router#experimental-*
npx @tanstack/intent@latest exclude remove @tanstack/router#experimental-*
npx @tanstack/intent@latest exclude listnpx @tanstack/intent@latest exclude add @tanstack/router#experimental-*
npx @tanstack/intent@latest exclude remove @tanstack/router#experimental-*
npx @tanstack/intent@latest exclude list{
"intent": {
"exclude": ["@tanstack/*devtools*", "@tanstack/router#experimental-*"]
}
}{
"intent": {
"exclude": ["@tanstack/*devtools*", "@tanstack/router#experimental-*"]
}
}Pattern grammar:
Only exact names and * wildcards are supported on each segment. Bare package-name patterns keep working unchanged. An excluded package does not trigger the unlisted-source warning, because an exclude is an explicit decision.