Skip to main content
Glama

Слой сжатия для AI-агентов в экосистеме Apple

AI-агенты для написания кода платят за каждый токен. API Apple — App Intents, SwiftUI, WidgetKit — очень многословны. Для создания одного виджета требуются TimelineEntry, TimelineProvider, EntryView и структура Widget еще до того, как вы напишете хоть строчку бизнес-логики.

Axint сжимает всё это. Одно определение на TypeScript компилируется в идиоматичный, готовый к продакшену Swift без лишнего шаблонного кода. Интент сжимается примерно в 4 раза. Представление — в 4 раза. Виджет сжимается в 13 раз.

┌───────────────────────────────────────────┐
│  defineIntent()  defineView()             │  TypeScript / Python / JSON
│  defineWidget()  defineApp()              │
└───────────────────┬───────────────────────┘
                    │  axint compile
          ┌─────────┼─────────┐─────────┐
          ▼         ▼         ▼         ▼
     ┌────────┐ ┌───────┐ ┌────────┐ ┌──────┐
     │ .swift │ │ .swift│ │ .swift │ │.swift│
     │ .plist │ │       │ │        │ │      │
     │ .entl. │ │       │ │        │ │      │
     └────────┘ └───────┘ └────────┘ └──────┘
     App Intent  SwiftUI   WidgetKit   App
     for Siri    View      Widget      Scaffold

Related MCP server: xcode-mcp

Почему Axint

  • Четыре поверхности Apple, один компилятор. App Intents, представления SwiftUI, виджеты WidgetKit и каркасы приложений компилируются через один и тот же конвейер.

  • Настоящий парсер AST TypeScript. Использует API компилятора TypeScript (как и tsc), а не регулярные выражения. Полная точность типов и диагностика с указанием строк/столбцов.

  • MCP-native с режимом JSON-схемы. Тринадцать инструментов, доступных любому MCP-клиенту. Инструмент axint.schema.compile принимает минимальный JSON (~20 токенов) и возвращает скомпилированный Swift — AI-агенты полностью пропускают TypeScript и экономят еще больше токенов.

  • Точность нативных типов. int → Int, double → Double, date → Date, url → URL, duration → Measurement<UnitDuration>. Значения по умолчанию и опциональность сохраняются от начала до конца.

  • 150 диагностических кодов (AX000AX999) с предложениями по исправлению и цветовой индикацией вывода. Валидаторы интентов, сущностей, представлений, виджетов, приложений, конкурентности Swift и Live Activities имеют свои диапазоны ошибок.

  • Компиляция за доли миллисекунды. Песочница axint.ai запускает полный компилятор прямо в браузере без обращения к серверу.

  • 500 тестов. Парсер, валидатор, генератор, пути вывода, представления, виджеты, приложения, режим наблюдения, песочница, MCP, конкурентность Swift и Live Activities — всё покрыто тестами.

  • Кросс-языковое промежуточное представление (IR). Промежуточное представление — это JSON, не зависящий от языка. TypeScript, Python и «сырой» JSON подаются в один и тот же генератор. Новые языковые фронтенды подключаются без изменения Swift-эмиттера.

  • Apache 2.0, без CLA. Форкайте, расширяйте, используйте в проектах.


Быстрый старт

npm install -g @axint/compiler

# Or run without installing
npx @axint/compiler compile my-intent.ts --stdout

Интент

import { defineIntent, param } from "@axint/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 }),
  },
});

Представление

import { defineView, prop, state, view } from "@axint/compiler";

export default defineView({
  name: "EventCard",
  props: {
    title: prop.string(),
    date: prop.date(),
  },
  state: {
    isExpanded: state.boolean(false),
  },
  body: [
    view.vstack({ alignment: "leading", spacing: 8 }, [
      view.text("entry.title"),
      view.conditional("isExpanded", [view.text("entry.date")]),
    ]),
  ],
});

Виджет

import { defineWidget, entry, view } from "@axint/compiler";

export default defineWidget({
  name: "EventCountdown",
  displayName: "Event Countdown",
  description: "Shows time until the next event.",
  families: ["systemSmall", "systemMedium"],
  entry: {
    eventName: entry.string("Untitled"),
    minutesUntil: entry.int(0),
  },
  body: [
    view.vstack({ alignment: "center", spacing: 4 }, [
      view.text("entry.eventName"),
      view.text("entry.minutesUntil"),
    ]),
  ],
});

Приложение

import { defineApp, scene, storage } from "@axint/compiler";

export default defineApp({
  name: "WeatherApp",
  scenes: [
    scene.windowGroup("WeatherDashboard"),
    scene.settings("SettingsView", { platform: "macOS" }),
  ],
  appStorage: {
    useCelsius: storage.boolean("use_celsius", true),
    lastCity: storage.string("last_city", "Cupertino"),
  },
});

Скомпилируйте любой из них:

axint compile my-intent.ts --out ios/Intents/
axint compile my-view.ts --out ios/Views/
axint compile my-widget.ts --out ios/Widgets/
axint compile my-app.ts --out ios/App/

Режим наблюдения (Watch mode)

