Text → Aexol (From Tasks)
From Tasks are the reverse of code generation: instead of generating code from an Aexol spec, you describe your application in natural language and the AI writes the .aexol specification for you. Think of it as "spec-first design, AI-assisted."
How It Works
Plain English Description
│
▼
AI Generation (Claude/GPT)
│
▼
Parser Validation
│
┌────┴────┐
│ PASS? │
└────┬────┘
No │ Yes
▼ │ ▼
Retry │ .aexol Spec
(up to │ Ready for
max │ Code Gen
retries)│
The AI iteratively refines the output — if the generated Aexol doesn't parse or validate, it retries with the validation errors as feedback until the spec is syntactically and semantically correct.
Starting a From Task
Via Studio
Open the From panel in the Studio editor. Enter:
| Field | Description |
|---|---|
| Description | Natural language description of your application. Be specific about types, relationships, workflows, and permissions. |
| Model | Which AI model to use for generation |
| Guidance | Optional instructions to steer the generation (e.g. "Use snake_case for field names", "Include role-based access control") |
| Max retries | How many validation-retry cycles before giving up (default: 3) |
Via Remote MCP
curl -X POST "https://api.aexol.ai/mcp" \
-H "Authorization: Bearer sk-aexol-team-..." \
-d '{
"jsonrpc": "2.0", "id": 1, "method": "tools/call",
"params": {
"name": "remote_start_from",
"arguments": {
"content": "A task management app with projects, tasks, and users. Tasks have status: todo, in_progress, done. Users can be assigned to tasks.",
"guidance": "Use camelCase for field names",
"maxRetries": 3
}
}
}'Check status:
curl -X POST "https://api.aexol.ai/mcp" \
-H "Authorization: Bearer sk-aexol-team-..." \
-d '{
"jsonrpc": "2.0", "id": 1, "method": "tools/call",
"params": {
"name": "remote_get_from_task",
"arguments": { "taskId": "task_..." }
}
}'Wait for completion:
curl -X POST "https://api.aexol.ai/mcp" \
-H "Authorization: Bearer sk-aexol-team-..." \
-d '{
"jsonrpc": "2.0", "id": 1, "method": "tools/call",
"params": {
"name": "remote_wait_task",
"arguments": { "taskId": "task_...", "taskType": "from" }
}
}'Example
Input (natural language):
A blog platform with authors and posts.
Authors have a name and bio.
Posts have a title, content, and publish date.
Each post belongs to one author.
Posts can be in draft or published state.
Output (.aexol):
type Author {
id: string
name: string
bio: string
posts: [Post]
}
type Post {
id: string
title: string
content: string
publishDate: date
author: Author
status: PostStatus
}
enum PostStatus {
draft
published
}
Refinement
Already have an Aexol spec but want to improve it? Use refinement instead of generating from scratch:
curl -X POST "https://api.aexol.ai/mcp" \
-H "Authorization: Bearer sk-aexol-team-..." \
-d '{
"jsonrpc": "2.0", "id": 1, "method": "tools/call",
"params": {
"name": "remote_refine_aexol_content",
"arguments": {
"aexolContent": "type User { id: string, name: string }",
"refinementPrompt": "Add email field and role enum with admin/editor/viewer values"
}
}
}'You can also refine an existing From task — useful when the first generation was close but needs adjustments.
Knowledge Base Integration
When your project has Knowledge Base documents uploaded, the AI automatically retrieves relevant chunks and includes them in the generation prompt. This means generated specs reflect your team's existing types, naming conventions, and domain model.
From Task Lifecycle
| Status | Meaning |
|---|---|
PENDING | Task queued, waiting to start |
RUNNING | AI is generating and validating the spec |
COMPLETED | Valid .aexol spec produced — ready for code generation |
FAILED | All retry attempts exhausted without producing a valid spec |
CANCELLED | User cancelled the task |
Progress is streamed in real-time — the Studio UI shows live updates including current attempt count and any validation errors being retried.
Next Steps
- Code Generation — Generate code from your new Aexol spec
- Refinement — Refine generated Aexol iteratively
- Knowledge Base — Upload docs for context-aware generation