CLAUDE CODE MARKETPLACES

Omnicoreagent

<img src="assets/IMG5292.jpeg" alt="OmniCoreAgent Logo" width="250"/

claude mcp add omnicoreagent -- npx -y omnicoreagent
README.md
<p align="center"> <img src="assets/IMG_5292.jpeg" alt="OmniCoreAgent Logo" width="250"/> </p> <h1 align="center">OmniCoreAgent</h1> <p align="center"> <strong>Open Python Agent Harness and Runtime for Production AI Agents</strong><br /> <em>Everything around the model: parallel tool batches, structured observations, loop detection, memory, workspace files, MCP tools, subagents, background tasks, and serving.</em> </p> <p align="center"> <a href="https://pepy.tech/projects/omnicoreagent"><img src="https://static.pepy.tech/badge/omnicoreagent" alt="PyPI Downloads"></a> <a href="https://badge.fury.io/py/omnicoreagent"><img src="https://badge.fury.io/py/omnicoreagent.svg" alt="PyPI version"></a> <a href="https://www.python.org/downloads/"><img src="https://img.shields.io/badge/python-3.10+-blue.svg" alt="Python Version"></a> <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-green.svg" alt="License"></a> </p> <p align="center"> <a href="#quick-start">Quick Start</a> - <a href="#choose-your-path">Choose Your Path</a> - <a href="#what-makes-it-different">What Makes It Different</a> - <a href="#install-only-what-you-need">Install</a> - <a href="./cookbook">Cookbook</a> - <a href="#features">Features</a> - <a href="https://docs-omnicoreagent.omnirexfloralabs.com/docs">Docs</a> </p>

Quick Start

pip install omnicoreagent
export LLM_API_KEY=your_api_key
import asyncio
from omnicoreagent import OmniCoreAgent

agent = OmniCoreAgent(
    name="assistant",
    system_instruction="You are a helpful assistant.",
    model_config={"provider": "openai", "model": "gpt-4o"},
)

async def main():
    result = await agent.run("Research the top 3 open-source agent runtimes and summarize them.")
    print(result["response"])
    await agent.cleanup()

asyncio.run(main())

That is the smallest path: one agent, one model, the harness loop, session memory, guardrails, workspace files, error handling, and metrics around each run.

Context management, tool output offloading, BM25 tool retrieval, subagents, skills, cloud workspace storage, and production backends are opt-in so a small agent stays small.

Ready to go deeper? The Cookbook has progressive examples from hello world to production deployments.


Choose Your Path

GoalStart Here
Build your first agentQuick Start
Add Python toolsLocal tools cookbook
Connect MCP server toolsMCP tools cookbook
Manage memory and contextGetting started cookbook
Save files, artifacts, and large tool resultsTool offload cookbook
Build multi-step workflowsWorkflows cookbook
Serve an agent over HTTP/SSEOmniServe cookbook
Understand the runtime internalsImplementation Map

What Makes It Different

Most agent libraries stop at "LLM plus tool loop." OmniCoreAgent is built around the runtime problems that show up after that: slow sequential tools, noisy observations, stuck loops, context exhaustion, MCP server tools, durable workspace files, and runtime serving.

1. Agents call tools in batches instead of forced sequences

The usual tool loop looks like this:

LLM -> call tool A -> wait -> result -> LLM -> call tool B -> wait -> result

OmniCoreAgent lets the model request independent tools together:

LLM -> [tool A + tool B + tool C in parallel] -> one structured observation -> LLM

The model gets one complete view of the batch before it reasons again. A failed tool is represented beside the successful tools instead of silently collapsing the whole step.

Native function calling alone is not the runtime. OmniCoreAgent uses its own tool-call contract, parser, resolver, parallel runner, and result formatter so the harness controls the full execution path.

2. Tool results become structured observations

Raw tool output is often too noisy for the next reasoning step. Large payloads, errors, irrelevant fields, and prompt-injection content can all distort the loop.

OmniCoreAgent routes tool results through an observation pipeline:

tool output -> parse -> format -> guardrail check -> offload when configured -> observation -> model

The model receives the signal it needs to continue the task, not an unbounded dump of every byte returned by a tool. When tool offloading is enabled, large outputs are written into the active workspace and the model receives a readable preview plus a path it can use later.

3. Loop detection uses signatures beyond step counts

max_steps is still useful, but it is a blunt instrument. It stops an agent that is making progress just as quickly as one that is stuck.

OmniCoreAgent tracks SHA256-backed tool-call signatures across the loop. Each signature is based on the tool name, input, and output for the call. The runtime detects:

  • Consecutive loops: the same tool call returns the same result repeatedly.
  • Pattern loops: the same tool repeats a small interaction pattern.

