NOETIC
Framework

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.

PrimitiveKindPurpose
runCoderunCodeExecute arbitrary async code
callModelcallModelCall a language model
step.acpAgentacp-agentDelegate a turn to a coding agent over the Agent Client Protocol
invokeToolinvokeToolInvoke a single tool directly
conditionalconditionalConditional routing -- pick one step or skip
inParallelinParallelParallel execution -- race, all, or settle
spawnspawnIsolated child execution with context strategies
looploopRepeat 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, and invokeTool.
  • 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.

On this page