Overview
Noetic is a TypeScript agent framework built on eight composable primitives.
Philosophy
Most frameworks give you a pre-built agent to tweak. Noetic gives you the primitives to build agents from scratch, and every composed agent shape stays legible in terms of those primitives.
Every agent is a composition of small, typed building blocks. There is no hidden control flow, no magic base class, and no runtime surprises. You describe what your agent does; the interpreter figures out how to run it.
The Eight Primitives
Noetic's entire execution model is built from eight primitives. Each one is a Step -- a typed, serializable unit of work.
| Primitive | Kind | Purpose |
|---|---|---|
runCode | runCode | Execute arbitrary async code |
callModel | callModel | Call a language model |
step.acpAgent | acp-agent | Delegate a turn to a coding agent over the Agent Client Protocol |
invokeTool | invokeTool | Invoke a single tool directly |
conditional | conditional | Conditional routing -- pick one step or skip |
inParallel | inParallel | Parallel execution -- race, all, or settle |
spawn | spawn | Isolated child execution with context strategies |
loop | loop | Repeat a step until a predicate says stop |
How They Compose
Primitives nest freely. A loop body can be a callModel step, a conditional, or even another loop. An inParallel can fan out into spawned sub-agents. The type system keeps inputs and outputs aligned at every boundary.
import { callModel, conditional, inParallel, spawn, until } from '@noetic-tools/core';
// A conditional that picks between two model calls
const router = conditional({
id: 'pick-model',
route: (input: string, ctx) => {
if (input.includes('code')) {
return callModel({
id: 'code-llm',
model: 'openai/gpt-4o',
});
}
return callModel({
id: 'chat-llm',
model: 'openai/gpt-4o-mini',
});
},
});Beyond Primitives
Context System
Noetic ships with a layered context system -- scratchpad, observations, task state, and more. Context layers participate in spawn/return lifecycles and project context into LLM-friendly views.
AgentHarness
The AgentHarness orchestrates execution, manages context, and wires up observability. Swap in your own AgentHarness implementation for persistence, queuing, or distributed execution.
Next Steps
- Getting Started -- install and run your first agent.
- Steps -- deep dive into
runCode,callModel, andinvokeTool. - ACP Agent Steps -- run a coding agent (Claude Code, Codex, Gemini CLI) as a step.
- Control Flow -- conditional routing and parallel execution.
- Spawn -- isolated child agents.
- Loop & Until -- iteration and termination.