Skip to content

agenticempire/axint

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Axint

Axint

Write an App Intent in TypeScript, ship it to Siri.

The open-source compiler that turns one defineIntent() call into two agent surfaces:
a native Swift App Intent for Siri — and an MCP tool for Claude, Cursor, and Windsurf.

npm License CI Playground WWDC 2026

Website · Playground · Quick Start · MCP Server · Discussions


The picks and shovels of Agent Siri

WWDC 2026 is weeks away. Apple is expanding App Intents as the universal action layer across iOS 26, macOS Tahoe, and Apple Intelligence — every App Intent you ship becomes a capability that Siri, Shortcuts, Spotlight, and on-device AI agents can invoke. The surface area is growing fast.

Axint is the fastest path from an AI coding tool to a shipped App Intent. One TypeScript definition. Two agent surfaces. Zero Swift required.

┌──────────────────────────────┐
│  defineIntent({ ... })       │   one TypeScript source
└──────────────┬───────────────┘
               │  axint compile
       ┌───────┴────────┐
       ▼                ▼
┌─────────────┐   ┌──────────────┐
│ .swift      │   │ MCP tool     │
│ .plist      │   │ (Claude,     │
│ .entitl.    │   │  Cursor,     │
│             │   │  Windsurf)   │
└─────────────┘   └──────────────┘
   Siri, Shortcuts,      Your AI
   Spotlight, Agent      coding agent
   Siri, Apple Intel.

Why Axint

  • Real TypeScript AST parser. Not regex. Uses the TypeScript compiler API, same as tsc, so you get full type fidelity and proper diagnostics with line/column spans.
  • Native type fidelity. int → Int, double → Double, float → Float, date → Date, url → URL, duration → Measurement<UnitDuration>, optional<T> → T?. Default values and optionality are preserved end-to-end.
  • Return-type-aware perform() signatures. Every generated intent is a drop-in tool for Agent Siri and Shortcuts.
  • Info.plist and .entitlements emit. Axint writes the NSAppIntentsDomains plist fragment and the App Intents entitlement XML alongside your .swift file. Drop all three into Xcode and ship.
  • MCP-native. A bundled axint-mcp server exposes five tools — axint_scaffold, axint_compile, axint_validate, axint_list_templates, and axint_template — to any MCP client. Your AI coding agent can read your project, draft a TypeScript intent, compile it, and open a PR — without a human touching Xcode.
  • Rust-grade diagnostics. 16 diagnostic codes (AX001AX202) with fix suggestions and color-coded output.
  • Sub-millisecond compile. A typical intent compiles in under a millisecond. The axint.ai playground runs the full compiler in your browser with zero server round-trip.
  • 155 tests. Parser, validator, generator, emit paths, watch mode, and sandbox — all covered.
  • Apache 2.0, no CLA. Fork it, extend it, ship it.

Quick start

# Install globally
npm install -g @axintai/compiler

# Or use without installing (runs from npm cache)
npx -p @axintai/compiler axint compile my-intent.ts --stdout

Create my-intent.ts:

import { defineIntent, param } from "@axintai/compiler";

export default defineIntent({
  name: "CreateEvent",
  title: "Create Calendar Event",
  description: "Creates a new event in the user's calendar.",
  domain: "productivity",
  params: {
    title: param.string("Event title"),
    date: param.date("Event date"),
    duration: param.duration("Event duration", { default: "1h" }),
    location: param.string("Location", { required: false }),
  },
  perform: async ({ title, date, duration, location }) => {
    return { success: true };
  },
});

Compile it:

axint compile my-intent.ts --out ios/Intents/

You get three files ready to drop into Xcode:

ios/Intents/
├── CreateEventIntent.swift            # AppIntent struct
├── CreateEventIntent.plist.fragment.xml   # NSAppIntentsDomains
└── CreateEventIntent.entitlements.fragment.xml  # App Intents entitlement

Watch mode

For iterative development, axint watch recompiles on every save with sub-millisecond rebuilds:

# Watch a single file
axint watch my-intent.ts --out ios/Intents/

# Watch a directory of intents
axint watch ./intents/ --out ios/Intents/ --emit-info-plist --emit-entitlements

# With swift-format
axint watch my-intent.ts --out ios/Intents/ --format

# Auto-run swift build after each compile
axint watch ./intents/ --out ios/Intents/ --swift-build

# Specify the Swift project root (defaults to --out parent)
axint watch ./intents/ --out ios/Sources/Intents/ --swift-build --swift-project ios/

The watcher runs an initial compile pass, then re-triggers on file changes with a 150ms debounce. Errors are reported inline without killing the process — fix the file and it recompiles automatically. With --swift-build, each successful compile triggers swift build in the project directory so you get immediate feedback on whether the generated Swift compiles cleanly.


Compiled Swift output

// CreateEventIntent.swift
// Generated by Axint — https://github.com/agenticempire/axint
// Do not edit manually. Re-run `axint compile` to regenerate.

import AppIntents
import Foundation

struct CreateEventIntent: AppIntent {
    static let title: LocalizedStringResource = "Create Calendar Event"
    static let description: IntentDescription = IntentDescription("Creates a new event in the user's calendar.")

    @Parameter(title: "Event title")
    var title: String

    @Parameter(title: "Event date")
    var date: Date

