Configure Intent in the intent object in package.json:
{
"intent": {
"skills": [
"@tanstack/query",
"@acme/*",
"@tanstack/start#routing",
"workspace:@scope/internal"
],
"exclude": ["@tanstack/router#experimental-*"]
}
}| Key | Inheritance rule |
|---|---|
| intent.skills | Uses the nearest non-null declaration between the current directory and the workspace or project root. A nearer declaration replaces its parent; omitted or null values inherit. |
| intent.exclude | Combines arrays from the root through the current directory, then adds excludes passed by the caller. |
intent.skills is a package-source and skill allowlist. A permitted package or skill can:
Default install helps configure permissions on first use. See Existing projects for how it handles saved or inherited configuration, and Trust model for the trust boundaries.
Package selectors permit current and future skills in the package. Exact selectors use <package>#<skill> and permit only that skill. If both match, the package selector takes precedence. intent.exclude is applied afterward and can still block either choice.
Each array entry names one source:
| Entry | Kind | Meaning |
|---|---|---|
| @scope/pkg or pkg | npm | An npm package reachable through the dependency tree, direct or transitive. |
| @scope/pkg#skill | npm | One exact skill in an npm package. |
| workspace:@scope/pkg | workspace | A package in the current workspace. |
| workspace:@scope/pkg#skill | workspace | One exact skill in a workspace package. |
| @scope/* | npm | Every discovered npm package whose name matches the pattern. |
| workspace:@scope/* | workspace | Every discovered workspace package whose name matches the pattern. |
| git:<host>/<repo>#<ref> | git | Reserved. Not yet supported, and rejected until a future version adds it. |
A malformed entry fails the whole command. Intent reports every bad entry at once.
| Form | Result | Notice |
|---|---|---|
| Absent: no effective intent.skills key | Discovery commands surface every discovered package as migration behavior. | Deprecation notice until you configure permissions. |
| Empty: "skills": [] | Surfaces no packages. | Info notice on stderr. |
| Wildcard: "skills": ["*"] | Permits every discovered package across scopes and source kinds, broader than @tanstack/*. | Acknowledged-risk notice: unvetted skills may reach your agent. |
All policy notices go to stderr. Exclusions still apply to these forms.
| Situation | Notice |
|---|---|
| Discovered package is not permitted | Human output names omitted packages in one notice. Agent sessions receive only hidden package and skill counts. |
| Configured package was not discovered | Reports that the package was not discovered. |
| Package was explicitly excluded | No unlisted-source notice. |
Run intent list to see which packages the current policy surfaces.
| Current configuration | Default intent install behavior |
|---|---|
| Saved or inherited intent.skills | Updates guidance only. Keeps permissions unchanged and does not prompt. |
| No effective intent.skills | Starts interactive permission setup. Non-TTY execution fails without writes. |
First-run setup offers Enable all, Choose packages or scopes, and Choose individual skills, followed by one confirmation before saving to the nearest owning package.json and installing guidance.
For example, enabling a scope and unchecking one skill saves:
{
"intent": {
"skills": ["@tanstack/*"],
"exclude": ["@tanstack/ai#skill"]
}
}This permits matching npm packages, including future additions, except the excluded skill. Selecting several packages individually never silently expands to a scope rule.
See Default install for picker controls and cancellation behavior.
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-noticesFor CI or wrapper scripts, set INTENT_NO_NOTICES=1 to suppress notices without changing command arguments.
Discovery and resolution warnings are separate from policy notices and are not suppressed by these options. The acknowledged-risk notice for "skills": ["*"] also remains visible when other notices are suppressed.
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 list{
"intent": {
"exclude": ["@tanstack/*devtools*", "@tanstack/router#experimental-*"]
}
}| Pattern | Excludes |
|---|---|
| @scope/pkg | The whole package. |
| @scope/pkg#search-params | One named skill. |
| @scope/pkg#experimental-* | Matching skills in one package. |
| *#experimental-* | Matching skills across packages. |
| @scope/pkg#* | The whole package, using the #* shortcut. |
Each segment supports exact names and * wildcards only. Excludes apply to both npm and workspace sources with matching names, regardless of source kind.