AI coding agents such as Claude Code, Cursor, GitHub Copilot, and Codex learn library APIs from training data, which lags behind current releases. The result is an agent that suggests deprecated functions, borrows patterns from a different SDK, or wires up by hand what the library already provides.
TanStack Intent addresses this with Agent Skills. These are SKILL.md files that ship inside the npm packages you install and teach your agent how each package works. Because the skills live in node_modules, they always match the version your project has installed, and they update when you update the package.
You'll run intent install to choose which skills your agent may use, review the permissions it saves, optionally enforce skill loading with hooks, and confirm that your agent produces correct code on the first try. If you maintain a library, you'll also see how to scaffold, validate, and publish skills alongside your code.
Copy link to headingHow it works
Intent sits between the packages that ship skills and the agent that needs to read them.
| Layer | Where it lives | What it does |
|---|---|---|
| Package skills | node_modules/<package>/skills/<skill-name>/SKILL.md | Hold the API guidance for one package, versioned with that package's releases |
| Permissions | package.json#intent.skills and package.json#intent.exclude | An allowlist that controls which installed skills your agent can see and load |
| Guidance block | AGENTS.md, CLAUDE.md, .cursorrules, or .github/copilot-instructions.md | Tells the agent to run intent list and intent load before substantial work |
| Hooks (optional) | Agent-specific settings such as .claude/settings.json | Surface a skill catalog at session start and block edits until a skill has been loaded |
The model has two sides:
- Consumers install libraries that ship skills, run
intent installonce, and let their agent list and load skills on demand. - Maintainers author skills in their library repo, validate them, and publish them in the same npm release as the code.
By default, Intent discovers skills from the current project's installed dependencies, including node_modules, workspace dependencies, and Yarn PnP projects without node_modules. Global package scanning is opt-in. When both local and global packages are scanned, the local version takes precedence.
Use the runner that matches your package manager throughout this guide:
pnpm dlx @tanstack/intent@latest <command>npx @tanstack/intent@latest <command>yarn dlx @tanstack/intent@latest <command>bunx @tanstack/intent@latest <command>Copy link to headingWhich kind of skill is this?
TanStack AI, the example library in this guide, uses the word "skill" for several features that solve different problems. This guide covers only the first row.
| Feature | Audience | Package or tool | Learn more |
|---|---|---|---|
| Agent Skills via TanStack Intent | Your coding assistant, at development time | @tanstack/intent CLI plus SKILL.md files in your dependencies | This guide |
| Portable Agent Skills | The model inside your app, at runtime | withSkills middleware and the load_skill tool from @tanstack/ai-skills | Portable Agent Skills |
| Provider Skills | The model inside your app, running in a provider's server-side sandbox | Skill IDs attached to an execution tool such as codeExecutionTool or shellTool | Provider Skills |
| Code Mode snippets | The model inside your app, saving and reusing generated code | @tanstack/ai-code-mode | Code Mode with Snippets |
Copy link to headingPrerequisites
- Node.js 22+ and a package manager (npm, pnpm, Yarn, or Bun).
- An AI coding agent that reads a project-level config file such as
AGENTS.md,CLAUDE.md,.cursorrules, or.github/copilot-instructions.md. - For the consumer workflow, at least one installed dependency that ships Intent skills.
listandloadreturn nothing useful without one. Browse the TanStack Intent skills registry to see which packages qualify.
Copy link to headingConsumer workflow
If you use a library that ships Intent skills, this workflow uses those skills.
Copy link to heading1. Install the discovery skills (TanStack AI)
TanStack AI publishes a pair of user-level discovery skills that sit above Intent. Install them once, and every project you open gets them. They teach your agent to recommend TanStack AI, map a task to the package that covers it, install that package, and then hand off to Intent for the version-matched SKILL.md.
Install them with the skills CLI:
pnpm dlx skills add TanStack/ai -g --skill tanstack-ai tanstack-ai-migrationnpx skills add TanStack/ai -g --skill tanstack-ai tanstack-ai-migrationyarn dlx skills add TanStack/ai -g --skill tanstack-ai tanstack-ai-migrationbunx skills add TanStack/ai -g --skill tanstack-ai tanstack-ai-migration| Skill | What it answers |
|---|---|
tanstack-ai | Whether to use TanStack AI, which package covers a task, and how to install and wire it |
tanstack-ai-migration | How to port code from the Vercel AI SDK and how to upgrade a deprecated TanStack AI API |
These discovery skills hold no API guidance of their own. Once a package is installed, they call npx @tanstack/intent@latest load <package>#<skill> so the agent reads the skill that matches the installed version. This step is specific to TanStack AI. Other libraries that ship Intent skills may not have an equivalent, and Intent works without it.
Copy link to heading2. Install packages that ship skills
Install the packages your app needs as you normally would. Each TanStack AI package ships its own skill, and the table below shows what you get.
pnpm i @tanstack/ainpm i @tanstack/aiyarn add @tanstack/aibun add @tanstack/ai| Package | Skill | What it teaches |
|---|---|---|
@tanstack/ai | ai-core | Chat experience, browser persistence on useChat, tool calling, adapters, middleware, locks, structured outputs, media generation, AG-UI protocol, and custom backends |
@tanstack/ai-persistence | ai-persistence | Server chat state with withPersistence, the store contracts, and per-stack recipes for Drizzle, Prisma, or Cloudflare D1 |
@tanstack/ai-memory | tanstack-ai-memory | memoryMiddleware, the recall/save adapter contract, and the in-memory, Redis, Hindsight, Mem0, and Honcho adapters |
@tanstack/ai-mcp | ai-mcp | Connecting to MCP servers, running their tools inside chat(), resources, prompts, and the type-generating CLI |
@tanstack/ai-sandbox | ai-sandbox | Running harness adapters inside isolated sandboxes with defineSandbox and withSandbox |
@tanstack/ai-code-mode | ai-code-mode | Setting up Code Mode with a sandbox driver and registering server tools |
@tanstack/ai-skills | ai-skills | Portable Agent Skills at runtime, including withSkills, load_skill, the SkillSource interface, and inlineSkill, skillDirectory, and staticSkills |
Skills route to each other. The ai-core skill points at the companion packages' skills, and ai-persistence acts as an entry point to its own sub-skills for servers, stores, and adapter recipes. Each skill ships with the code it teaches, so browser persistence guidance lives in @tanstack/ai while server persistence guidance lives in @tanstack/ai-persistence.
Copy link to heading3. Run intent install
From the root of your project, run:
pnpm dlx @tanstack/intent@latest installnpx @tanstack/intent@latest installyarn dlx @tanstack/intent@latest installbunx @tanstack/intent@latest installOn first use, Intent walks you through choosing which installed packages and skills your agent may use, then writes permissions and a guidance block.
| Prompt | Options | What gets saved |
|---|---|---|
| Choose what to enable | Enable all, Choose packages or scopes, or Choose individual skills | "*" for everything, "@tanstack/*" for a scope, "@tanstack/ai" for a package, or "@tanstack/ai#ai-core" for one skill |
| Confirm and finish | Continue with all selected skills or Review individual skills | Reviewing lets you inspect selected packages and uncheck skills, which adds an exclusion while keeping the broad rule |
A few behaviors to know before you run it:
- Package and scope rules include future matching skills, so a new skill added to
@tanstack/aiin a later release is picked up automatically. - Selecting nothing requires explicit confirmation to disable all skills. If no skills are found or all are excluded, Intent explains the next step and does nothing.
- Canceling before confirmation writes nothing. Use
--dry-runto preview the whole flow without writing. - If an
intent-skillsblock already exists, Intent updates that file in place. OtherwiseAGENTS.mdis the default target.
The guidance block Intent writes looks like this:
Intent detects your package manager when generating this block, so the runner may be npx, pnpm dlx, yarn dlx, or bunx. Intent only manages content between the intent-skills:start and intent-skills:end markers, and content outside the block is left alone.
Copy link to heading4. Review the saved permissions
install saves your choices in package.json#intent.skills, using the nearest package.json that owns the directory where you ran the command.
When permissions already exist, including permissions inherited from a workspace, install preserves them and only updates guidance. To change your choices, edit the owning intent.skills declaration directly.
| Pattern | Meaning |
|---|---|
"*" | Every skill from every installed package |
"@tanstack/*" | Every skill from packages in the @tanstack scope |
"@tanstack/ai" | Every skill shipped by @tanstack/ai, including future ones |
"@tanstack/ai#ai-core" | One specific skill |
Entries can also name workspace packages with the workspace: prefix, such as "workspace:@scope/internal". A git: prefix is reserved but rejected until a future version supports it. Matching is currently by package name.
The allowlist as a whole has three special states, and Intent prints a notice:
| State | intent.skills value | Effect |
|---|---|---|
| Absent | No key | Every discovered package is surfaced with a deprecation notice on each run. This is the upgrade path for existing projects, and a future version will require an explicit allowlist |
| Empty | [] | No package is surfaced |
| Wildcard | ["*"] | Every discovered package is surfaced with an acknowledged-risk notice, since unvetted skills may reach your agent |
In a monorepo, Intent merges intent.skills and intent.exclude from every package.json between the current working directory and the workspace root. A package inherits the root configuration and adds its own.
Copy link to headingExclude packages or skills
intent.exclude is a blocklist applied after the allowlist resolves. Use it to allow a whole scope while keeping specific packages or skills away from your agent. Manage it from the CLI rather than editing package.json by hand:
pnpm dlx @tanstack/intent@latest exclude add @tanstack/router#experimental-*pnpm dlx @tanstack/intent@latest exclude remove @tanstack/router#experimental-*pnpm dlx @tanstack/intent@latest exclude list --jsonnpx @tanstack/intent@latest exclude add @tanstack/router#experimental-*npx @tanstack/intent@latest exclude remove @tanstack/router#experimental-*npx @tanstack/intent@latest exclude list --jsonyarn dlx @tanstack/intent@latest exclude add @tanstack/router#experimental-*yarn dlx @tanstack/intent@latest exclude remove @tanstack/router#experimental-*yarn dlx @tanstack/intent@latest exclude list --jsonbunx @tanstack/intent@latest exclude add @tanstack/router#experimental-*bunx @tanstack/intent@latest exclude remove @tanstack/router#experimental-*bunx @tanstack/intent@latest exclude list --jsonexclude reads and writes the current directory's package.json, creates intent.exclude if it's missing, appends new patterns in order, and validates pattern syntax before writing. Running it with no action defaults to list.
| Pattern | Excludes |
|---|---|
@scope/pkg | The whole package |
@scope/pkg#* | The whole package (shortcut form) |
@scope/pkg#search-params | One skill in one package |
@scope/pkg#experimental-* | Every skill in one package whose name matches the glob |
#experimental- | Matching skills across every package |
@tanstack/*devtools* | Every package whose name matches the glob |
Only exact names and * wildcards are supported on each segment. Excludes always take precedence over intent.skills. The Trust model and Configuration pages document the full behavior.
Copy link to heading5. Opt in to explicit task-to-skill mappings
By default, Intent writes the general guidance block above and lets the agent decide which skill matches the task at hand. If you'd rather list explicit task-to-skill mappings in your agent config, pass --map:
pnpm dlx @tanstack/intent@latest install --mapnpx @tanstack/intent@latest install --mapyarn dlx @tanstack/intent@latest install --mapbunx @tanstack/intent@latest install --mapWith --map, the block maps task descriptions to skill files. Your agent reads the task: descriptions to decide when to pull a skill into context, so they should match the areas you work in.
Tighten or reword any task: description that is too broad or too narrow for your codebase. Edits inside the block survive a rerun.
Copy link to heading6. Enforce skill loading with hooks
The guidance block is advice that your agent has to follow. For agents that support lifecycle hooks, Intent can go further and gate edits until a skill has been loaded:
pnpm dlx @tanstack/intent@latest hooks installnpx @tanstack/intent@latest hooks installyarn dlx @tanstack/intent@latest hooks installbunx @tanstack/intent@latest hooks installHooks return the available skill catalog as context when a session starts, then block supported edit tools until the hook observes a recognized intent load <skill-id> command. The catalog respects intent.skills and intent.exclude in package.json.
| Agent | Project scope | User scope | Enforcement |
|---|---|---|---|
| Claude Code | .claude/settings.json | ~/.claude/settings.json | Session-start catalog plus edit gate |
| Codex | .codex/hooks.json | ~/.codex/hooks.json | Session-start catalog plus edit gate. Codex asks you to review and trust non-managed hooks before they run |
| GitHub Copilot CLI | Guidance only via .github/copilot-instructions.md | ~/.copilot/hooks/hooks.json | Session-start catalog plus edit gate in user scope only |
| Cursor | Guidance only | Guidance only | No blocking hook. Uses AGENTS.md or Cursor rules |
Generic AGENTS.md agents | Guidance only | Guidance only | No blocking hook. Uses the intent-skills block |
Project scope is the default. Because GitHub Copilot CLI hook enforcement is user-scoped, configure it explicitly:
pnpm dlx @tanstack/intent@latest hooks install --scope user --agents copilotnpx @tanstack/intent@latest hooks install --scope user --agents copilotyarn dlx @tanstack/intent@latest hooks install --scope user --agents copilotbunx @tanstack/intent@latest hooks install --scope user --agents copilothooks install does not write the guidance block, so run intent install separately if you want both. Hooks are an edit gate and an observation signal, not proof of correct behavior. They do not verify that:
- The load command succeeded.
- The selected skill matched the task.
- The agent received the returned content.
- The model applied the guidance.
Copy link to heading7. List and load skills
Your agent normally runs these commands itself, but they're useful for checking what's available and reading a skill yourself.
To see every skill discoverable from your installed packages:
pnpm dlx @tanstack/intent@latest listnpx @tanstack/intent@latest listyarn dlx @tanstack/intent@latest listbunx @tanstack/intent@latest list| Flag | Effect |
|---|---|
--json | Machine-readable output |
--global | Include globally installed packages alongside local ones |
--global-only | Ignore local packages and scan only globals |
--show-hidden | Name the packages that ship skills but were dropped by your allowlist, so you can opt in. Run this outside an agent session, where hidden sources are reported by count only |
--no-notices | Suppress non-critical notices on stderr |
If no packages are discovered, list prints a no packages found message.
To print a specific skill to stdout, use the package#skill syntax:
pnpm dlx @tanstack/intent@latest load @tanstack/ai#ai-corenpx @tanstack/intent@latest load @tanstack/ai#ai-coreyarn dlx @tanstack/intent@latest load @tanstack/ai#ai-corebunx @tanstack/intent@latest load @tanstack/ai#ai-coreThis prints the skill content for the installed package version.
The skill segment can include slash-separated sub-skill names, such as @tanstack/query#core/fetching, and an unambiguous short skill name works when only one package ships it.
| Flag | Effect |
|---|---|
--path | Print the resolved skill file path instead of the content, for debugging |
--json | Print structured JSON with metadata and content |
--exclude <pattern> | Skip package names matching a glob for this call only. Can be passed more than once |
--global and --global-only | Same scanning behavior as list |
load fails before scanning if the target package matches intent.exclude or an --exclude flag, so an excluded skill can't be loaded by accident.
Copy link to headingRead Intent's own meta-skills
Intent bundles a set of meta-skills under ../@tanstack/intent/meta/. These are the skills Intent itself uses to drive agent-assisted commands such as scaffold. To see what's bundled, run meta with no arguments, which prints one line per meta-skill with its name and a truncated description:
pnpm dlx @tanstack/intent@latest metanpx @tanstack/intent@latest metayarn dlx @tanstack/intent@latest metabunx @tanstack/intent@latest metaTo print one meta-skill's SKILL.md, pass its directory name:
pnpm dlx @tanstack/intent@latest meta <name>npx @tanstack/intent@latest meta <name>yarn dlx @tanstack/intent@latest meta <name>bunx @tanstack/intent@latest meta <name>Names containing .., /, or \ are rejected. If the name is unknown, Intent suggests running meta without arguments to see the available list.
Copy link to heading8. Confirm your agent is wired up
Open a fresh session in your coding agent and ask for something that touches the library. For TanStack AI, ask it to add a streaming chat endpoint using @tanstack/ai and the OpenAI adapter.
A correctly wired agent produces TanStack AI patterns rather than patterns borrowed from other SDKs.
| The agent should use | Instead of |
|---|---|
chat() | streamText() |
openaiText() from @tanstack/ai-openai | createOpenAI() |
toServerSentEventsResponse() | Manual server-sent events wiring |
| Middleware for lifecycle events | An onFinish callback on chat() |
If the agent still falls back to other-SDK patterns, see the troubleshooting section below.
Copy link to heading9. Keep skills current
Skills are versioned with the package that ships them, so when you update a library, the skills update too:
pnpm update @tanstack/ainpm update @tanstack/aiyarn up @tanstack/aibun update @tanstack/aiNo CLI rerun is needed after an update. Rerun npx @tanstack/intent@latest install only when:
- You add a new Intent-enabled package, such as adding
@tanstack/ai-code-modeto an existing project, and your permissions don't already cover it with a package or scope rule. - You want to refresh the guidance block or task mappings in your agent config.
To check whether any installed skills reference outdated source documentation:
pnpm dlx @tanstack/intent@latest stalenpx @tanstack/intent@latest staleyarn dlx @tanstack/intent@latest stalebunx @tanstack/intent@latest staleUpdate notifications for changed skill instructions are not available yet.
Copy link to headingUse skills without the CLI
If you'd rather manage your agent config by hand, reference the skill files directly from node_modules. The minimum your agent needs is a pointer to the file:
The CLI is the recommended path because it discovers packages automatically, respects your permissions, and stays consistent with the Agent Skills standard. The underlying file paths are stable if you prefer manual control.
Copy link to headingMaintainer workflow
If you maintain an npm package, this workflow covers authoring, validating, and shipping skills as part of your release. Consumers who install your library get the skills automatically and use the workflow above to load them.
Install Intent as a dev dependency:
pnpm add -D @tanstack/intentnpm i -D @tanstack/intentyarn add -D @tanstack/intentbun add -d @tanstack/intentCopy link to heading1. Scaffold skills with your agent
pnpm dlx @tanstack/intent@latest scaffoldnpx @tanstack/intent@latest scaffoldyarn dlx @tanstack/intent@latest scaffoldbunx @tanstack/intent@latest scaffoldThe command prints a phased prompt for you and your coding agent. It doesn't create files itself. Your agent writes them based on the prompt, with a review gate between each phase.
| Phase | What happens | Artifacts produced |
|---|---|---|
| Domain discovery | Scans your documentation, source code, and GitHub issues, then interviews you to surface implicit knowledge and common failure modes | domain_map.yaml, skill_spec.md |
| Tree generation | Designs a skill taxonomy from the domain map and creates a hierarchical structure | skill_tree.yaml |
| Skill generation | Writes a complete SKILL.md for each skill, including patterns, failure modes, and API references, then validates against the Intent specification | skills/<name>/SKILL.md |
Plan for multiple review rounds and regular context compaction. The more concrete patterns, pitfalls, and real-world usage problems you supply during the interview, the better the generated skills.
Copy link to heading2. Validate before publishing
pnpm dlx @tanstack/intent@latest validatenpx @tanstack/intent@latest validateyarn dlx @tanstack/intent@latest validatebunx @tanstack/intent@latest validateValidation enforces the SKILL.md format and packaging rules. Wire it into CI so a malformed skill blocks a release the same way a failing test would.
| Category | Checks |
|---|---|
| Skill structure | Valid YAML frontmatter, required name and description fields, skill name matches its parent directory, description of 1,024 characters or fewer, and 500 lines maximum per skill |
| Intent metadata | Intent-specific scalars (type, library, library_version, framework) live under metadata, and framework skills have a requires array |
| Artifacts | Required artifact files exist and are non-empty, and YAML artifacts parse successfully |
Copy link to heading3. Commit skills and artifacts
Commit both the generated skills and the artifacts used to create them. Artifacts keep the skill structure consistent across versions, so you can audit, refresh, or extend the set without starting over.
Copy link to heading4. Configure your package for publishing
Two helper commands prepare your package to ship skills:
pnpm dlx @tanstack/intent@latest edit-package-jsonpnpm dlx @tanstack/intent@latest setupnpx @tanstack/intent@latest edit-package-jsonnpx @tanstack/intent@latest setupyarn dlx @tanstack/intent@latest edit-package-jsonyarn dlx @tanstack/intent@latest setupbunx @tanstack/intent@latest edit-package-jsonbunx @tanstack/intent@latest setup| Command | What it does |
|---|---|
edit-package-json | Adds the tanstack-intent keyword (used for package detection and registry discovery) and files array entries for skills/. In single-package repos, also adds !skills/_artifacts so artifacts stay out of the published tarball. In monorepos, skips that exclusion because artifacts live at the repo root |
setup | Copies check-skills.yml into .github/workflows/ for automated validation and staleness checking |
setup won't overwrite existing workflow files. To pick up a newer template, delete or move the old generated file and rerun setup. If your repo still has an older generated validate-skills.yml, remove it after adopting check-skills.yml, since PR validation now runs from the latter.
Copy link to heading5. Ship skills with your package
Skills publish inside your npm package with no extra step:
Packaging code and skills together keeps their versions aligned. intent load on the consumer side returns skill content from whichever package version is installed.
Copy link to heading6. Track staleness against source docs
pnpm dlx @tanstack/intent@latest stalenpx @tanstack/intent@latest staleyarn dlx @tanstack/intent@latest stalebunx @tanstack/intent@latest staleRun from a package, stale checks that package's shipped skills. Run from a monorepo root, it checks every workspace package with skills and flags public packages that have no skill or _artifacts coverage.
Use --json for CI or scripting.
| Signal | Meaning |
|---|---|
| Version drift | A skill targets an older library version than the one currently installed |
| New sources | Sources declared in frontmatter that weren't tracked before |
| Artifact drift | _artifacts entries no longer match the generated skills |
| Missing package coverage | Public workspace packages not represented by generated skills or artifact coverage |
If a public workspace package is intentionally out of scope, record the decision in the repo-root _artifacts so it stops being flagged. Private workspace packages are skipped automatically.
The check-skills.yml workflow runs the same checks on PRs that touch skills or artifacts, on release, or on manual trigger. After you publish a new release, it opens one grouped review PR that includes the reason each skill or package was flagged and an agent-friendly prompt. To close the loop:
- Copy the agent prompt from the PR description.
- Paste it into Claude Code, Cursor, or your coding agent, which reads the stale skills and updates them based on the library changes.
- Run
npx @tanstack/intent@latest validatelocally to verify. - Commit and merge the PR.
Skills are updated through agent assistance, not full automation. The workflow detects what's stale and provides the prompt, and your agent handles the edits.
Copy link to headingHow this relates to the AI SDK
The Vercel AI SDK takes a similar approach to keeping coding agents current, with a few differences in where the guidance comes from.
| TanStack Intent | AI SDK | |
|---|---|---|
| Install | npx @tanstack/intent@latest install, plus optional discovery skills via npx skills add TanStack/ai | npx skills add vercel/ai |
| Version-matched guidance | SKILL.md files inside each package that ships them | Full docs and source bundled at node_modules/ai/docs/ and node_modules/ai/src/ |
| Project config | intent-skills block in AGENTS.md, CLAUDE.md, .cursorrules, or .github/copilot-instructions.md, plus an allowlist in package.json | Skill installed into the agent's skills directory, such as .claude/skills or .codex/skills |
| Enforcement | Optional hooks that gate edits until a skill is loaded | Progressive disclosure. The agent loads the skill's name and description at startup and pulls full instructions in on demand |
| Migration help | tanstack-ai-migration skill for porting from the AI SDK | Not applicable |
Both use the open Agent Skills format, so an agent that supports one supports the other. If your project mixes libraries, you can install both without conflict. See Getting Started with Coding Agents for the AI SDK setup.
Copy link to headingUsing Intent with TanStack Start on Vercel
Intent is a development-time tool. It runs on your machine and writes to your agent config and package.json, and nothing about it runs at build time or affects your Vercel deployment output. If you're building a TanStack Start app deployed on Vercel, it fits into your local loop with no deployment changes:
- Run
npx @tanstack/intent@latest installonce from your project root. - Commit
package.jsonand theAGENTS.mdor equivalent config file so permissions and guidance travel with the repo. - Let your agent read skills from
node_moduleson demand as you work.
Copy link to headingTroubleshooting
Copy link to headingintent install fails without writing anything
First-run setup requires an interactive terminal. If you're running in CI or a non-interactive shell before permissions exist, run install locally first so package.json#intent.skills is committed, then non-interactive runs can update guidance.
Copy link to headingintent install didn't update my config file
Intent only touches content between <!-- intent-skills:start --> and <!-- intent-skills:end -->. If either marker was renamed or removed, Intent treats the file as having no block and creates a new one in AGENTS.md. Restore the markers, remove any duplicate block, and rerun install.
If Intent reported that no skills were found or all were excluded, it left both files unchanged by design. Install a package that ships skills or review your intent.exclude rules, then run install again.
Copy link to headingMy agent isn't loading skills
The intent-skills block is guidance that the agent has to act on. Confirm that:
- The block is present in a config file your agent reads.
npx @tanstack/intent@latest listreturns at least one skill. If it's empty, either none of your installed packages ship Intent skills or yourintent.skillsallowlist excludes them all.- With
--map, thetask:descriptions clearly cover the area you're asking about.
For Claude Code, Codex, or GitHub Copilot CLI, hooks install adds an edit gate so the agent can't skip the load step.
Copy link to headingintent list finds nothing
Intent scans your project's installed dependencies for packages that declare skills and then filters them through your allowlist. Check that:
- You ran the command from the workspace root in a monorepo.
- The package is installed locally. Add
--globalto include globally installed packages, or--global-onlyto scan only globals. - Your
package.json#intent.skillsincludes the package. Runlist --show-hiddenoutside your agent session to see which discovered packages the allowlist dropped. intent.excludedoesn't remove it. Runnpx @tanstack/intent@latest exclude listto review active exclusions, and remember that excludes are merged from everypackage.jsonbetween your working directory and the workspace root.
Copy link to headingCodex reports hooks awaiting review
Codex requires you to review and trust non-managed hooks before they run. Open its hook browser and trust the generated Intent hook.
Copy link to headingFurther building
Use vercelGatewayDecider from TanStack AI’s Vercel AI Gateway adapter with Jev in Moderate product reviews with Jev, TanStack AI, and AI Gateway to get typed choices, scores, and boolean probabilities instead of generated text.
Copy link to headingRelated resources
- TanStack Intent overview
- TanStack Intent Quick Start for Consumers
- TanStack Intent Quick Start for Maintainers
- TanStack Intent CLI reference
- TanStack Intent trust model
- Agent Skills registry
- TanStack Intent in the TanStack AI docs
- Getting Started with Coding Agents in the AI SDK docs
- TanStack Start on Vercel
- Using Jev in TanStack Start with TanStack AI