v0.3.0 — Alpha

BUILD

INTELLIGENT

AGENTS

The composable Python framework for building agentic applications.
Security-first. Type-safe. No lock-in.

$ pip install "git+https://github.com/NinoCoelho/loom.git"

Everything you need

Composable by design

No decorators, no base classes, no global state — just components you wire together. Use what you need, extend what you want.

Agentic Loop

Turn-based LLM conversation with configurable iterations, tool dispatch, and telemetry. The core engine that drives every agent.

Tool System

9 built-in tools including HTTP calls, terminal, web search, SSH, and delegation. Register custom tools with a simple handler pattern.

Credential Pipeline

Encrypted secret stores, 9 auth appliers (OAuth2, SigV4, JWT), and policy enforcement. The agent never touches secret bytes.

Human-in-the-Loop

Structural HITL primitive — confirm, choice, and text questions via broker, terminal, or web SSE. Not a callback, an architecture choice.

Skills & Memory

Progressive skill disclosure from Markdown with YAML frontmatter. Hybrid BM25 + vector + salience memory retrieval with GraphRAG.

Streaming

Typed StreamEvent objects — content deltas, tool call deltas, usage, errors, and done. Full SSE support via FastAPI server.

Multi-Agent Runtime

AgentRuntime manages multiple agents with shared resources, inter-agent delegation, and ACP WebSocket communication.

MCP + Web Tools

Model Context Protocol client for external tool servers. Multi-provider web search (DDG, Brave, Tavily, Google) and scrapling-based scraping.

10 lines to start

Your first agent
in seconds

An Agent takes a provider, a tool registry, and a config. That's it. Run conversations with run_turn().

Follow the full tutorial
agent.py
import asyncio
from loom.loop import Agent, AgentConfig
from loom.llm.openai_compat import OpenAICompatibleProvider
from loom.tools.registry import ToolRegistry
from loom.types import ChatMessage, Role

async def main():
    provider = OpenAICompatibleProvider(
        base_url="http://localhost:11434/v1",
        default_model="llama3",
    )

    agent = Agent(
        provider=provider,
        tool_registry=ToolRegistry(),
        config=AgentConfig(
            system_preamble="You are a helpful assistant."
        ])
    )

    messages = [ChatMessage(role=Role.USER, content="Hello!")]
    turn = await agent.run_turn(messages)
    print(turn.reply)

Start building with Loom

From a 10-line script to a fully-featured agentic application — tools, memory, skills, human-in-the-loop, and credentials. One layer at a time.

19
Subsystems
9
Built-in Tools
9
Auth Appliers
43
Test Files