    @Parameter(title: "Event duration")
    var duration: Measurement<UnitDuration> = .init(value: 1, unit: .hours)

    @Parameter(title: "Location")
    var location: String?

    func perform() async throws -> some IntentResult & ReturnsValue<String> {
        // TODO: Implement your intent logic here.
        // Parameters available: \(title), \(date), \(duration), \(location)
        return .result(value: "")
    }
}

How Axint works

Four passes. Zero Xcode.

  1. Parse — TypeScript defineIntent({ ... }) calls are parsed with the real TypeScript compiler API (not regex) into a typed intermediate representation.
  2. Validate — 16 diagnostic codes (AX001AX202) catch invalid App Intent shapes before Swift ever sees them. Return-type inference and default-value sanity checks included.
  3. Generate — Idiomatic Swift is emitted: AppIntent conformance, @Parameter decorators, LocalizedStringResource titles, return-type-aware perform().
  4. Emit — An Info.plist XML fragment (for NSAppIntentsDomains) and a .entitlements XML fragment (for the App Intents entitlement) are written alongside the Swift file.

MCP server

Axint ships with axint-mcp, a Model Context Protocol server that exposes the compiler to any MCP-compatible LLM client — Claude Desktop, Claude Code, Cursor, Windsurf, and others.

// ~/.config/claude/mcp.json or equivalent
{
  "mcpServers": {
    "axint": {
      "command": "axint-mcp",
      "args": []
    }
  }
}

Five tools are exposed:

Tool What it does
axint_scaffold Generates a TypeScript intent from a natural-language description
axint_compile Runs the full pipeline and returns .swift + .plist + .entitlements
axint_validate Dry-run validation with line/column diagnostics
axint_list_templates Lists all bundled intent templates
axint_template Returns the source of a specific bundled template

Once connected, your AI coding agent can read a Swift project, draft an intent, compile it, and open a PR — without a human touching Xcode.


Supported Swift type mappings

TypeScript Swift Default value support
string String
int Int
double Double
float Float
boolean Bool
date Date
duration Measurement<UnitDuration> ✓ (e.g. "1h")
url URL
optional<T> T?

Axint vs. hand-written Swift

Axint Hand-written Swift
Lines of code 12 lines of TypeScript 30+ lines of Swift boilerplate
Time to first intent ~30 seconds 10–15 minutes
Type marshaling Automatic Manual (easy to mistype)
Info.plist fragment Emitted Hand-written
Entitlements fragment Emitted Hand-written
Validation 16 diagnostic codes Runtime bugs
MCP integration Built-in server Manual setup
Refactoring Change TS, recompile Change Swift in every file

Diagnostics

Rust-grade error messages with fix suggestions:

error[AX100]: Intent name "sendMessage" must be PascalCase
  --> src/intents/messaging.ts:5:9
   |
 5 |   name: "sendMessage",
   |         ^^^^^^^^^^^^^
   = help: rename to "SendMessage"

warning[AX105]: Intent has 12 parameters. Apple recommends 10 or fewer.
  --> src/intents/complex.ts:3:1
   = help: consider splitting into multiple intents

See docs/ERRORS.md for the full reference.


Try it in your browser

No install required: axint.ai/#playground runs the entire compiler in-browser — parser, validator, generator, and emit — with zero server round-trip.


Requirements

  • Node.js 22+
  • Any OS: macOS, Linux, Windows
  • Xcode 15+ (only if you want to ship the generated Swift to an Apple platform)
  • Target platforms: iOS 17+, iPadOS 17+, macOS 14+; Agent Siri requires iOS 26.1+ / macOS Tahoe 26.1+

Project structure

axint/
├── src/
│   ├── core/        # Parser, validator, generator, compiler, emitter, IR
│   ├── sdk/         # defineIntent() API and param helpers
│   ├── mcp/         # MCP server (scaffold, compile, validate)
│   ├── cli/         # axint CLI (Commander.js)
│   └── templates/   # Intent template registry
├── tests/           # 155 vitest tests
├── examples/        # Example intent definitions
└── docs/            # Error reference, contributing, assets

Contributing

We review PRs within 48 hours. Good places to start:

  • Browse issues labeled good first issue
  • Add an intent template for a common use case (messaging, health, commerce)
  • Improve diagnostics with better fix suggestions
  • Help wanted on the Xcode live-preview watch mode

See CONTRIBUTING.md. Apache 2.0, no CLA.


Roadmap

See ROADMAP.md for the full plan. Highlights:

  • Real TypeScript AST parser (v0.2.0)
  • Info.plist and .entitlements emit (v0.2.0)
  • Return-type-aware perform() (v0.2.0)
  • MCP scaffold tool (v0.2.0)
  • 155-test suite with snapshot coverage (v0.2.0+)
  • Intent template library with 12+ templates (v0.3.0)
  • --watch mode with --swift-build for live recompilation (v0.3.0)
  • SPM build plugin — auto-compile during swift build (v0.3.0)
  • Registry at registry.axint.ai (v0.3.0)
  • GitHub template repo (axint-starter)
  • Axint Cloud (hosted compilation)

License

Apache 2.0 — fork it, extend it, ship it. No CLA.


Built by Agentic Empire · axint.ai

About

Open-source compiler: TypeScript → Apple App Intents (Siri, Shortcuts) + MCP tools (AI agents). One definition, two surfaces.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors