Skip to content

Commit db7931a

Browse files
authored
Merge pull request #97 from nikomatsakis/main
docs: add Using Symposium section and improve installation guides
2 parents 0e86585 + e229e3b commit db7931a

File tree

28 files changed

+1538
-228
lines changed

28 files changed

+1538
-228
lines changed

AGENTS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ We track all pending work in GitHub issues on the symposium/symposium repository
2222

2323
Agent MUST follow the following guidance:
2424

25+
* **Check common issues first**: Before starting a coding task, review `md/design/common-issues.md` for recurring bug patterns that may apply to your work.
2526
* **Update design documentation**: Update the mdbook chapters in `md/design` as appropriate so that they are kept current. This will help both you and future agents to remember how things work.
2627
* **Check that everything builds and don't forget tests**: After making changes, remember to check that the typescript + swift + Rust code builds and to run tests.
2728
* **Auto-commit completed work**: After completing a series of related changes, automatically commit them with a descriptive message. This makes it easier for the user to review progress.

md/SUMMARY.md

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,23 @@
1212

1313
- [Introduction](./introduction.md)
1414
- [About](./about.md)
15-
- [How it works](./how-it-works.md)
15+
16+
# Using Symposium
17+
1618
- [How to install](./install.md)
1719
- [VSCode](./install-vscode.md)
1820
- [Other editors](./install-other.md)
19-
- [How to contribute](./contribute.md)
21+
- [Using Symposium](./using/symposium.md)
22+
- [Built-in extensions](./using/extensions.md)
23+
- [Sparkle](./using/sparkle.md)
24+
- [Ferris](./using/ferris.md)
25+
- [Cargo](./using/cargo.md)
2026

21-
# Design and implementation
27+
# Contributing
2228

29+
- [How to contribute](./contribute.md)
2330
- [Overview](./design/implementation-overview.md)
31+
- [Common Issues](./design/common-issues.md)
2432
- [Distribution](./design/distribution.md)
2533
- [Components](./design/components.md)
2634
- [Rust Crate Sources](./design/rust-crate-sources.md)
@@ -33,24 +41,17 @@
3341
- [Testing Implementation](./design/vscode-extension/testing-implementation.md)
3442
- [Packaging](./design/vscode-extension/packaging.md)
3543
- [Agent Registry](./design/vscode-extension/agent-registry.md)
44+
- [Agent Extensions](./design/vscode-extension/extensions.md)
3645
- [Language Model Provider](./design/vscode-extension/lm-provider.md)
3746
- [Language Model Tool Bridging](./design/vscode-extension/lm-tool-bridging.md)
3847
- [Implementation Status](./design/vscode-extension/implementation-status.md)
39-
40-
# References
41-
42-
<!--
43-
AGENTS: This section is used to store detailed
44-
research reports that cover specific API details
45-
you might want.
46-
-->
47-
48-
- [MynahUI GUI Capabilities](./references/mynah-ui-guide.md)
49-
- [VSCode Webview Lifecycle](./references/vscode-webview-lifecycle.md)
50-
- [VSCode Language Model Tool API](./references/vscode-lm-tool-api.md)
51-
- [VSCode Language Model Tool Rejection](./references/vscode-lm-tool-rejection.md)
52-
- [Language Server Protocol Overview](./research/lsp-overview/README.md)
53-
- [Base Protocol](./research/lsp-overview/base-protocol.md)
54-
- [Language Features](./research/lsp-overview/language-features.md)
55-
- [Implementation Guide](./research/lsp-overview/implementation-guide.md)
56-
- [Message Reference](./research/lsp-overview/message-reference.md)
48+
- [Reference material](./references/index.md)
49+
- [MynahUI GUI Capabilities](./references/mynah-ui-guide.md)
50+
- [VSCode Webview Lifecycle](./references/vscode-webview-lifecycle.md)
51+
- [VSCode Language Model Tool API](./references/vscode-lm-tool-api.md)
52+
- [VSCode Language Model Tool Rejection](./references/vscode-lm-tool-rejection.md)
53+
- [Language Server Protocol Overview](./research/lsp-overview/README.md)
54+
- [Base Protocol](./research/lsp-overview/base-protocol.md)
55+
- [Language Features](./research/lsp-overview/language-features.md)
56+
- [Implementation Guide](./research/lsp-overview/implementation-guide.md)
57+
- [Message Reference](./research/lsp-overview/message-reference.md)
451 KB
Loading
77.5 KB
Loading

md/design/common-issues.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Common Issues
2+
3+
This section documents recurring bugs and pitfalls to check when implementing new features.
4+
5+
## VS Code Extension
6+
7+
### Configuration Not Affecting New Tabs
8+
9+
**Symptom:** User changes a setting, but new tabs still use the old value.
10+
11+
**Cause:** The setting affects how the agent process is spawned, but isn't included in `AgentConfiguration.key()`. Tabs with the same key share an agent process, so the new tab reuses the existing (stale) process.
12+
13+
**Fix:** Include the setting in `AgentConfiguration`:
14+
1. Add the setting to the `AgentConfiguration` constructor
15+
2. Include it in `key()` so different values produce different keys
16+
3. Read it in `fromSettings()` when creating configurations
17+
18+
**Example:** The `symposium.extensions` setting was added but new tabs ignored it until extensions were added to `AgentConfiguration.key()`. See commit `fix: include extensions in AgentConfiguration key`.
19+
20+
**General principle:** If a setting affects process behavior (CLI args, environment, etc.), it must be part of the process identity key.

md/design/vscode-extension/architecture.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,3 +167,5 @@ sequenceDiagram
167167
```
168168

169169
The extension maintains tab↔session mappings and handles webview visibility, while the agent maintains session state and generates responses.
170+
171+
See also: [Common Issues](../common-issues.md) for recurring bug patterns.
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
# Agent Extensions
2+
3+
Agent extensions are proxy components that enrich the agent's capabilities. The VS Code extension allows users to configure which extensions are active, their order, and to add custom extensions.
4+
5+
## Built-in Extensions
6+
7+
| ID | Name | Description |
8+
|----|------|-------------|
9+
| `sparkle` | Sparkle | AI collaboration identity and embodiment |
10+
| `ferris` | Ferris | Rust development tools (crate sources, rust researcher) |
11+
| `cargo` | Cargo | Cargo build and run tools |
12+
13+
## Extension Sources
14+
15+
Extensions can come from three sources:
16+
17+
- **built-in**: Bundled with Symposium (sparkle, ferris, cargo)
18+
- **registry**: Installed from the shared agent registry
19+
- **custom**: User-defined via executable, npx, pipx, or URL
20+
21+
## Configuration
22+
23+
Extensions are configured via the `symposium.extensions` VS Code setting:
24+
25+
```json
26+
"symposium.extensions": [
27+
{ "id": "sparkle", "_enabled": true, "_source": "built-in" },
28+
{ "id": "ferris", "_enabled": true, "_source": "built-in" },
29+
{ "id": "cargo", "_enabled": true, "_source": "built-in" }
30+
]
31+
```
32+
33+
Custom extensions include their distribution:
34+
35+
```json
36+
{
37+
"id": "my-extension",
38+
"_enabled": true,
39+
"_source": "custom",
40+
"name": "My Extension",
41+
"distribution": {
42+
"npx": { "package": "@myorg/my-extension" }
43+
}
44+
}
45+
```
46+
47+
**Order matters** - extensions are applied in the order listed. The first extension in the list is closest to the editor, and the last is closest to the agent.
48+
49+
**Default behavior** - when no setting exists, all built-in extensions are enabled. If the user returns to the default configuration, the key is removed from settings.json entirely.
50+
51+
## Settings UI
52+
53+
The Settings panel includes an Extensions section where users can:
54+
55+
- **Enable/disable** extensions via checkbox
56+
- **Reorder** extensions by dragging the handle
57+
- **Delete** extensions from the list
58+
- **Add** extensions via the "+ Add extension" link, which opens a QuickPick dialog
59+
60+
### Add Extension Dialog
61+
62+
The QuickPick dialog shows three sections:
63+
64+
1. **Built-in** - sparkle, ferris, cargo (greyed out if already added)
65+
2. **From Registry** - extensions from the shared registry with `type: "extension"`
66+
3. **Add Custom Extension**:
67+
- From executable on your system (local command/path)
68+
- From npx package
69+
- From pipx package
70+
- From URL to extension.json (GitHub URLs auto-converted to raw)
71+
72+
## CLI Interface
73+
74+
The VS Code extension passes extension configuration to `symposium-acp-agent` via `--proxy` arguments:
75+
76+
```bash
77+
symposium-acp-agent --proxy sparkle --proxy ferris --proxy cargo -- npx @zed-industries/claude-code-acp
78+
```
79+
80+
Only enabled extensions are passed, in their configured order.
81+
82+
## Registry Format
83+
84+
The shared registry includes both agents and extensions:
85+
86+
```json
87+
{
88+
"date": "2026-01-07",
89+
"agents": [...],
90+
"extensions": [
91+
{
92+
"id": "some-extension",
93+
"name": "Some Extension",
94+
"version": "1.0.0",
95+
"description": "Does something useful",
96+
"distribution": {
97+
"npx": { "package": "@example/some-extension" }
98+
}
99+
}
100+
]
101+
}
102+
```
103+
104+
## Architecture
105+
106+
```
107+
┌─────────────────────────────────────────────────┐
108+
│ VS Code Extension │
109+
│ - Reads symposium.extensions setting │
110+
│ - Fetches registry extensions │
111+
│ - Renders UI in Settings panel │
112+
│ - Shows QuickPick for adding extensions │
113+
│ - Builds --proxy args for agent spawn │
114+
└─────────────────┬───────────────────────────────┘
115+
116+
┌─────────────────▼───────────────────────────────┐
117+
│ symposium-acp-agent │
118+
│ - Parses --proxy arguments │
119+
│ - Validates proxy names │
120+
│ - Builds proxy chain in specified order │
121+
└─────────────────┬───────────────────────────────┘
122+
123+
┌─────────────────▼───────────────────────────────┐
124+
│ symposium-acp-proxy (Symposium struct) │
125+
│ - from_proxy_names() creates config │
126+
│ - build_proxies() instantiates components │
127+
│ - Conductor orchestrates the chain │
128+
└─────────────────────────────────────────────────┘
129+
```
130+
131+
## Future Work
132+
133+
- **Per-extension configuration**: Add sub-options for extensions (e.g., which Ferris tools to enable)
134+
- **Extension updates**: Check for and apply updates to registry-sourced extensions

md/design/vscode-extension/implementation-status.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,18 @@ These allow protocol extensions beyond the ACP specification. Not currently need
9191
- [ ] Workspace-specific state persistence
9292
- [ ] Tab history and conversation export
9393

94+
## Agent Extensions
95+
96+
Agent extensions are proxy components that enrich the agent's capabilities. See [Agent Extensions](./extensions.md) for details.
97+
98+
- [x] CLI support (`--proxy` argument for `symposium-acp-agent`)
99+
- [x] VS Code setting (`symposium.extensions` array)
100+
- [x] Settings UI with enable/disable checkboxes
101+
- [x] Drag-to-reorder in Settings UI
102+
- [x] Delete and add extensions back
103+
- [ ] Registry extensions (install from agent registry with `type = 'extension'`)
104+
- [ ] Per-extension configuration (e.g., which Ferris tools to enable)
105+
94106
## Language Model Provider (Experimental)
95107

96108
> Set `symposium.enableExperimentalLM: true` in VS Code settings to enable.

md/install-vscode.md

Lines changed: 46 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,55 @@
11
# VSCode and VSCode-based editors
22

3+
## Step 1: Install the extension
4+
35
Install the Symposium extension from:
46

5-
- [VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=symposium.symposium)
7+
- [VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=symposium-dev.symposium)
68
- [Open VSX Registry](https://open-vsx.org/extension/symposium/symposium)
79

8-
## Getting started
10+
<img src="./artwork/screenshots/vscode-install-panel.jpg" alt="Installing Symposium extension" class="screenshot-centered"/>
11+
12+
## Step 2: Activate the panel and start chatting
13+
14+
<div class="panel-guide">
15+
<img src="./artwork/screenshots/screenshot-vscode-panel.jpg" alt="Symposium panel in VSCode"/>
16+
<div class="panel-legend">
17+
18+
1. **Activity bar icon** — Click to open the Symposium panel
19+
2. **New tab** — Start a new conversation with the current settings
20+
3. **Settings** — Expand to configure agent and extensions
21+
4. **Agent selector** — Choose which agent to use (Claude Code, Gemini CLI, etc.)
22+
5. **Extensions** — Enable MCP servers that add capabilities to your agent
23+
6. **Add extension** — Add custom extensions
24+
7. **Edit all settings** — Access full settings
25+
26+
</div>
27+
</div>
28+
29+
## Custom Agents
30+
31+
The agent selector shows agents from the Symposium registry. To add a custom agent not in the registry, use VS Code settings.
32+
33+
Open **Settings** (Cmd/Ctrl+,) and search for `symposium.agents`. Add your custom agent to the JSON array:
34+
35+
```json
36+
"symposium.agents": [
37+
{
38+
"id": "my-custom-agent",
39+
"name": "My Custom Agent",
40+
"distribution": {
41+
"npx": { "package": "@myorg/my-agent" }
42+
}
43+
}
44+
]
45+
```
946

10-
Once installed, you'll see the Symposium icon in the Activity Bar on the left side of your editor:
47+
### Distribution Types
1148

12-
<img src="./artwork/ferris-in-a-robe-thick.svg" alt="Symposium icon" width="48"/>
49+
| Type | Example | Notes |
50+
|------|---------|-------|
51+
| `npx` | `{ "npx": { "package": "@org/pkg" } }` | Requires npm/npx installed |
52+
| `pipx` | `{ "pipx": { "package": "my-agent" } }` | Requires pipx installed |
53+
| `executable` | `{ "executable": { "path": "/usr/local/bin/my-agent" } }` | Local binary |
1354

14-
Click the icon to open the Symposium panel. From there you can select your agent and start a chat session.
55+
Your custom agent will appear in the agent selector alongside registry agents.

md/introduction.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
<center>
22
<img src="./artwork/symposium5_vase-ferris.svg" alt="Symposium Logo" width="50%"/>
3-
<div class="warning-banner">⚠️ Pre-alpha software: may eat your laundry</div>
43
<br>
54
<div class="hero-subtitle">AI the Rust Way</div>
65
<div class="action-links">
76
<a href="./about.md" class="action-link">About</a>
87
<span class="separator">⁄</span>
9-
<a href="./get-started" class="action-link">Get started</a>
8+
<a href="./install.md" class="action-link">Get started</a>
109
<span class="separator">⁄</span>
1110
<a href="./contribute.md" class="action-link">Contribute</a>
1211
</div>

0 commit comments

Comments
 (0)