brosh 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.github.md +193 -0
- package/README.md +18 -141
- package/README.npm.md +58 -0
- package/package.json +5 -3
- package/packages/desktop-electron/build/afterInstall-linux.sh +4 -0
- package/packages/desktop-electron/build/entitlements.mac.inherit.plist +12 -0
- package/packages/desktop-electron/build/entitlements.mac.plist +14 -0
- package/packages/desktop-electron/package-lock.json +46 -40
- package/packages/desktop-electron/package.json +20 -4
- package/packaging/aur/.SRCINFO +20 -0
- package/packaging/aur/PKGBUILD +26 -0
- package/website/CNAME +1 -0
- package/website/assets/images/.gitkeep +0 -0
- package/website/assets/videos/.gitkeep +0 -0
- package/website/css/styles.css +735 -0
- package/website/gpg.key +37 -0
- package/website/index.html +314 -0
- package/website/install.sh.asc +16 -0
- package/website/js/main.js +293 -0
- package/website/uninstall.sh +5 -0
package/README.github.md
ADDED
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<strong>The AI-native terminal. Built for Claude coders.</strong>
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<p align="center">
|
|
6
|
+
<a href="https://github.com/elleryfamilia/brosh/releases"><img src="https://img.shields.io/github/v/release/elleryfamilia/brosh" alt="Release"></a>
|
|
7
|
+
<a href="LICENSE"><img src="https://img.shields.io/github/license/elleryfamilia/brosh" alt="License: MIT"></a>
|
|
8
|
+
<img src="https://img.shields.io/badge/platform-macOS%20%7C%20Linux-blue" alt="Platforms">
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+

