ACP (Agent Context Protocol) is a structured URI-based protocol for defining instructions between large language models (LLMs), tools, memory contexts, and DAG-based planners. It is optimized for agent systems, orchestration, and real-time reasoning.
ACP (Agent Context Protocol) introduces a custom URI scheme to standardize how execution targets, models, tools, and planner graphs are represented within distributed agent networks. These URI-based identifiers ensure a structured, interpretable, and interoperable format for defining agent-based operations, enabling seamless execution of tasks across multiple contexts.
ACP’s URI scheme provides a universal addressing mechanism that allows agents, tools, and models to be referenced and executed dynamically. This approach offers:
✔️ Interoperability: A unified format for referencing execution targets across different LLMs, tools, and memory stores.
✔️ Standardization: A structured way to define computation nodes in agent workflows.
✔️ Extensibility: Future-proof design to support additional capabilities like multi-agent collaboration, graph-based execution, and memory persistence.
The general structure of an ACP URI is:
{category}://{target}/{parameters}
llm://<model>[.memory]:<prompt>
.memory
is specified.
tool://<toolName>:<param>
plan://instruction;instruction;...
llm://model:prompt
— Executes a prompt against a named LLM.
llm://mistral:Generate a sci-fi story about Mars
llm://model.memory:prompt
— Attaches past memory context from the session into the LLM prompt.
llm://mistral.memory:Continue our conversation
tool://name:input
— Runs a tool plugin registered by name, passing the input string.
tool://search:best books on systems thinking
plan://
— Executes a DAG of instructions, with optional conditions and chaining.
plan:// A=llm://mistral:Give me a startup idea; B=llm://mistral.memory:Summarize it in one line; C=tool://search:B; B<-A; C<-B;
Supports conditional routing via ?contains:value
or ?else
.
plan:// A=llm://mistral:Flip a coin; B=llm://mistral:You said heads!; C=llm://mistral:You said tails!; D=llm://mistral:Fallback message; B<-A?contains:heads; C<-A?contains:tails; D<-A?else;
?contains:<keyword>
or ?else
..memory
flag.{ "A": "llm://mistral:... => result", "A.model": "mistral", "B": "Skipped due to condition", "C": "tool://search:... => data", "C.type": "tool", "type": "plan" }
import://...
Distributed under MIT. Contributions welcome.