ECC
The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.
npx ecc-install --profile fullThe agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.
npx ecc-install --profile fullFair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
npx n8nAn open-source AI agent that brings the power of Gemini directly into your terminal.
npx @google/gemini-cliThese intent pages connect this repository to workflow-first and comparison-first discovery routes.
Carries strong trust indicators from repository metadata
3855 GitHub stars recorded
The MCP ping utility can be enabled by either peer (client or server). See the Ping overview.
Client-side pinging is configured per server (default: 30s interval, 3 missed pings):
mcp:
servers:
myserver:
ping_interval_seconds: 30 # optional; <=0 disables
max_missed_pings: 3 # optional; consecutive timeouts before marking failed
For SSE and HTTP MCP servers, OAuth is enabled by default with minimal configuration. A local callback server is used to capture the authorization code, with a paste-URL fallback if the port is unavailable.
fast-agent.yaml:mcp:
servers:
myserver:
transport: http # or sse
url: http://localhost:8001/mcp # or /sse for SSE servers
auth:
oauth: true # default: true
redirect_port: 3030 # default: 3030
redirect_path: /callback # default: /callback
# scope: "user" # optional; if omitted, server defaults are used
keyring. If a keychain is unavailable (e.g., headless container), in-memory storage is used for the session.mcp:
servers:
myserver:
transport: http
url: http://localhost:8001/mcp
auth:
oauth: true
persist: memory
auth.oauth: false for that server.parallelparallel is also useful to ensemble ideas from different LLMs.
When using parallel in other workflows, specify an instruction to describe its operation.
Evaluator-Optimizers combine 2 agents: one to generate content (the generator), and the other to judge that content and provide actionable feedback (the evaluator). Messages are sent to the generator first, then the pair run in a loop until either the evaluator is satisfied with the quality, or the maximum number of refinements is reached. The final result from the Generator is returned.
If the Generator has use_history off, the previous iteration is returned when asking for improvements - otherwise conversational context is used.
@fast.evaluator_optimizer(
name="researcher",
generator="web_searcher",
evaluator="quality_assurance",
min_rating="EXCELLENT",
max_refinements=3
)
async with fast.run() as agent:
await agent.researcher.send("produce a report on how to make the perfect espresso")
When used in a workflow, it returns the last generator message as the result.
See the evaluator.py workflow example, or fast-agent quickstart researcher for a more complete example.
Routers use an LLM to assess a message, and route it to the most appropriate Agent. The routing prompt is automatically generated based on the Agent instructions and available Servers.
@fast.router(
name="route",
agents=["agent1","agent2","agent3"]
)
Look at the router.py workflow for an example.
Given a complex task, the Orchestrator uses an LLM to generate a plan to divide the task amongst the available Agents. The planning and aggregation prompts are generated by the Orchestrator, which benefits from using more capable models. Plans can either be built once at the beginning (plan_type="full") or iteratively (plan_type="iterative").
@fast.orchestrator(
name="orchestrate",
agents=["task1","task2","task3"]
)
See the orchestrator.py or agent_build.py workflow example.
# Install fast-agent
uv tool install -U fast-agent-mcp
# Run fast-agent with opus, shell support and subagent/smart mode
fast-agent --model opus -x --smart
Use local models with the generic provider, or automatically create the correct configuration for llama.cpp:
fast-agent model llamacpp
Any fast-agent setup or program can be used with any ACP client - the simplest way is to use fast-agent-acp:
# Run fast-agent inside Toad
toad acp "fast-agent-acp -x --model sonnet"
fast-agent enables you to create and interact with sophisticated multimodal Agents and Workflows in minutes. It is the first framework with complete, end-to-end tested MCP Feature support including Sampling and Elicitations.
fast-agent is CLI-first, with an optional prompt_toolkit-powered interactive terminal prompt (TUI-style input, completions, and in-terminal menus); responses can stream live to the terminal via rich without relying on full-screen curses UIs or external GUI overlays.
The simple declarative syntax lets you concentrate on composing your Prompts and MCP Servers to build effective agents.
Model support is comprehensive with native support for Anthropic, OpenAI and Google providers as well as Azure, Ollama, Deepseek and dozens of others via TensorZero. Structured Outputs, PDF and Vision support is simple to use and well tested. Passthrough and Playback LLMs enable rapid development and test of Python glue-code for your applications.
Recent features include:
fast-agent is the only tool that allows you to inspect Streamable HTTP Transport usage - a critical feature for ensuring reliable, compliant deployments. OAuth is supported with KeyRing storage for secrets. Use the fast-agent auth command to manage.
[!IMPORTANT]
Documentation is included in this repository under
docs/. Use the docs helper script from the repository root to install, generate, build, serve, screenshot, and assess the site.
Prompts and configurations that define your Agent Applications are stored in simple files, with minimal boilerplate, enabling simple management and version control.
Chat with individual Agents and Components before, during and after workflow execution to tune and diagnose your application. Agents can request human input to get additional context for task completion.
Simple model selection makes testing Model <-> MCP Server interaction painless. You can read more about the motivation behind this project here