|
1 | | -# SACP: Symposium's Extensions to ACP |
| 1 | +# SACP: Symposium Agent Client Protocol SDK |
2 | 2 |
|
3 | | -**SACP** is an SDK for building composable AI agent systems using the [Agent-Client Protocol](https://agentclientprotocol.com/). |
| 3 | +This repository houses the **Symposium ACP SDK**, which aims to: |
4 | 4 |
|
5 | | -## What is SACP? |
| 5 | +1. **Provide a nicer SDK for working with ACP in general** - Type-safe, async-first, and easy to use for building agents and editors |
| 6 | +2. **Support proxy components for composable extensions** - Build modular components that extend agent behavior without modifying the agent itself |
6 | 7 |
|
7 | | -SACP extends ACP to enable **composable agent architectures through proxy chains**. Instead of building monolithic AI tools, SACP allows you to create modular components that can intercept and transform messages flowing between editors and agents. |
| 8 | +Instead of building monolithic AI tools, SACP enables **composable agent architectures through proxy chains** where functionality can be added, removed, or reconfigured dynamically. |
8 | 9 |
|
9 | 10 | ```mermaid |
10 | 11 | flowchart LR |
11 | 12 | Editor[ACP Editor] -->|ACP| Conductor |
12 | | - |
| 13 | +
|
13 | 14 | subgraph Conductor[Conductor Process] |
14 | 15 | P1[Proxy 1] |
15 | 16 | P2[Proxy 2] |
16 | 17 | Agent[Base Agent] |
17 | | - |
| 18 | +
|
18 | 19 | P1 --> P2 --> Agent |
19 | 20 | end |
20 | 21 | ``` |
21 | 22 |
|
22 | 23 | ## Repository Structure |
23 | 24 |
|
24 | | -This repository contains three core crates: |
| 25 | +This repository contains several crates: |
| 26 | + |
| 27 | +**Core SDK:** |
| 28 | +- **[`sacp`](./src/sacp/)** - Core ACP SDK for building agents and editors in Rust |
| 29 | +- **[`sacp-tokio`](./src/sacp-tokio/)** - Tokio-specific utilities (process spawning, connection management) |
25 | 30 |
|
26 | | -- **[`sacp`](./src/sacp/)** - Core protocol types and traits for building clients and agents |
27 | | -- **[`sacp-proxy`](./src/sacp-proxy/)** - Framework for building proxy components |
| 31 | +**Proxy Framework:** |
| 32 | +- **[`sacp-proxy`](./src/sacp-proxy/)** - Framework for building ACP proxy components |
28 | 33 | - **[`sacp-conductor`](./src/sacp-conductor/)** - Binary that orchestrates proxy chains |
| 34 | + |
| 35 | +**Examples & Testing:** |
29 | 36 | - **[`elizacp`](./src/elizacp/)** - Example ACP agent implementing the classic Eliza chatbot (useful for testing) |
30 | 37 |
|
31 | 38 | ## Documentation |
32 | 39 |
|
33 | | -Full documentation is available in the [mdbook](https://rust-lang.github.io/mdBook/): |
34 | | - |
35 | | -```bash |
36 | | -mdbook serve |
37 | | -``` |
38 | | - |
39 | | -Then visit http://localhost:3000 |
40 | | - |
41 | | -Key chapters: |
42 | | -- [Introduction](./md/introduction.md) - What is SACP and why use it |
43 | | -- [Architecture Overview](./md/architecture.md) - How proxy chains work |
44 | | -- [Protocol Reference](./md/protocol.md) - Technical protocol details |
45 | | - |
46 | | -## Quick Start |
47 | | - |
48 | | -### Using as a Library |
49 | | - |
50 | | -Add to your `Cargo.toml`: |
51 | | - |
52 | | -```toml |
53 | | -[dependencies] |
54 | | -sacp = "0.1" # Core protocol types |
55 | | -sacp-proxy = "0.1" # For building proxies |
56 | | -``` |
57 | | - |
58 | | -### Building the Conductor |
59 | | - |
60 | | -```bash |
61 | | -cargo build --release -p sacp-conductor |
62 | | -``` |
63 | | - |
64 | | -The conductor binary will be at `target/release/sacp-conductor`. |
65 | | - |
66 | | -### Running a Proxy Chain |
67 | | - |
68 | | -```bash |
69 | | -# Start a proxy chain with two components |
70 | | -sacp-conductor agent proxy-component-1 proxy-component-2 base-agent |
71 | | -``` |
72 | | - |
73 | | -The conductor presents as a normal ACP agent to editors while orchestrating the proxy chain internally. |
74 | | - |
75 | | -## Example Use Case: Sparkle Integration |
76 | | - |
77 | | -The [sparkle-acp-proxy](https://github.com/nikomatsakis/sparkle-acp-proxy) demonstrates a real-world SACP proxy that: |
78 | | - |
79 | | -1. Injects Sparkle's MCP server during initialization |
80 | | -2. Prepends embodiment sequences to prompts |
81 | | -3. Provides collaborative AI patterns transparently |
82 | | - |
83 | | -## Development |
84 | | - |
85 | | -### Building |
86 | | - |
87 | | -```bash |
88 | | -cargo build |
89 | | -``` |
90 | | - |
91 | | -### Testing |
92 | | - |
93 | | -```bash |
94 | | -cargo test |
95 | | -``` |
96 | | - |
97 | | -### Running Examples |
98 | | - |
99 | | -See the test files in each crate for usage examples. |
100 | | - |
101 | | -## Design Documentation |
102 | | - |
103 | | -The `md/` directory contains detailed design documentation extracted from the Symposium project: |
104 | | - |
105 | | -- [proxying-acp.md](./md/proxying-acp.md) - Complete RFD with protocol specification |
106 | | -- [pacp-components.md](./md/pacp-components.md) - Component architecture overview |
107 | | -- [conductor.md](./md/conductor.md) - Conductor implementation details |
108 | | - |
109 | | -## Relationship to ACP |
110 | | - |
111 | | -SACP is an [extension to ACP](https://agentclientprotocol.com/protocol/extensibility), not a fork. SACP components communicate using ACP's extension protocol (`_meta` fields and custom methods). Standard ACP editors and agents work with SACP without modification. |
112 | | - |
113 | | -## License |
114 | | - |
115 | | -MIT OR Apache-2.0 |
116 | | - |
117 | | -## Contributing |
118 | | - |
119 | | -This repository will be upstreamed to the `agent-client-protocol` organization. Contributions welcome! |
| 40 | +Full documentation is available in the [mdbook](https://rust-lang.github.io/mdBook/). You can browse the latest version on [our Github pages site](https://symposium-acp.github.io/symposium-acp/). |
0 commit comments