defineAPI() 한 번.think() 과 remember() 내장.같은 핸들러에서 비즈니스 로직과 AI 추론을 혼합. HTTP, MCP, A2A, OpenAPI — 자동 생성.
하나의 defineAPI() 정의로 자동 생성: HTTP JSON API (Hono), MCP 도구 (Claude Desktop), A2A 스킬 (Google Agent-to-Agent), OpenAPI 3.1 스펙.
import { defineAPI } from "@zauso-ai/capstan-core";
import { z } from "zod";
export const GET = defineAPI({
input: z.object({
status: z.enum(["open", "closed"]).optional(),
}),
output: z.object({
tickets: z.array(z.object({
id: z.string(),
title: z.string(),
status: z.string(),
})),
}),
description: "List support tickets",
capability: "read",
resource: "ticket",
async handler({ input }) {
return { tickets: await db.tickets.list(input) };
},
});하나의 defineAPI()로 HTTP, MCP, A2A, OpenAPI 엔드포인트를 동시에 노출.
think(), generate(), 도구 호출이 있는 에이전트 루프. 독립 @zauso-ai/capstan-ai.
remember/recall/about 스코핑. 자동 중복 제거, 하이브리드 검색, 컨텍스트 조립.
React 18 renderToReadableStream, 선택적 하이드레이션, Image/Font/Metadata.
JWT, OAuth, DPoP (RFC 9449), SPIFFE/mTLS, 속도 제한, CSRF.
Drizzle ORM, 벡터 필드, 임베딩, 하이브리드 검색, 4개 프로바이더.
cacheSet/cacheGet, TTL, 태그, stale-while-revalidate.
defineCompliance 리스크 레벨, 감사 로그, 승인 워크플로우.
| 기능 | Capstan | Next.js | FastAPI |
|---|---|---|---|
| Multi-protocol (HTTP + MCP + A2A) | + | – | – |
| OpenAPI auto-generation | + | – | + |
| File-based routing | + | + | – |
| React SSR | + | + | – |
| Built-in auth (JWT + API keys) | + | – | ~ |
| Policy engine + approval workflow | + | – | – |
| AI TDD verifier | + | – | – |
| Built-in database layer | + | – | – |
| AI Agent Toolkit | + | – | – |
| Long-term Memory | + | – | – |
| LLM Integration | + | ~ | ~ |
| Cache / ISR | + | + | – |
+ 내장 ~ 부분 – 없음 | 전체 비교
bunx create-capstan-app my-appcd my-app && bunx capstan dev앱이 실행 중이며 모든 에이전트 엔드포인트가 준비되었습니다:
# Agent manifest
curl http://localhost:3000/.well-known/capstan.json
# OpenAPI spec
curl http://localhost:3000/openapi.json
# MCP server (for Claude Desktop / Cursor)
bunx capstan mcp@zauso-ai/capstan-ai 프레임워크 없이 독립적으로 작동합니다. 모든 TypeScript 프로젝트에서 구조화된 LLM 상호작용과 영구 메모리에 사용하세요.
import { createAI } from "@zauso-ai/capstan-ai";
const ai = createAI({ llm: openaiProvider({ apiKey: "..." }) });
await ai.think("Analyze this data");
await ai.remember("User prefers dark mode");
const context = await ai.memory.about("customer", "c-42").recall("preferences");