astra-lang.org

Vision · v0.9 → v1.0

What if agents were
a language feature?

Today's agent stacks bolt tools, prompts, and memory onto Python with decorators and dictionaries — nothing checks them. Astra's endgame is to make these first-class, typechecked constructs of the language itself.

ThesisThe division of labor is changing

Every previous language generation optimized for a human at a keyboard. The next one has three participants with different strengths:

ParticipantContributesNeeds from the language
The agentTactical speed — code at machine paceA generable surface + machine-readable feedback
The compilerStrategic structure — enforced designTypes, contracts, deterministic builds baked in
The humanJudgment — intent and reviewCode where the compiler already ruled out the mundane bugs

Astra is designed around that triangle. Each release strengthens the strategic layer another notch:

ReleaseStrategic guarantee it adds
v0.6–0.7 shippedTypes, Result, machine-readable diagnostics, explicit dyn, reproducible locks
v0.8 shippedOne true LLVM-IR backend — the foundation every future target builds on
v0.9 shippedA sound core: nominal types, payload enums, ? error handling, ARC memory reclamation, a compiler that never panics — delivered as cross-platform binaries
NextTool schemas, agent state, prompts, and delegation — all typechecked; generated code sandboxed in WASM
v1.0One strategic layer across native, WASM, and GPU targets

Delivery against each guarantee is scored on the progress tracker — currently 5 of 11 shipped, each backed by a passing test.

AheadAgent-native keywords

Four keywords are reserved and ratified (Bet 4). The design intent — syntax is illustrative and will evolve through an RFC process:

design sketch — not yet implemented
tool search_flights(from: str, to: str, date: str) -> Result<[Flight], ApiError> {
    // a tool is a typed, sandboxed capability;
    // its signature IS its schema — no JSON-schema drift
}

memory TripContext {
    budget: float,
    preferences: [str]        // typed, persistent agent state
}

agent TravelPlanner {
    tools: [search_flights],
    memory: TripContext,

    prompt plan = "Find flights within ${memory.budget}";
}

What the compiler can then guarantee — before anything runs:

  • Tool contracts hold. A tool's parameter and return types are checked at every call site. The "function-calling schema" cannot drift from the implementation because they are the same thing.
  • Memory is typed. Agent state isn't a dict of anything — reads and writes typecheck like struct access.
  • Prompts are checked templates. A prompt interpolation referencing a missing memory field is a compile error, not a silent hallucination input.
  • Subagent boundaries are contracts. An agent handing work to another agent is a typed call — the compiler verifies the whole delegation graph.

Alongside the keywords: an agent SDK (bindings for LLM providers) and a sandbox so tools execute with declared capabilities only.

Enabling layerWhat has to land first

WASM target

The same LLVM backend emits WebAssembly — verified agent code running in a capability-scoped sandbox, plus a browser playground for this site.

Python interop (embedded CPython)

Astra won't pretend NumPy and PyTorch don't exist. A typed boundary calls into the Python ecosystem where it's strong, keeps the orchestration layer verified.

LSP + fmt

Language server and formatter — for the humans reviewing what agents wrote.

Real async runtime + stdlib core

async/await already parses and compiles (synchronous lowering); a real task runtime and a standard library form under ARC memory management.

v1.0 completes the arc

  • GPU target (NVPTX) — the third LLVM target: same language from orchestration script to kernel.
  • Mifa registry (mifa.dev) — checksummed, signed packages; the lockfile contract goes global.
  • Production tooling — test/bench runners, docs generator, debugger support.

PositioningAstra vs. the alternatives for agent code

Every language in this table is excellent at what it was designed for. The comparison is scoped to one question: what should an agent generate?

PythonRustGoMojoAstra
Mistakes caught before run Few (runtime)MostManyMost Most — by design goal
Diagnostics as machine-readable contract NoPartial (--message-format=json, rich but complex)PartialNo Yes — stable codes + suggestions, primary interface
Easy for an LLM to generate correctly YesHard (lifetimes)YesModerate Yes — Python-like surface, no borrow checker
Native performance NoYesYesYes Yes (LLVM)
Agent primitives in the language Frameworks onlyFrameworks onlyFrameworks onlyNo Planned as keywords
Memory model burden on the generator None (GC)High (ownership)None (GC)Low None visible (ARC)
Maturity today ProductionProductionProductionEarly Alpha — tracked honestly

The bet in one sentence: Rust-grade verification with Python-grade generability, plus agent concepts the compiler itself understands. No incumbent occupies that intersection — and the maturity row is exactly why this roadmap exists.

LockedThe five bets underneath

The vision isn't a mood board — it rests on five architecture decisions debated and ratified on 2026-07-02, each with recorded rationale, accepted costs, and first milestones (two of which have already shipped):

BetDecisionFirst milestone
1 — MemoryARC + escape analysis + regionreclaiming since v0.9 (partial)
2 — TypingStatic by default, gradual via dynshipped v0.7
3 — BackendOne LLVM compiler → native / WASM / GPUnative shipped v0.8 · WASM planned
4 — AI primitivestool/agent/prompt/memory keywordsplanned
5 — InteropEmbedded CPython in stdlibplanned

The full decision records — rationale, accepted costs, amendment process — live in the repository and publish with the source at v1.0-beta.