npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@devcodex/intent-runtime

v2.0.0

Published

A model-driven Node.js component that structures user intent and extracts schema-defined data for applications and MCP servers.

Readme

Intent Runtime

Documentation · Quick start · Examples · npm · Issues

English is the default documentation language. 简体中文 covers the same V2 API.

CI npm version Node.js >=20 License: MIT

Understand the request before taking action.

Turn natural-language requests into structured goals, constraints, changes, and schema-defined fields. Use the same core in your Node.js application, your MCP server, or a client that brings its own model.

For example, “Look up order 000123. Do not cancel the order” contains both a goal and a prohibition. Intent Runtime preserves both. Your application remains responsible for authorization, tools, and execution; the library only interprets the material you provide.

  • Goals and constraints together. Preserve prohibitions, conditions, relationships, and unresolved questions alongside the requested action.
  • Your business fields. Select schema-defined fields, validate their values, and keep identifiers such as 000123 as strings.
  • Explicit multi-turn state. Supply context and a baseline to track changes without hidden conversation history.
  • Your model, your transport. Use Responses, Chat Completions, a custom executor, or the MCP client's current model.

Install and run · Model APIs and gateways · MCP · Codex · Contributing

Choose an integration

| Your application | Start here | |---|---| | Node.js application | Intent.parse with a model API or your own model executor | | Standalone MCP service | An ESM configuration file; connect through stdio or HTTP | | Existing MCP server | createIntentMcpAdapter from @devcodex/intent-runtime/mcp; keep your existing transport and tools | | Codex using its current model | Explicit setup registration and the prepare/accept/cancel tools |

Start with the application example below. To reuse a client's current model, choose MCP host mode. To call a model configured on your server, choose executor mode. Either mode works over stdio or Streamable HTTP.

Install

Intent Runtime V2 requires Node.js 20 or later and ESM. In your application directory, run:

npm install @devcodex/intent-runtime

npm installs the required dependencies, including the required schema-dsl peer with normal npm peer resolution. No separate installation is needed for this quick start.

JavaScript and TypeScript use the same API, and the package includes type declarations. For .js files, set "type": "module" in your project's package.json; a standalone .mjs file needs no module-type setting. Compile TypeScript to ESM before running it. See the JavaScript/TypeScript quick start for both versions.

Make your first call

Set your model credentials. These names are read by the example, not automatically by the library.

# Bash / zsh
export INTENT_API_KEY='your-api-key'
export INTENT_MODEL='your-model-name'
# PowerShell
$env:INTENT_API_KEY = 'your-api-key'
$env:INTENT_MODEL = 'your-model-name'

Save the following as basic.mjs inside the project where you installed the package. It uses the OpenAI Responses API and identifies goals and constraints without a business schema:

import {Intent, IntentError} from '@devcodex/intent-runtime';
import {createApiExecutor} from '@devcodex/intent-runtime/adapters/api';

const apiKey = process.env.INTENT_API_KEY;
const model = process.env.INTENT_MODEL;
if (!apiKey || !model) throw new Error('Set INTENT_API_KEY and INTENT_MODEL in your environment.');
const intent = new Intent({
  language: 'en',
  executor: createApiExecutor({provider: 'openai', apiKey, model}),
});
try {
  const result = await intent.parse({input: 'Look up order 000123. Do not cancel the order.'});
  console.log(JSON.stringify(result, null, 2));
  // Read goals and constraints from effective; no order query is executed.
  console.log('Goals:', result.effective.intents.map(node => node.goal));
  console.log('Issues:', result.issues.map(issue => issue.message));
} catch (error) {
  if (!(error instanceof IntentError)) throw error;
  console.error(JSON.stringify(error.toJSON()));
  process.exitCode = 1;
} finally {
  await intent.dispose();
}
node basic.mjs

The output contains the query goal and the prohibition against cancellation; it does not query or cancel an order. Read goals and constraints from effective.intents, and missing or ambiguous information from issues. Exact wording depends on your model.

Read and extend the result

  • effective is the current intent tree, including goals, constraints, and inputs.
  • fields defaults to []: intent recognition still runs, but no schema fields are selected. Add a schema and select fields when you need order IDs or other business data.
  • Check each field's fieldResults and related issues before using its value. A root complete status does not guarantee that every field is valid or that any business action has run.
  • Pass context or a previous effective value as baseline explicitly for multi-turn requests. Instances do not retain implicit conversation history.

See reading results for field ownership, facts without a matching operation, positive requirements in constraints, and deliverables in expectedOutput.

