Skip to content

Commit 559e9b6

Browse files
add mistral vibe tool support
1 parent d599bc1 commit 559e9b6

6 files changed

Lines changed: 61 additions & 6 deletions

File tree

‎README.md‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ Silo resolves this by running AI tools in isolated containers/vms with:
5252
| Claude Code | `silo claude` | Anthropic's CLI for Claude |
5353
| OpenCode | `silo opencode` | AI coding CLI |
5454
| GitHub Copilot CLI | `silo copilot` | GitHub's Copilot CLI |
55+
| Mistral Vibe | `silo vibe` | Mistral's CLI coding assistant |
5556

5657
## Installation
5758

@@ -93,6 +94,7 @@ silo
9394
silo claude
9495
silo opencode
9596
silo copilot
97+
silo vibe
9698

9799
# Pass arguments to the tool (after --)
98100
silo claude -- --help
@@ -231,7 +233,7 @@ Silo uses JSONC (JSON with Comments). All fields are optional.
231233
// Backend: "docker", "container", or "fly" (default: container if installed, else docker)
232234
"backend": "container",
233235

234-
// Default tool: "claude", "opencode", or "copilot" (if not set, interactive prompt is shown)
236+
// Default tool: "claude", "opencode", "copilot", or "vibe" (if not set, interactive prompt is shown)
235237
"tool": "claude",
236238

237239
// Backend-specific configuration
@@ -349,6 +351,7 @@ Silo automatically mounts these paths (read-write):
349351
| Claude | `~/.claude.json`, `~/.claude/` |
350352
| OpenCode | `~/.config/opencode/`, `~/.local/share/opencode/`, `~/.local/state/opencode/` (respecting XDG env vars) |
351353
| Copilot | `~/.config/.copilot/` (respecting XDG env vars) |
354+
| Vibe | `~/.vibe/` |
352355

353356
Additionally, some tools mount paths read-only to share configuration:
354357

@@ -365,6 +368,7 @@ Some environment variables are automatically set or passed through:
365368
|------|----------------------|
366369
| OpenCode | `OPENCODE_DISABLE_DEFAULT_PLUGINS=1` |
367370
| Copilot | `COPILOT_GITHUB_TOKEN` (passed through from host) |
371+
| Vibe | `MISTRAL_API_KEY` (passed through from host) |
368372

369373
Git identity is configured automatically from your host:
370374
- `GIT_AUTHOR_NAME`, `GIT_COMMITTER_NAME`

‎main.go‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
"github.com/leighmcculloch/silo/tools"
2727
"github.com/leighmcculloch/silo/tools/claudecode"
2828
"github.com/leighmcculloch/silo/tools/copilotcli"
29+
"github.com/leighmcculloch/silo/tools/mistralvibe"
2930
"github.com/leighmcculloch/silo/tools/opencode"
3031
"github.com/spf13/cobra"
3132
)
@@ -40,6 +41,7 @@ var (
4041
claudecode.Tool,
4142
opencode.Tool,
4243
copilotcli.Tool,
44+
mistralvibe.Tool,
4345
}
4446
)
4547

@@ -89,7 +91,7 @@ func newRootCmd(stdout, stderr io.Writer) *cobra.Command {
8991
███████║██║███████╗╚██████╔╝
9092
╚══════╝╚═╝╚══════╝ ╚═════╝
9193
`) + `
92-
Run AI coding assistants (Claude Code, OpenCode, Copilot) in isolated
94+
Run AI coding assistants (Claude Code, OpenCode, Copilot, Mistral Vibe) in isolated
9395
Docker containers with proper security sandboxing.
9496
9597
The container is configured with:
@@ -109,6 +111,7 @@ Configuration is loaded from (in order, merged):
109111
silo claude
110112
silo opencode
111113
silo copilot
114+
silo vibe
112115
113116
# Pass arguments to the tool
114117
silo claude -- --help`,

‎silo.jsonc.example‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"$schema": "https://raw.githubusercontent.com/leighmcculloch/silo/main/silo.schema.json",
33
// Backend to use: "docker", "container", or "fly" (default: "container" if installed, else "docker")
44
// "backend": "docker",
5-
// Default tool to run: "claude", "opencode", or "copilot" (prompts if not set)
5+
// Default tool to run: "claude", "opencode", "copilot", or "vibe" (prompts if not set)
66
// "tool": "claude",
77
// Backend-specific configuration
88
// "backends": {

‎silo.schema.json‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@
1717
},
1818
"tool": {
1919
"type": "string",
20-
"enum": ["claude", "opencode", "copilot"],
20+
"enum": ["claude", "opencode", "copilot", "vibe"],
2121
"description": "Default tool to run. If not set, an interactive prompt is shown.",
22-
"examples": ["claude", "opencode", "copilot"]
22+
"examples": ["claude", "opencode", "copilot", "vibe"]
2323
},
2424
"mounts_ro": {
2525
"type": "array",
@@ -87,7 +87,7 @@
8787
},
8888
"tools": {
8989
"type": "object",
90-
"description": "Tool-specific configuration. Each key is a tool name (e.g., 'claude', 'opencode', 'copilot').",
90+
"description": "Tool-specific configuration. Each key is a tool name (e.g., 'claude', 'opencode', 'copilot', 'vibe').",
9191
"additionalProperties": {
9292
"$ref": "#/$defs/toolConfig"
9393
},

‎tools/mistralvibe/Dockerfile‎

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# ============================================
2+
# Mistral Vibe stage
3+
# ============================================
4+
FROM base AS vibe
5+
6+
ARG HOME
7+
8+
RUN set -e && \
9+
curl -LsSf --connect-timeout 15 -o /tmp/install.sh https://mistral.ai/vibe/install.sh && \
10+
test -s /tmp/install.sh && \
11+
bash /tmp/install.sh && \
12+
rm /tmp/install.sh && \
13+
$HOME/.local/bin/vibe --version
14+
15+
ENV PATH="${HOME}/.local/bin:${PATH}"
16+
17+
# SILO_POST_BUILD_HOOKS_VIBE

‎tools/mistralvibe/mistralvibe.go‎

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package mistralvibe
2+
3+
import (
4+
_ "embed"
5+
6+
"github.com/leighmcculloch/silo/config"
7+
"github.com/leighmcculloch/silo/tools"
8+
)
9+
10+
//go:embed Dockerfile
11+
var dockerfileStage string
12+
13+
// Tool is the Mistral Vibe tool definition.
14+
var Tool = tools.Tool{
15+
Name: "vibe",
16+
Description: "Mistral Vibe - Mistral's CLI coding assistant",
17+
DockerfileStage: dockerfileStage,
18+
Command: func(home string) []string {
19+
return []string{home + "/.local/bin/vibe", "--agent", "auto-approve"}
20+
},
21+
DefaultConfig: func() config.ToolConfig {
22+
return config.ToolConfig{
23+
MountsRW: []string{
24+
"~/.vibe",
25+
},
26+
Env: []string{
27+
"MISTRAL_API_KEY",
28+
},
29+
}
30+
},
31+
}

0 commit comments

Comments
 (0)