Four products. One platform.
Uncensored AI · Self-hosted agent · Open-source framework · Recurring income
Uncensored · Open · Mainstream

Uncensored AI.
Ask anything.

107 models. Three tiers - you pick. Switch per conversation. Get the actual answer, not the approved version.

Start chatting
OR
Self-hosted AI agent

You ask.
It ships.

Every tool Thea builds appears on your dashboard instantly - fully usable UI, CLI command, AI tool, cron job. SSH, email, browser automation. Your machine. Your data.

Self-Host Free
OR
Open source · MIT + GPL v3

Write once.
Ship everywhere.

One TypeScript definition becomes a custom web UI, CLI command, AI tool, MCP server, mobile screen, cron job - automatically. Same contract. Zero rewrites. Fork it, own it.

Framework Docs
OR
Skill Economy

Publish. Refer.
Earn.

Build skills. Earn 15% when someone signs up through yours. Refer anyone - 10% of every payment, forever. Their network pays you too.

Start Earning
The Framework

Your AI builds new tools for itself.

Add an endpoint and it immediately becomes a custom interactive UI, CLI command, AI-callable tool, MCP server tool, and scheduled job. The stack is recursive - Claude Code builds next-vibe using next-vibe.

I need an endpoint to list active subscriptions with billing status. Three files, the usual pattern.
Claude Opus 4.6
Delegating to Claude Code. Three files: definition.ts, repository.ts, route.ts. It knows the patterns.
Done. Three files, 0 lint errors. The subscriptions endpoint is live as an interactive admin UI, CLI command, AI-callable tool, and MCP server tool - automatically. No extra wiring.
0.80 Credits 835 Tokens
The Framework

One definition. 13 platforms. Zero drift.

Write one endpoint definition. Get an interactive web UI, CLI command, AI tool, MCP server, cron job, WebSocket, mobile screen, desktop app, admin panel, agent skill, and more - automatically. Type-safe end-to-end. Role-controlled access. Zero boilerplate.

const { POST } = createEndpoint({
  method: Methods.POST,
  path: ["greet"],
  allowedRoles: [UserRole.PUBLIC, UserRole.CUSTOMER, UserRole.ADMIN],
  title: "Greet user",
  description: "Returns a personalised greeting",
  icon: "hand-wave",
  tags: ["greetings"],
  fields: objectField({
    type: WidgetType.CONTAINER,
    title: "Greeting form",
    usage: { request: "data", response: true },
    children: {
      name: requestField({
        schema: z.string().min(1).max(100),
        type: WidgetType.FORM_FIELD,
        fieldType: FieldDataType.TEXT,
        label: "Your name",
        placeholder: "e.g. Alice",
      }),
      message: responseField({
        schema: z.string(),
        type: WidgetType.ALERT,
      }),
      submitButton: widgetField({
        type: WidgetType.SUBMIT_BUTTON,
        text: "Say hello",
       }),
    },
  }),
  examples: {
    requests:  { simpleGreeting: { name: "Alice" } },
    responses: { simpleGreeting: { message: "Hello, Alice!" } },
  },
});
automatically becomes
🌍fetch()

Add a path. The REST endpoint exists.

No routing config. No controllers. The moment you define a path and schema, the endpoint is live at /api/[locale]/[path]. Role checks, validation, and error shapes happen before your code runs.

const res = await fetch("/api/en-US/greet", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ name: "Alice" }),
});
const { message } = await res.json();
// message → "Hello, Alice!"

Your AI builds new tools for itself

Add an endpoint → it immediately becomes an AI-callable tool, CLI command, live web UI, and scheduled job. The stack is recursive. Claude Code builds next-vibe using next-vibe.

Type-safe end to endRole-controlled accessZod-validatedZero boilerplate

One definition. Every platform.

Web UI, CLI, AI tool, MCP server, mobile screen, cron job — automatically. Fork it. Own it.