Для итеративной разработки axint watch перекомпилирует код при каждом сохранении:

axint watch ./intents/ --out ios/Intents/ --emit-info-plist --emit-entitlements
axint watch my-intent.ts --out ios/Intents/ --format --swift-build

Дебаунс 150 мс, встроенные ошибки и опциональная сборка swift build после каждой успешной компиляции.


MCP-сервер

Axint поставляется с axint-mcp, сервером протокола Model Context Protocol для Claude Desktop, Claude Code, Cursor, Windsurf и любого другого MCP-клиента.

{
  "mcpServers": {
    "axint": {
      "command": "axint-mcp",
      "args": []
    }
  }
}

Тринадцать инструментов (имена через точку — старые псевдонимы с подчеркиванием всё еще работают):

Инструмент

Что он делает

axint.feature

Генерирует полный пакет функций по описанию

axint.suggest

Предлагает нативные функции Apple для заданного домена

axint.scaffold

Генерирует стартовый TypeScript-интент по описанию

axint.compile

Полный конвейер: TypeScript → Swift + plist + entitlements

axint.validate

Пробная валидация с диагностикой

axint.schema.compile

Минимальный JSON → Swift (режим экономии токенов для AI)

axint.swift.validate

Валидация существующего Swift по правилам сборки Axint

axint.swift.fix

Автоисправление механических ошибок Swift (конкурентность, LA)

axint.templates.list

Список встроенных эталонных шаблонов

axint.templates.get

Возвращает исходный код конкретного шаблона

axint.quick-start

Получить руководство по быстрому старту Axint

axint.create-intent

Создать новый интент из параметров

axint.create-widget

Создать новый виджет из параметров

Режим схемы — ключевая оптимизация для агентов: вместо генерации TypeScript и последующей компиляции, агенты отправляют ~20 токенов JSON и получают скомпилированный Swift напрямую.


Диагностика

150 диагностических кодов в восьми валидаторах:

Диапазон

Домен

AX000AX023

Компилятор / Парсер

AX100AX113

Интент

AX200AX202

Вывод Swift

AX300AX322

Представление

AX400AX422

Виджет

AX500AX522

Приложение

AX700AX749

Правила сборки Swift

AX720AX735

Конкурентность Swift 6

AX740AX749

Live Activities

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

Полный справочник см. в docs/ERRORS.md.


Поддерживаемые типы

TypeScript

Swift

Поддержка значений по умолчанию

string

String

int

Int

double

Double

float

Float

boolean

Bool

date

Date

duration

Measurement<UnitDuration>

✓ (например, "1h")

url

URL

optional<T>

T?


Попробуйте в браузере

Установка не требуется: axint.ai/#playground запускает весь компилятор в браузере без обращения к серверу.


Требования

  • Node.js 22+

  • Любая ОС: macOS, Linux, Windows

  • Xcode 15+ (только для отправки сгенерированного Swift на платформу Apple)


Структура проекта

axint/
├── src/
│   ├── core/        # Parser, validator, generator, compiler, types, IR
│   ├── sdk/         # defineIntent(), defineView(), defineWidget(), param/prop/state/entry helpers
│   ├── mcp/         # MCP server (13 tools including JSON schema mode)
│   ├── cli/         # axint CLI (compile, watch, validate, eject, init, xcode)
│   └── templates/   # Intent template registry (25 templates)
├── python/          # Python SDK with native Swift codegen
├── extensions/      # Claude Code, Codex, Cursor, Windsurf, Zed, JetBrains, Xcode
├── spm-plugin/      # Xcode SPM build plugin
├── tools/           # swift-syntax helper binary (POC)
├── tests/           # 500 vitest tests
├── examples/        # Example definitions
└── docs/            # Error reference, research, assets

Участие в разработке

Мы рассматриваем PR в течение 48 часов. С чего начать:

  • Просмотрите задачи с меткой good first issue

  • Добавьте шаблон для распространенного сценария использования

  • Улучшите диагностику с помощью более качественных предложений по исправлению

См. CONTRIBUTING.md. Apache 2.0, без CLA.


Дорожная карта

См. ROADMAP.md. Основное:

  • [x] Четыре цели компиляции: интенты, представления, виджеты, приложения

  • [x] MCP-сервер с режимом JSON-схемы (6 инструментов)

  • [x] 91 диагностический код с предложениями по исправлению

  • [x] Режим --watch с --swift-build

  • [x] Расширение для VS Code / Cursor

  • [x] Python SDK с нативной генерацией кода Swift

  • [x] Плагин сборки SPM для Xcode + плагин проекта Xcode

  • [x] axint eject для вывода Swift без зависимостей

  • [x] Кросс-языковой мост IR (TS, Python, JSON)

  • [x] defineApp() — компиляция каркаса полноценного приложения

  • [ ] defineExtension() — компиляция расширений приложений

  • [ ] Axint Cloud (хостинговая компиляция)


Лицензия

Apache 2.0 — форкайте, расширяйте, используйте. Без CLA.


Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/agenticempire/axint'

If you have feedback or need assistance with the MCP directory API, please join our Discord server