English: NovaAgent is a lightweight, extensible multi-agent AI framework with built-in tools, memory, and planning. It is designed for building single-agent assistants, coordinated agent teams, and agent-powered web workflows with minimal setup.
中文: NovaAgent 是一个轻量、可扩展的多智能体 AI 框架,内置工具调用、记忆系统和任务规划能力。它适合快速构建单智能体助手、多智能体协作团队,以及由智能体驱动的 Web 工作流。
nova-agent/
├── src/nova_agent/
│ ├── core/ # Agent, Orchestrator, Message types
│ ├── llm/ # LLM abstraction (OpenAI + Anthropic)
│ ├── tools/ # Tool system (search, code, HTTP, files)
│ ├── memory/ # Short-term + long-term memory backends
│ ├── planning/ # Task decomposition & execution plans
│ ├── cli/ # Interactive CLI (nova chat / team / plan)
│ └── web/ # FastAPI web UI
├── examples/ # Usage examples
└── tests/ # Test suite
- Multi-Agent Orchestration — Sequential, Parallel, Debate, Hierarchical modes
- Tool System — Web search, code executor, HTTP client, file operations, plus custom tools
- Memory — Short-term (sliding window) and long-term (persistent keyword search) backends
- Task Planning — LLM-driven task decomposition with dependency tracking
- Multi-Provider — OpenAI and Anthropic support out of the box
- Web UI — Built-in FastAPI + Jinja2 interface
# Install
cd nova-agent
pip install -e .
# Set API keys
export OPENAI_API_KEY=sk-xxx
# Interactive chat
nova chat
# Web UI
nova serve
# Open http://localhost:8080from nova_agent.core.agent import Agent, AgentConfig
from nova_agent.llm.openai import OpenAILLM
from nova_agent.tools.registry import ToolRegistry
from nova_agent.tools.web_search import WebSearchTool
llm = OpenAILLM(model="gpt-4o", api_key="sk-xxx")
tools = ToolRegistry()
tools.register(WebSearchTool())
agent = Agent(llm=llm, config=AgentConfig(name="my-agent"), tools=tools)
response = await agent.run("What is the latest Python version?")
print(response.content)from nova_agent.core.orchestrator import Orchestrator, OrchestrationMode
orchestrator = Orchestrator(llm=llm, tools=tools)
orchestrator.create_agent(AgentConfig(name="researcher"))
orchestrator.create_agent(AgentConfig(name="coder"))
orchestrator.create_agent(AgentConfig(name="analyst"))
results = await orchestrator.run(
"Analyze Python vs JavaScript performance",
mode=OrchestrationMode.SEQUENTIAL,
)from nova_agent.tools.base import BaseTool, ToolResult
class MyTool(BaseTool):
@property
def name(self): return "my_tool"
@property
def description(self): return "Does something useful."
@property
def parameters(self):
return {"input": {"type": "string", "description": "The input."}}
async def execute(self, input: str = "", **kwargs):
return ToolResult.ok(f"Processed: {input}")nova chat # Interactive chat with a single agent
nova team "your task" # Run a task with a team of agents
nova team --mode debate "your task"
nova plan "your task" # Generate a task execution plan
nova serve # Start the web UIpip install -e ".[dev]"
pytest tests/ -vMIT — see LICENSE.