BUILD
INTELLIGENT
AGENTS
The composable Python framework for building agentic applications.
Security-first. Type-safe. No lock-in.
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().
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.