When the harness stops a loop, the agent gets a reason. That makes debugging the agent behavior much easier than "max iterations reached."

4. The harness is already assembled

OmniCoreAgent ships as a working agent harness, not a bag of disconnected pieces:

model + prompt + loop + tools + memory + context + workspace + guardrails + events

Keep it small for simple agents, then turn on the heavier harness pieces when the workload needs them: MCP tools, BM25 tool retrieval, dynamic subagents, skills, cloud workspace storage, Redis/Postgres/MongoDB memory, event streams, and OmniServe.

5. Context is managed before the model call

When context management is enabled, OmniCoreAgent checks the active message history before every LLM request. If the configured threshold is crossed, the harness automatically applies the selected strategy before calling the model:

messages -> threshold check -> truncate or summarize+truncate -> LLM

The system prompt is preserved, recent messages are preserved, and older middle history is either summarized or removed depending on configuration. If you set the budget below your model's real context window, the harness acts before the provider rejects the request.


See It In Action

import asyncio
from omnicoreagent import MemoryRouter, OmniCoreAgent, ToolRegistry

tools = ToolRegistry()

@tools.register_tool("search_web")
def search_web(query: str) -> dict:
    """Search the web for information."""
    return {"results": [f"Result for: {query}"]}

@tools.register_tool("read_file")
def read_file(path: str) -> dict:
    """Read a local project file."""
    return {"path": path, "content": f"Contents of {path}"}

agent = OmniCoreAgent(
    name="research-agent",
    system_instruction=(
        "You are a research assistant. Use tools in parallel when the calls are "
        "independent and you can reason over the results together."
    ),
    model_config={"provider": "openai", "model": "gpt-4o"},
    local_tools=tools,
    memory_router=MemoryRouter("in_memory"),
    agent_config={
        "max_steps": 20,
        "context_management": {"enabled": True},
        "tool_offload": {"enabled": True},
        "enable_subagents": True,
        "enable_advanced_tool_use": True,
    },
)

async def main():
    result = await agent.run(
        "Search for recent AI agent papers and read notes.md. Do both at once "
        "if neither depends on the other."
    )
    print(result["response"])
    await agent.cleanup()

asyncio.run(main())

The runtime accepts search_web and read_file in the same batch, returns both results together, and continues from one structured observation.


Install Only What You Need

pip install omnicoreagent                    # Core runtime
pip install "omnicoreagent[redis]"           # Redis memory + event streams
pip install "omnicoreagent[postgres]"        # PostgreSQL / SQL memory
pip install "omnicoreagent[mongodb]"         # MongoDB memory
pip install "omnicoreagent[s3]"              # S3 / R2 workspace storage
pip install "omnicoreagent[serve]"           # OmniServe REST/SSE API
pip install "omnicoreagent[all]"             # Everything

Production backends are installable extras. Install only what the agent actually uses.


Features

FeatureWhat It Does
Parallel Batch Tool ExecutionExecutes independent tool calls concurrently and returns one combined observation to the model.
Structured Observation PipelineParses, formats, guardrail-checks, and offloads tool results when configured before the model sees them.
Signature-Based Loop DetectionDetects repeated SHA256-backed tool-call signatures and repeated tool interaction patterns beyond step-count exhaustion.
MCP Native ToolsConnects MCP servers over stdio, SSE, and Streamable HTTP, including OAuth-capable remote servers.
Local Tool RegistryRegisters Python functions as tools with inferred schemas and async/sync execution support.
Multi-Tier MemoryUses in-memory, Redis, MongoDB, or SQL-backed session history through the memory router.
Runtime Backend SwitchingSwitches memory and event backends at runtime when configured.
Workspace FilesGives agents a local, S3, or R2-backed file workspace for notes, scratchpads, artifacts, and tool offloads.
Context EngineeringChecks context before each model call and automatically truncates or summarizes when the configured budget threshold is crossed.
Tool Output OffloadingWrites large tool results to workspace files and gives the model a preview plus a file reference.
Dynamic SubagentsLets the main agent spawn focused workers with isolated context and shared workspace output.
Agent SkillsLoads packaged capabilities implemented with Python, Bash, or Node.js.
BM25 Tool RetrievalSelects relevant tools from large tool sets so the prompt stays focused.
GuardrailsAdds prompt-injection screening inside the observation path with configurable behavior.
Event SystemEmits structured runtime events for agent runs, tool calls, and streaming integrations.
Workflow OrchestrationProvides sequential, parallel, and router agents for multi-step application workflows.
Background AgentsSupports scheduled autonomous tasks for interval-based workloads.
Universal ModelsRoutes through LiteLLM to OpenAI, Anthropic, Gemini, Groq, Ollama, DeepSeek, Mistral, OpenRouter, Azure, and Cencori.
OmniServeTurns an agent into a REST/SSE service with lifecycle management and metrics.