|
|
12
|
+
|
|
13
|
+
## Install
|
|
14
|
+
|
|
15
|
+
**macOS (Homebrew):**
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
brew install --cask elleryfamilia/brosh/brosh
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
**Ubuntu/Debian:**
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
curl -fsSL https://elleryfamilia.github.io/brosh/install.sh | sudo bash
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**Arch Linux (AUR):**
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
yay -S brosh-bin
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**Direct download:** `.dmg` (macOS) / `.deb` (Linux) from the [releases page](https://github.com/elleryfamilia/brosh/releases).
|
|
34
|
+
|
|
35
|
+
**Build from source:**
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
git clone https://github.com/elleryfamilia/brosh.git
|
|
39
|
+
cd brosh/packages/desktop-electron && npm install && npm run start
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**CLI only:** `npm install -g brosh` or `brew install elleryfamilia/brosh/brosh-cli` -- [more install options](./docs/installation.md)
|
|
43
|
+
|
|
44
|
+
## Features
|
|
45
|
+
|
|
46
|
+
- [**Claude Code integration**](#claude-code-integration) -- Natural language detection, model switching, "Continue in Claude" handoff, built-in MCP server
|
|
47
|
+
- [**Split panes & tabs**](#terminal) -- Horizontal/vertical splits with draggable dividers, multi-tab interface
|
|
48
|
+
- [**Git sidebar**](#git-integration) -- Visual commit graph, file change tracking, Monaco diff editor
|
|
49
|
+
- [**Sandbox mode**](#sandbox-mode) -- Restrict filesystem and network access per session
|
|
50
|
+
- [**Themes & customization**](#terminal) -- 9 themes, 25+ fonts, cursor styles, window opacity, scrollback
|
|
51
|
+
- [**MCP tools**](#mcp-integration) -- Give Claude Code direct access to type, read, and screenshot your terminal
|
|
52
|
+
- [**Session recording**](#developer-tools) -- Record to asciicast format, play back with asciinema
|
|
53
|
+
- **Cross-platform** -- macOS, Linux
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Claude Code Integration
|
|
58
|
+
|
|
59
|
+
brosh is purpose-built for working with Claude Code. Every part of the terminal is designed to make AI-assisted development seamless.
|
|
60
|
+
|
|
61
|
+
- **Natural language detection** -- An ML classifier distinguishes commands from questions in real time. Type `git push` and it runs. Type `how do I rebase onto main?` and Claude answers.
|
|
62
|
+
- **Model switching** -- Switch between Sonnet, Opus, and Haiku from the status bar.
|
|
63
|
+
- **MCP server built in** -- Claude Code connects over MCP and can see your terminal, run commands, and read output. No extra setup.
|
|
64
|
+
- **Continue in Claude** -- Start a conversation in the terminal and seamlessly continue it in the Claude Code CLI with full context.
|
|
65
|
+
- **Smart status bar** -- Git branch, active Claude model, MCP connection status, and session info at a glance.
|
|
66
|
+
|
|
67
|
+

|
|
68
|
+
|
|
69
|
+

|
|
70
|
+
|
|
71
|
+
## Terminal
|
|
72
|
+
|
|
73
|
+
- Multi-tab interface with split panes (horizontal and vertical)
|
|
74
|
+
- Draggable panel dividers for custom layouts
|
|
75
|
+
- 9 built-in themes and 25+ fonts
|
|
76
|
+
- Cursor style options, window opacity, and configurable scrollback
|
|
77
|
+
- Find bar for searching terminal output
|
|
78
|
+
|
|
79
|
+
## Git Integration
|
|
80
|
+
|
|
81
|
+
Built-in git sidebar with visual commit graph, file change tracking, and a Monaco-powered diff editor.
|
|
82
|
+
|
|
83
|
+

|
|
84
|
+
|
|
85
|
+
Click any changed file to open a full diff view:
|
|
86
|
+
|
|
87
|
+

|
|
88
|
+
|
|
89
|
+
## Sandbox Mode
|
|
90
|
+
|
|
91
|
+
Choose between standard and sandboxed terminal sessions at launch. Sandbox mode restricts filesystem and network access so Claude can only touch what you allow.
|
|
92
|
+
|
|
93
|
+

|
|
94
|
+
|
|
95
|
+
See [docs/sandbox.md](./docs/sandbox.md) for configuration details.
|
|
96
|
+
|
|
97
|
+
## Developer Tools
|
|
98
|
+
|
|
99
|
+
- Monaco code editor integration
|
|
100
|
+
- Terminal session recording ([asciicast format](./docs/recording.md))
|
|
101
|
+
- Cross-platform: macOS, Linux
|
|
102
|
+
|
|
103
|
+
## MCP Integration
|
|
104
|
+
|
|
105
|
+
The desktop app runs a built-in MCP server on a Unix socket, giving Claude Code direct access to your terminal session.
|
|
106
|
+
|
|
107
|
+
Add to your Claude Code MCP settings:
|
|
108
|
+
|
|
109
|
+
```json
|
|
110
|
+
{
|
|
111
|
+
"mcpServers": {
|
|
112
|
+
"terminal": {
|
|
113
|
+
"command": "brosh"
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
| Tool | Description |
|
|
120
|
+
|------|-------------|
|
|
121
|
+
| `type` | Send text input to the terminal |
|
|
122
|
+
| `sendKey` | Send special keys and key combinations |
|
|
123
|
+
| `getContent` | Retrieve terminal buffer content |
|
|
124
|
+
| `takeScreenshot` | Capture terminal state with metadata |
|
|
125
|
+
| `startRecording` | Start recording terminal output |
|
|
126
|
+
| `stopRecording` | Stop recording and save file |
|
|
127
|
+
|
|
128
|
+
See [docs/tools.md](./docs/tools.md) for the full API reference.
|
|
129
|
+
|
|
130
|
+
## Keyboard Shortcuts
|
|
131
|
+
|
|
132
|
+
| Shortcut | Action |
|
|
133
|
+
|----------|--------|
|
|
134
|
+
| <kbd>Cmd</kbd>+<kbd>T</kbd> | New tab |
|
|
135
|
+
| <kbd>Cmd</kbd>+<kbd>N</kbd> | New window |
|
|
136
|
+
| <kbd>Cmd</kbd>+<kbd>W</kbd> | Close tab |
|
|
137
|
+
| <kbd>Cmd</kbd>+<kbd>D</kbd> | Split pane vertically |
|
|
138
|
+
| <kbd>Cmd</kbd>+<kbd>Shift</kbd>+<kbd>D</kbd> | Split pane horizontally |
|
|
139
|
+
| <kbd>Cmd</kbd>+<kbd>Shift</kbd>+<kbd>G</kbd> | Toggle git sidebar |
|
|
140
|
+
| <kbd>Cmd</kbd>+<kbd>F</kbd> | Find in terminal |
|
|
141
|
+
| <kbd>Cmd</kbd>+<kbd>,</kbd> | Settings |
|
|
142
|
+
|
|
143
|
+
## CLI Mode
|
|
144
|
+
|
|
145
|
+
brosh also works as a standalone CLI terminal and MCP server without the desktop app:
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
brosh # Interactive mode -- shell + MCP server on Unix socket
|
|
149
|
+
brosh --sandbox # With filesystem/network restrictions
|
|
150
|
+
brosh --record # With session recording
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
See the [docs/](./docs/) folder for CLI flags, recording, and sandbox configuration.
|
|
154
|
+
|
|
155
|
+
## Development
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
# Core library
|
|
159
|
+
npm install && npm run build
|
|
160
|
+
|
|
161
|
+
# Desktop app
|
|
162
|
+
cd packages/desktop-electron
|
|
163
|
+
npm run dev # Dev mode with hot-reload
|
|
164
|
+
npm run package # Build distributable
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### Linux: Sandbox binaries
|
|
168
|
+
|
|
169
|
+
The desktop app bundles statically-compiled `socat` and `bwrap` (bubblewrap) so sandbox mode works out of the box on any Linux distro. The binaries are built automatically during `npm run package` (via `prepackage`). You just need the build tools installed:
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
# One-time setup (Linux only)
|
|
173
|
+
sudo apt-get install -y meson ninja-build pkg-config libcap-dev
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
The script fetches the latest source releases from upstream, compiles static binaries, and places them in `resources/bin/`. On macOS the step is a no-op. You can also run it manually with `npm run prepare-sandbox-bins`.
|
|
177
|
+
|
|
178
|
+
## Documentation
|
|
179
|
+
|
|
180
|
+
- [Overview](./docs/index.md) -- [Installation](./docs/installation.md) -- [Architecture](./docs/architecture.md)
|
|
181
|
+
- [Tools Reference](./docs/tools.md) -- [Configuration](./docs/configuration.md) -- [Examples](./docs/examples.md)
|
|
182
|
+
- [Recording](./docs/recording.md) -- [Sandbox Mode](./docs/sandbox.md)
|
|
183
|
+
|
|
184
|
+
## Requirements
|
|
185
|
+
|
|
186
|
+
- **Desktop App**: macOS 10.15+, Linux
|
|
187
|
+
- **CLI**: Node.js 18+
|
|
188
|
+
|
|
189
|
+
## License
|
|
190
|
+
|
|
191
|
+
MIT
|
|
192
|
+
|
|
193
|
+
The Linux desktop build bundles [socat](http://www.dest-unreach.org/socat/) (GPL-2.0) and [bubblewrap](https://github.com/containers/bubblewrap) (LGPL-2.1) as standalone executables for sandbox support. See [`packages/desktop-electron/THIRD-PARTY-NOTICES`](packages/desktop-electron/THIRD-PARTY-NOTICES) for full license texts.
|
package/README.md
CHANGED
|
@@ -1,98 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
<strong>The AI-native terminal. Built for Claude coders.</strong>
|
|
3
|
-
</p>
|
|
1
|
+
# brosh
|
|
4
2
|
|
|
5
|
-
|
|
6
|
-
<a href="https://github.com/elleryfamilia/brosh/releases"><img src="https://img.shields.io/github/v/release/elleryfamilia/brosh" alt="Release"></a>
|
|
7
|
-
<a href="LICENSE"><img src="https://img.shields.io/github/license/elleryfamilia/brosh" alt="License: MIT"></a>
|
|
8
|
-
<img src="https://img.shields.io/badge/platform-macOS%20%7C%20Linux-blue" alt="Platforms">
|
|
9
|
-
</p>
|
|
3
|
+
A terminal emulator and MCP server that gives Claude Code direct access to your terminal.
|
|
10
4
|
|
|
11
|
-
|
|
5
|
+
brosh runs a shell inside a PTY with a headless xterm emulator, exposing tools over the [Model Context Protocol](https://modelcontextprotocol.io/) so AI agents can type commands, read output, send key combinations, and take screenshots.
|
|
12
6
|
|
|
13
7
|
## Install
|
|
14
8
|
|
|
15
|
-
**Homebrew (macOS):**
|
|
16
|
-
|
|
17
9
|
```bash
|
|
18
|
-
|
|
10
|
+
npm install -g brosh
|
|
19
11
|
```
|
|
20
12
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
**Build from source:**
|
|
13
|
+
## CLI Usage
|
|
24
14
|
|
|
25
15
|
```bash
|
|
26
|
-
|
|
27
|
-
|
|
16
|
+
brosh # Interactive mode -- shell + MCP server on Unix socket
|
|
17
|
+
brosh --sandbox # With filesystem/network restrictions
|
|
18
|
+
brosh --record # With session recording (asciicast format)
|
|
28
19
|
```
|
|
29
20
|
|
|
30
|
-
**CLI only:** `npm install -g brosh` or `brew install elleryfamilia/brosh/brosh-cli` -- [more install options](./docs/installation.md)
|
|
31
|
-
|
|
32
|
-
## Features
|
|
33
|
-
|
|
34
|
-
- [**Claude Code integration**](#claude-code-integration) -- Natural language detection, model switching, "Continue in Claude" handoff, built-in MCP server
|
|
35
|
-
- [**Split panes & tabs**](#terminal) -- Horizontal/vertical splits with draggable dividers, multi-tab interface
|
|
36
|
-
- [**Git sidebar**](#git-integration) -- Visual commit graph, file change tracking, Monaco diff editor
|
|
37
|
-
- [**Sandbox mode**](#sandbox-mode) -- Restrict filesystem and network access per session
|
|
38
|
-
- [**Themes & customization**](#terminal) -- 9 themes, 25+ fonts, cursor styles, window opacity, scrollback
|
|
39
|
-
- [**MCP tools**](#mcp-integration) -- Give Claude Code direct access to type, read, and screenshot your terminal
|
|
40
|
-
- [**Session recording**](#developer-tools) -- Record to asciicast format, play back with asciinema
|
|
41
|
-
- **Cross-platform** -- macOS, Linux
|
|
42
|
-
|
|
43
|
-
---
|
|
44
|
-
|
|
45
|
-
## Claude Code Integration
|
|
46
|
-
|
|
47
|
-
brosh is purpose-built for working with Claude Code. Every part of the terminal is designed to make AI-assisted development seamless.
|
|
48
|
-
|
|
49
|
-
- **Natural language detection** -- An ML classifier distinguishes commands from questions in real time. Type `git push` and it runs. Type `how do I rebase onto main?` and Claude answers.
|
|
50
|
-
- **Model switching** -- Switch between Sonnet, Opus, and Haiku from the status bar.
|
|
51
|
-
- **MCP server built in** -- Claude Code connects over MCP and can see your terminal, run commands, and read output. No extra setup.
|
|
52
|
-
- **Continue in Claude** -- Start a conversation in the terminal and seamlessly continue it in the Claude Code CLI with full context.
|
|
53
|
-
- **Smart status bar** -- Git branch, active Claude model, MCP connection status, and session info at a glance.
|
|
54
|
-
|
|
55
|
-

|
|
56
|
-
|
|
57
|
-

|
|
58
|
-
|
|
59
|
-
## Terminal
|
|
60
|
-
|
|
61
|
-
- Multi-tab interface with split panes (horizontal and vertical)
|
|
62
|
-
- Draggable panel dividers for custom layouts
|
|
63
|
-
- 9 built-in themes and 25+ fonts
|
|
64
|
-
- Cursor style options, window opacity, and configurable scrollback
|
|
65
|
-
- Find bar for searching terminal output
|
|
66
|
-
|
|
67
|
-
## Git Integration
|
|
68
|
-
|
|
69
|
-
Built-in git sidebar with visual commit graph, file change tracking, and a Monaco-powered diff editor.
|
|
70
|
-
|
|
71
|
-

|
|
72
|
-
|
|
73
|
-
Click any changed file to open a full diff view:
|
|
74
|
-
|
|
75
|
-

|
|
76
|
-
|
|
77
|
-
## Sandbox Mode
|
|
78
|
-
|
|
79
|
-
Choose between standard and sandboxed terminal sessions at launch. Sandbox mode restricts filesystem and network access so Claude can only touch what you allow.
|
|
80
|
-
|
|
81
|
-

|
|
82
|
-
|
|
83
|
-
See [docs/sandbox.md](./docs/sandbox.md) for configuration details.
|
|
84
|
-
|
|
85
|
-
## Developer Tools
|
|
86
|
-
|
|
87
|
-
- Monaco code editor integration
|
|
88
|
-
- Terminal session recording ([asciicast format](./docs/recording.md))
|
|
89
|
-
- Cross-platform: macOS, Linux
|
|
90
|
-
|
|
91
21
|
## MCP Integration
|
|
92
22
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
Add to your Claude Code MCP settings:
|
|
23
|
+
Add to your Claude Code MCP config (`~/.claude/settings.json` or `.mcp.json`):
|
|
96
24
|
|
|
97
25
|
```json
|
|
98
26
|
{
|
|
@@ -104,78 +32,27 @@ Add to your Claude Code MCP settings:
|
|
|
104
32
|
}
|
|
105
33
|
```
|
|
106
34
|
|
|
35
|
+
When Claude Code launches brosh as an MCP server, it connects to the running interactive session over a Unix socket and proxies tool calls.
|
|
36
|
+
|
|
37
|
+
### Tools
|
|
38
|
+
|
|
107
39
|
| Tool | Description |
|
|
108
40
|
|------|-------------|
|
|
109
41
|
| `type` | Send text input to the terminal |
|
|
110
|
-
| `sendKey` | Send special keys and key combinations |
|
|
42
|
+
| `sendKey` | Send special keys and key combinations (Enter, Ctrl+C, etc.) |
|
|
111
43
|
| `getContent` | Retrieve terminal buffer content |
|
|
112
|
-
| `takeScreenshot` | Capture terminal state with
|
|
44
|
+
| `takeScreenshot` | Capture terminal state with ANSI formatting |
|
|
113
45
|
| `startRecording` | Start recording terminal output |
|
|
114
46
|
| `stopRecording` | Stop recording and save file |
|
|
115
47
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
## Keyboard Shortcuts
|
|
119
|
-
|
|
120
|
-
| Shortcut | Action |
|
|
121
|
-
|----------|--------|
|
|
122
|
-
| <kbd>Cmd</kbd>+<kbd>T</kbd> | New tab |
|
|
123
|
-
| <kbd>Cmd</kbd>+<kbd>N</kbd> | New window |
|
|
124
|
-
| <kbd>Cmd</kbd>+<kbd>W</kbd> | Close tab |
|
|
125
|
-
| <kbd>Cmd</kbd>+<kbd>D</kbd> | Split pane vertically |
|
|
126
|
-
| <kbd>Cmd</kbd>+<kbd>Shift</kbd>+<kbd>D</kbd> | Split pane horizontally |
|
|
127
|
-
| <kbd>Cmd</kbd>+<kbd>Shift</kbd>+<kbd>G</kbd> | Toggle git sidebar |
|
|
128
|
-
| <kbd>Cmd</kbd>+<kbd>F</kbd> | Find in terminal |
|
|
129
|
-
| <kbd>Cmd</kbd>+<kbd>,</kbd> | Settings |
|
|
130
|
-
|
|
131
|
-
## CLI Mode
|
|
132
|
-
|
|
133
|
-
brosh also works as a standalone CLI terminal and MCP server without the desktop app:
|
|
134
|
-
|
|
135
|
-
```bash
|
|
136
|
-
brosh # Interactive mode -- shell + MCP server on Unix socket
|
|
137
|
-
brosh --sandbox # With filesystem/network restrictions
|
|
138
|
-
brosh --record # With session recording
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
See the [docs/](./docs/) folder for CLI flags, recording, and sandbox configuration.
|
|
142
|
-
|
|
143
|
-
## Development
|
|
48
|
+
## Desktop App
|
|
144
49
|
|
|
145
|
-
|
|
146
|
-
# Core library
|
|
147
|
-
npm install && npm run build
|
|
148
|
-
|
|
149
|
-
# Desktop app
|
|
150
|
-
cd packages/desktop-electron
|
|
151
|
-
npm run dev # Dev mode with hot-reload
|
|
152
|
-
npm run package # Build distributable
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
### Linux: Sandbox binaries
|
|
156
|
-
|
|
157
|
-
The desktop app bundles statically-compiled `socat` and `bwrap` (bubblewrap) so sandbox mode works out of the box on any Linux distro. The binaries are built automatically during `npm run package` (via `prepackage`). You just need the build tools installed:
|
|
158
|
-
|
|
159
|
-
```bash
|
|
160
|
-
# One-time setup (Linux only)
|
|
161
|
-
sudo apt-get install -y meson ninja-build pkg-config libcap-dev
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
The script fetches the latest source releases from upstream, compiles static binaries, and places them in `resources/bin/`. On macOS the step is a no-op. You can also run it manually with `npm run prepare-sandbox-bins`.
|
|
165
|
-
|
|
166
|
-
## Documentation
|
|
167
|
-
|
|
168
|
-
- [Overview](./docs/index.md) -- [Installation](./docs/installation.md) -- [Architecture](./docs/architecture.md)
|
|
169
|
-
- [Tools Reference](./docs/tools.md) -- [Configuration](./docs/configuration.md) -- [Examples](./docs/examples.md)
|
|
170
|
-
- [Recording](./docs/recording.md) -- [Sandbox Mode](./docs/sandbox.md)
|
|
50
|
+
brosh also ships as a full desktop terminal (Electron) with split panes, tabs, a Git sidebar, themes, and more. See the [GitHub repo](https://github.com/elleryfamilia/brosh) for install instructions and documentation.
|
|
171
51
|
|
|
172
52
|
## Requirements
|
|
173
53
|
|
|
174
|
-
-
|
|
175
|
-
- **CLI**: Node.js 18+
|
|
54
|
+
- Node.js 18+
|
|
176
55
|
|
|
177
56
|
## License
|
|
178
57
|
|
|
179
58
|
MIT
|
|
180
|
-
|
|
181
|
-
The Linux desktop build bundles [socat](http://www.dest-unreach.org/socat/) (GPL-2.0) and [bubblewrap](https://github.com/containers/bubblewrap) (LGPL-2.1) as standalone executables for sandbox support. See [`packages/desktop-electron/THIRD-PARTY-NOTICES`](packages/desktop-electron/THIRD-PARTY-NOTICES) for full license texts.
|
package/README.npm.md
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# brosh
|
|
2
|
+
|
|
3
|
+
A terminal emulator and MCP server that gives Claude Code direct access to your terminal.
|
|
4
|
+
|
|
5
|
+
brosh runs a shell inside a PTY with a headless xterm emulator, exposing tools over the [Model Context Protocol](https://modelcontextprotocol.io/) so AI agents can type commands, read output, send key combinations, and take screenshots.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install -g brosh
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## CLI Usage
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
brosh # Interactive mode -- shell + MCP server on Unix socket
|
|
17
|
+
brosh --sandbox # With filesystem/network restrictions
|
|
18
|
+
brosh --record # With session recording (asciicast format)
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## MCP Integration
|
|
22
|
+
|
|
23
|
+
Add to your Claude Code MCP config (`~/.claude/settings.json` or `.mcp.json`):
|
|
24
|
+
|
|
25
|
+
```json
|
|
26
|
+
{
|
|
27
|
+
"mcpServers": {
|
|
28
|
+
"terminal": {
|
|
29
|
+
"command": "brosh"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
When Claude Code launches brosh as an MCP server, it connects to the running interactive session over a Unix socket and proxies tool calls.
|
|
36
|
+
|
|
37
|
+
### Tools
|
|
38
|
+
|
|
39
|
+
| Tool | Description |
|
|
40
|
+
|------|-------------|
|
|
41
|
+
| `type` | Send text input to the terminal |
|
|
42
|
+
| `sendKey` | Send special keys and key combinations (Enter, Ctrl+C, etc.) |
|
|
43
|
+
| `getContent` | Retrieve terminal buffer content |
|
|
44
|
+
| `takeScreenshot` | Capture terminal state with ANSI formatting |
|
|
45
|
+
| `startRecording` | Start recording terminal output |
|
|
46
|
+
| `stopRecording` | Stop recording and save file |
|
|
47
|
+
|
|
48
|
+
## Desktop App
|
|
49
|
+
|
|
50
|
+
brosh also ships as a full desktop terminal (Electron) with split panes, tabs, a Git sidebar, themes, and more. See the [GitHub repo](https://github.com/elleryfamilia/brosh) for install instructions and documentation.
|
|
51
|
+
|
|
52
|
+
## Requirements
|
|
53
|
+
|
|
54
|
+
- Node.js 18+
|
|
55
|
+
|
|
56
|
+
## License
|
|
57
|
+
|
|
58
|
+
MIT
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "brosh",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.1.2",
|
|
4
|
+
"description": "Terminal MCP bridge for AI-powered development",
|
|
5
5
|
"author": "Ellery Familia",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -28,7 +28,9 @@
|
|
|
28
28
|
"scripts": {
|
|
29
29
|
"build": "tsc",
|
|
30
30
|
"dev": "tsx src/index.ts",
|
|
31
|
-
"prepare": "npm run build"
|
|
31
|
+
"prepare": "npm run build",
|
|
32
|
+
"prepack": "mv README.md README.github.md && cp README.npm.md README.md",
|
|
33
|
+
"postpack": "mv README.github.md README.md"
|
|
32
34
|
},
|
|
33
35
|
"dependencies": {
|
|
34
36
|
"@anthropic-ai/sandbox-runtime": "^0.0.32",
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
+
<plist version="1.0">
|
|
4
|
+
<dict>
|
|
5
|
+
<key>com.apple.security.cs.allow-jit</key>
|
|
6
|
+
<true/>
|
|
7
|
+
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
|
|
8
|
+
<true/>
|
|
9
|
+
<key>com.apple.security.cs.disable-library-validation</key>
|
|
10
|
+
<true/>
|
|
11
|
+
</dict>
|
|
12
|
+
</plist>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
+
<plist version="1.0">
|
|
4
|
+
<dict>
|
|
5
|
+
<key>com.apple.security.cs.allow-jit</key>
|
|
6
|
+
<true/>
|
|
7
|
+
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
|
|
8
|
+
<true/>
|
|
9
|
+
<key>com.apple.security.cs.disable-library-validation</key>
|
|
10
|
+
<true/>
|
|
11
|
+
<key>com.apple.security.network.client</key>
|
|
12
|
+
<true/>
|
|
13
|
+
</dict>
|
|
14
|
+
</plist>
|
|
@@ -38,6 +38,7 @@
|
|
|
38
38
|
"electron-store": "^10.0.0",
|
|
39
39
|
"electron-updater": "^6.7.3",
|
|
40
40
|
"fastest-levenshtein": "^1.0.16",
|
|
41
|
+
"material-file-icons": "^2.4.0",
|
|
41
42
|
"monaco-editor": "^0.55.1",
|
|
42
43
|
"monaco-vim": "^0.4.4",
|
|
43
44
|
"posthog-node": "^5.24.7",
|
|
@@ -52,7 +53,7 @@
|
|
|
52
53
|
"@vitejs/plugin-react": "^4.2.0",
|
|
53
54
|
"@vitest/coverage-v8": "^2.0.0",
|
|
54
55
|
"concurrently": "^8.2.0",
|
|
55
|
-
"electron": "^33.
|
|
56
|
+
"electron": "^33.4.11",
|
|
56
57
|
"electron-builder": "^25.0.0",
|
|
57
58
|
"react": "^18.2.0",
|
|
58
59
|
"react-dom": "^18.2.0",
|
|
@@ -62,8 +63,7 @@
|
|
|
62
63
|
}
|
|
63
64
|
},
|
|
64
65
|
"../..": {
|
|
65
|
-
"
|
|
66
|
-
"version": "0.2.2",
|
|
66
|
+
"version": "0.1.0",
|
|
67
67
|
"license": "MIT",
|
|
68
68
|
"dependencies": {
|
|
69
69
|
"@anthropic-ai/sandbox-runtime": "^0.0.32",
|
|
@@ -1683,29 +1683,6 @@
|
|
|
1683
1683
|
"url": "https://opencollective.com/libvips"
|
|
1684
1684
|
}
|
|
1685
1685
|
},
|
|
1686
|
-
"node_modules/@isaacs/balanced-match": {
|
|
1687
|
-
"version": "4.0.1",
|
|
1688
|
-
"resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz",
|
|
1689
|
-
"integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==",
|
|
1690
|
-
"dev": true,
|
|
1691
|
-
"license": "MIT",
|
|
1692
|
-
"engines": {
|
|
1693
|
-
"node": "20 || >=22"
|
|
1694
|
-
}
|
|
1695
|
-
},
|
|
1696
|
-
"node_modules/@isaacs/brace-expansion": {
|
|
1697
|
-
"version": "5.0.0",
|
|
1698
|
-
"resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz",
|
|
1699
|
-
"integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==",
|
|
1700
|
-
"dev": true,
|
|
1701
|
-
"license": "MIT",
|
|
1702
|
-
"dependencies": {
|
|
1703
|
-
"@isaacs/balanced-match": "^4.0.1"
|
|
1704
|
-
},
|
|
1705
|
-
"engines": {
|
|
1706
|
-
"node": "20 || >=22"
|
|
1707
|
-
}
|
|
1708
|
-
},
|
|
1709
1686
|
"node_modules/@isaacs/cliui": {
|
|
1710
1687
|
"version": "8.0.2",
|
|
1711
1688
|
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
|
|
@@ -3610,9 +3587,9 @@
|
|
|
3610
3587
|
}
|
|
3611
3588
|
},
|
|
3612
3589
|
"node_modules/ajv-formats/node_modules/ajv": {
|
|
3613
|
-
"version": "8.
|
|
3614
|
-
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.
|
|
3615
|
-
"integrity": "sha512-
|
|
3590
|
+
"version": "8.18.0",
|
|
3591
|
+
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz",
|
|
3592
|
+
"integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==",
|
|
3616
3593
|
"license": "MIT",
|
|
3617
3594
|
"dependencies": {
|
|
3618
3595
|
"fast-deep-equal": "^3.1.3",
|
|
@@ -4751,9 +4728,9 @@
|
|
|
4751
4728
|
}
|
|
4752
4729
|
},
|
|
4753
4730
|
"node_modules/conf/node_modules/ajv": {
|
|
4754
|
-
"version": "8.
|
|
4755
|
-
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.
|
|
4756
|
-
"integrity": "sha512-
|
|
4731
|
+
"version": "8.18.0",
|
|
4732
|
+
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz",
|
|
4733
|
+
"integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==",
|
|
4757
4734
|
"license": "MIT",
|
|
4758
4735
|
"dependencies": {
|
|
4759
4736
|
"fast-deep-equal": "^3.1.3",
|
|
@@ -7221,6 +7198,12 @@
|
|
|
7221
7198
|
"node": ">=10"
|
|
7222
7199
|
}
|
|
7223
7200
|
},
|
|
7201
|
+
"node_modules/material-file-icons": {
|
|
7202
|
+
"version": "2.4.0",
|
|
7203
|
+
"resolved": "https://registry.npmjs.org/material-file-icons/-/material-file-icons-2.4.0.tgz",
|
|
7204
|
+
"integrity": "sha512-MgxhwBgoiNXyQdZVtXvdqP8t7Fu/Z3zW1aPeYN+UqtepzbKyf41b+Wme6DnwGk5Crt2JzmWLtl1XGE2YMooaQw==",
|
|
7205
|
+
"license": "MIT"
|
|
7206
|
+
},
|
|
7224
7207
|
"node_modules/math-intrinsics": {
|
|
7225
7208
|
"version": "1.1.0",
|
|
7226
7209
|
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
|
|
@@ -7306,21 +7289,44 @@
|
|
|
7306
7289
|
}
|
|
7307
7290
|
},
|
|
7308
7291
|
"node_modules/minimatch": {
|
|
7309
|
-
"version": "10.
|
|
7310
|
-
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.
|
|
7311
|
-
"integrity": "sha512
|
|
7292
|
+
"version": "10.2.2",
|
|
7293
|
+
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.2.tgz",
|
|
7294
|
+
"integrity": "sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==",
|
|
7312
7295
|
"dev": true,
|
|
7313
7296
|
"license": "BlueOak-1.0.0",
|
|
7314
7297
|
"dependencies": {
|
|
7315
|
-
"
|
|
7298
|
+
"brace-expansion": "^5.0.2"
|
|
7316
7299
|
},
|
|
7317
7300
|
"engines": {
|
|
7318
|
-
"node": "20 || >=22"
|
|
7301
|
+
"node": "18 || 20 || >=22"
|
|
7319
7302
|
},
|
|
7320
7303
|
"funding": {
|
|
7321
7304
|
"url": "https://github.com/sponsors/isaacs"
|
|
7322
7305
|
}
|
|
7323
7306
|
},
|
|
7307
|
+
"node_modules/minimatch/node_modules/balanced-match": {
|
|
7308
|
+
"version": "4.0.3",
|
|
7309
|
+
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.3.tgz",
|
|
7310
|
+
"integrity": "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g==",
|
|
7311
|
+
"dev": true,
|
|
7312
|
+
"license": "MIT",
|
|
7313
|
+
"engines": {
|
|
7314
|
+
"node": "20 || >=22"
|
|
7315
|
+
}
|
|
7316
|
+
},
|
|
7317
|
+
"node_modules/minimatch/node_modules/brace-expansion": {
|
|
7318
|
+
"version": "5.0.2",
|
|
7319
|
+
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.2.tgz",
|
|
7320
|
+
"integrity": "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==",
|
|
7321
|
+
"dev": true,
|
|
7322
|
+
"license": "MIT",
|
|
7323
|
+
"dependencies": {
|
|
7324
|
+
"balanced-match": "^4.0.2"
|
|
7325
|
+
},
|
|
7326
|
+
"engines": {
|
|
7327
|
+
"node": "20 || >=22"
|
|
7328
|
+
}
|
|
7329
|
+
},
|
|
7324
7330
|
"node_modules/minimist": {
|
|
7325
7331
|
"version": "1.2.8",
|
|
7326
7332
|
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
|
|
@@ -7778,9 +7784,9 @@
|
|
|
7778
7784
|
}
|
|
7779
7785
|
},
|
|
7780
7786
|
"node_modules/onnxruntime-node/node_modules/tar": {
|
|
7781
|
-
"version": "7.5.
|
|
7782
|
-
"resolved": "https://registry.npmjs.org/tar/-/tar-7.5.
|
|
7783
|
-
"integrity": "sha512-
|
|
7787
|
+
"version": "7.5.9",
|
|
7788
|
+
"resolved": "https://registry.npmjs.org/tar/-/tar-7.5.9.tgz",
|
|
7789
|
+
"integrity": "sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg==",
|
|
7784
7790
|
"license": "BlueOak-1.0.0",
|
|
7785
7791
|
"dependencies": {
|
|
7786
7792
|
"@isaacs/fs-minipass": "^4.0.0",
|