Connect a model or gateway

| Your model service | Configuration | |---|---| | OpenAI or xAI Responses | createApiExecutor({provider, apiKey, model}); Responses is the default | | Responses-compatible gateway | Add the API root as baseURL | | Chat Completions-compatible gateway | Add protocol: 'chat-completions' and baseURL | | Another protocol, existing SDK, or custom authentication headers | Implement ModelExecutor.generate around your existing model call |

For a gateway endpoint such as https://gateway.example.com/v1/chat/completions, use baseURL: 'https://gateway.example.com/v1'. The adapter appends the protocol endpoint. format: 'text' is available when your service does not support JSON Schema output; the returned candidate JSON is still validated.

A custom executor receives instructions, input, an output schema, and a cancellation signal. It returns model-generated candidate text; Intent Runtime validates it and assembles the final result. You do not need to build a new gateway service. See model APIs and custom executors for complete configuration and examples.

Run a standalone MCP service

Save this trusted configuration as intent.host.config.mjs. Use .js instead if it belongs to an ESM project. This configuration reuses the MCP client's model and requires no separate model API key:

export default {
  mode: 'host',
  instances: {main: {language: 'en'}},
};

For a local installation, run the command from your application directory with an absolute configuration path:

npx --no-install intent-runtime-mcp --config /absolute/path/intent.host.config.mjs

The command uses stdio by default; your MCP client starts and manages that process. Configure the client with the installed executable's absolute path, or use npx --no-install from the application directory. For Streamable HTTP, start it in a terminal:

npx --no-install intent-runtime-mcp --config /absolute/path/intent.host.config.mjs --transport http --port 3001

Connect the client to http://127.0.0.1:3001/mcp. Change the listener with --host, --port, and --path. Set --public-origin https://mcp.example.com when using a public domain or HTTPS proxy; wildcard listeners require an explicit public origin. See the remote deployment example. HTTP supports the stateful MCP 2025-06-18 and 2025-11-25 protocols; stdio also supports 2026-07-28. Authentication and HTTPS belong to your deployment layer.

Ask your client to use the intent tools to identify the goal and prohibition in the example request. It should use intent_prepare, produce a candidate with its current model, and submit it through intent_accept in the same session. The tools do not automatically process every chat message. See MCP client configuration and usage.

For an existing MCP server, start with the four integration changes; keep your existing transport, resources, prompts, and tool handlers.

Use the current Codex model

Install the commands globally for use outside a particular project:

npm install -g @devcodex/intent-runtime
intent-runtime setup --host codex --config /absolute/path/intent.host.config.mjs

Use the trusted configuration above or follow the Codex integration guide to add business fields. Reload the client after setup. Ordinary installation does not modify Codex configuration; registration is explicit. The supplied Skill guides tool use when invoked and does not take over every message.

Already have a registration from an automatic setup? Follow the safe registration upgrade before replacing it. Setup protects existing entries and user edits.

Troubleshooting

| Symptom | What to check | |---|---| | Missing model credentials | Set both variables in the terminal that runs the application; verify the model name and endpoint with your provider | | MODEL_AUTH_FAILED / MODEL_RATE_LIMITED | Check the API key, provider access, and quota; use the error guide for recovery | | A .js configuration does not load | Check the absolute path and ESM project setting; use .mjs for a standalone file | | MCP command not found | Use the installed executable's absolute path, or install globally; on Windows use a supported .cmd launcher or node with dist/cli/mcp.js | | HTTP connection fails | Check the running process, host, port, path, and supported protocol; keep the negotiated session ID | | Codex does not list the tools | Run intent-runtime doctor --host codex; see registration maintenance | | The result has missing or ambiguous data | Inspect issues and fieldResults, then supply the missing material explicitly |

Documentation

The full documentation is available in English by default, with an equivalent Simplified Chinese edition:

Contributing

Bug reports, reproducible examples, and pull requests are welcome. For an issue, include the package, Node.js, model and client versions, the input, and the observed result. Review any credentials or private data before sharing it.

git clone https://github.com/devcodex-labs/intent-runtime.git
cd intent-runtime
npm ci
npm run typecheck
npm run lint
npm test
npm run test:release

Documentation lives in website/content; runnable examples live in examples. To check documentation changes, run npm --prefix website ci and npm run docs:check. See the release guide for maintainers.

Engineering tests and real-provider/client verification have separate scopes; fixture pass counts are not model accuracy measurements. See CHANGELOG for version history. Released under the MIT License.