Implementation Map

OmniCoreAgent's capabilities are backed by concrete runtime modules:

CapabilityWhere It Lives
Parallel tool batchescore/tools/tool_batch_runner.py
XML tool-call contractcore/agents/xml_parser.py
Structured observationscore/tools/tool_observation.py
Tool output offloadingcore/workspace/artifacts.py
Automatic context controlcore/agents/llm_step.py, core/context_manager.py
Workspace filescore/workspace/tools.py, core/workspace/storage.py
Dynamic subagentscore/subagents.py
Loop detectioncore/agents/loop_detection.py
MCP server toolsmcp_clients_connection/client.py
OmniServeserve/

See the Agent Harness docs for the full implementation map.


Cookbook

All examples live in the Cookbook and are organized by use case.

CategoryWhat You'll Build
Getting StartedFirst agent, tools, memory, events
WorkflowsSequential, Parallel, Router agents
Background AgentsScheduled autonomous tasks
ProductionGuardrails, serving, and production patterns

Configuration

Environment Variables

For the first run, most hosted model providers only need LLM_API_KEY. OmniCoreAgent defaults memory and events to in-memory storage, workspace files to local disk, and optional production integrations stay off until you configure them.

export LLM_API_KEY=your_api_key

Add backend-specific variables only when you opt into Redis, MongoDB, SQL database storage, S3, R2, or OmniServe deployment settings.

Full Harness Config Example

The defaults keep the first agent small: workspace files and guardrails are on, conversation memory is in-memory, and advanced harness pieces stay off until you enable them. This example shows the production-style switches together.

agent_config = {
    "max_steps": 15,
    "tool_call_timeout": 30,
    "request_limit": 0,                  # 0 = unlimited
    "total_tokens_limit": 0,             # 0 = unlimited
    "memory_config": {
        "mode": "sliding_window",
        "value": 10000,
        "summary": {"enabled": False},
    },
    "enable_workspace_files": True,      # Default on
    "guardrail_mode": "full",            # Default
    "context_management": {"enabled": True},  # Default off
    "tool_offload": {"enabled": True},        # Default off
    "enable_advanced_tool_use": True,         # Default off
    "enable_subagents": True,                 # Default off
    "enable_agent_skills": True,              # Default off
}

When enable_subagents is true, workspace files are enabled automatically so subagents write outputs, notes, todos, and artifacts into the active workspace.

Full reference: Configuration Guide


Development

git clone https://github.com/omnirexflora-labs/omnicoreagent.git
cd omnicoreagent

uv venv && source .venv/bin/activate
uv sync --dev

pytest tests/ -v
pytest tests/ --cov=src --cov-report=term-missing

Troubleshooting

ErrorFix
Invalid API keyExport LLM_API_KEY with the key for the provider selected in model_config.
ModuleNotFoundError for Redis / Postgres / MongoDB / S3Install the matching extra, for example pip install "omnicoreagent[redis]".
Redis connection failedStart Redis or use MemoryRouter("in_memory").
MCP connection refusedEnsure the MCP server is running before starting the agent.

More help: Basic Usage Guide


Contributing

git clone https://github.com/omnirexflora-labs/omnicoreagent.git
cd omnicoreagent

uv venv && source .venv/bin/activate
uv sync --dev
pre-commit install

See CONTRIBUTING.md for guidelines. PRs are welcome.


License

MIT - see LICENSE.


Author

Built by Abiola Adeshina.

The OmniRexFlora Ecosystem

ProjectDescription
OmniMemorySelf-evolving memory for autonomous agents
OmniCoreAgentProduction agent harness (this project)
OmniDaemonEvent-driven runtime for running agents as supervised, autonomous infrastructure services

Built On

LiteLLM - FastAPI - Redis - Pydantic


<p align="center"> <a href="https://github.com/omnirexflora-labs/omnicoreagent">Star on GitHub</a> - <a href="https://github.com/omnirexflora-labs/omnicoreagent/issues">Report Bug</a> - <a href="https://github.com/omnirexflora-labs/omnicoreagent/issues">Request Feature</a> - <a href="https://docs-omnicoreagent.omnirexfloralabs.com/docs">Documentation</a> </p>
Stars236
Installs231
Forks57
LanguagePython
AddedMar 19, 2025
UpdatedMay 14, 2026
View on GitHub