ScuttleBot
chore: repo hygiene — fix broken install paths, untrack runtime artifacts, add legal files - Fix README.md and docs/index.md: install-codex-relay.sh points to skills/openai-relay/scripts/, install-gemini-relay.sh points to skills/gemini-relay/scripts/ (were both wrongly under scuttlebot-relay/) - Untrack .scuttlebot.log, .scuttlebot.pid, tmp-codex-hook-probe.sh (already covered by *.log, *.pid, tmp-*.sh gitignore rules) - Add .gitignore comment explaining root-level binaries are intentionally committed as convenience release artifacts - Add LICENSE, .github/CONTRIBUTING.md, SECURITY.md, PR template - Replace <ragelink> with <operator> in docs transcript - Fix "assistant reasoning" copy → "assistant messages" (relays mirror final replies, not thinking blocks)
993625a00d01e783e6d9adede7ecdaf04454bb51018b3cc0a9a4767dc763899f
| --- a/.github/CONTRIBUTING.md | ||
| +++ b/.github/CONTRIBUTING.md | ||
| @@ -0,0 +1,39 @@ | ||
| 1 | +# Contributing to scuttlebot | |
| 2 | + | |
| 3 | +Thanks for your interest in contributing! | |
| 4 | + | |
| 5 | +## Development setup | |
| 6 | + | |
| 7 | +```bash | |
| 8 | +git clone https://github.com/ConflictHQ/scuttlebot | |
| 9 | +cd scuttlebot | |
| 10 | +go mod download | |
| 11 | +``` | |
| 12 | + | |
| 13 | +See [`bootstrap.md`](../bootstrap.md) for full setup including the Ergo IRC server. | |
| 14 | + | |
| 15 | +## Running tests | |
| 16 | + | |
| 17 | +```bash | |
| 18 | +go test ./... | |
| 19 | +``` | |
| 20 | + | |
| 21 | +## Code style | |
| 22 | + | |
| 23 | +We use `gofmt` (enforced) and `golangci-lint`. | |
| 24 | + | |
| 25 | +```bash | |
| 26 | +gofmt -w . | |
| 27 | +golangci-lint run | |
| 28 | +``` | |
| 29 | + | |
| 30 | +## Pull requests | |
| 31 | + | |
| 32 | +1. Fork the repo and create a branch from `main` | |
| 33 | +2. Add tests for new behaviour | |
| 34 | +3. Ensure CI passes | |
| 35 | +4. Open a PR with a clear description of the change | |
| 36 | + | |
| 37 | +## Commit messages | |
| 38 | + | |
| 39 | +Use the imperative mood: `add X`, `fix Y`, `update Z`. Keep the first line under 72 characters. |
| --- a/.github/CONTRIBUTING.md | |
| +++ b/.github/CONTRIBUTING.md | |
| @@ -0,0 +1,39 @@ | |
| --- a/.github/CONTRIBUTING.md | |
| +++ b/.github/CONTRIBUTING.md | |
| @@ -0,0 +1,39 @@ | |
| 1 | # Contributing to scuttlebot |
| 2 | |
| 3 | Thanks for your interest in contributing! |
| 4 | |
| 5 | ## Development setup |
| 6 | |
| 7 | ```bash |
| 8 | git clone https://github.com/ConflictHQ/scuttlebot |
| 9 | cd scuttlebot |
| 10 | go mod download |
| 11 | ``` |
| 12 | |
| 13 | See [`bootstrap.md`](../bootstrap.md) for full setup including the Ergo IRC server. |
| 14 | |
| 15 | ## Running tests |
| 16 | |
| 17 | ```bash |
| 18 | go test ./... |
| 19 | ``` |
| 20 | |
| 21 | ## Code style |
| 22 | |
| 23 | We use `gofmt` (enforced) and `golangci-lint`. |
| 24 | |
| 25 | ```bash |
| 26 | gofmt -w . |
| 27 | golangci-lint run |
| 28 | ``` |
| 29 | |
| 30 | ## Pull requests |
| 31 | |
| 32 | 1. Fork the repo and create a branch from `main` |
| 33 | 2. Add tests for new behaviour |
| 34 | 3. Ensure CI passes |
| 35 | 4. Open a PR with a clear description of the change |
| 36 | |
| 37 | ## Commit messages |
| 38 | |
| 39 | Use the imperative mood: `add X`, `fix Y`, `update Z`. Keep the first line under 72 characters. |
| --- a/.github/PULL_REQUEST_TEMPLATE.md | ||
| +++ b/.github/PULL_REQUEST_TEMPLATE.md | ||
| @@ -0,0 +1,17 @@ | ||
| 1 | +## Summary | |
| 2 | + | |
| 3 | +<!-- What does this PR do? --> | |
| 4 | + | |
| 5 | +## Changes | |
| 6 | + | |
| 7 | +- | |
| 8 | + | |
| 9 | +## Testing | |
| 10 | + | |
| 11 | +<!-- How was this tested? --> | |
| 12 | + | |
| 13 | +## Checklist | |
| 14 | + | |
| 15 | +- [ ] Tests added / updated (`go test ./...` passes) | |
| 16 | +- [ ] `gofmt` applied | |
| 17 | +- [ ] Docs updated (if needed) |
| --- a/.github/PULL_REQUEST_TEMPLATE.md | |
| +++ b/.github/PULL_REQUEST_TEMPLATE.md | |
| @@ -0,0 +1,17 @@ | |
| --- a/.github/PULL_REQUEST_TEMPLATE.md | |
| +++ b/.github/PULL_REQUEST_TEMPLATE.md | |
| @@ -0,0 +1,17 @@ | |
| 1 | ## Summary |
| 2 | |
| 3 | <!-- What does this PR do? --> |
| 4 | |
| 5 | ## Changes |
| 6 | |
| 7 | - |
| 8 | |
| 9 | ## Testing |
| 10 | |
| 11 | <!-- How was this tested? --> |
| 12 | |
| 13 | ## Checklist |
| 14 | |
| 15 | - [ ] Tests added / updated (`go test ./...` passes) |
| 16 | - [ ] `gofmt` applied |
| 17 | - [ ] Docs updated (if needed) |
| --- a/.github/SECURITY.md | ||
| +++ b/.github/SECURITY.md | ||
| @@ -0,0 +1,19 @@ | ||
| 1 | +# Security Policy | |
| 2 | + | |
| 3 | +## Reporting a Vulnerability | |
| 4 | + | |
| 5 | +Please **do not** open a public GitHub issue for security vulnerabilities. | |
| 6 | + | |
| 7 | +Report vulnerabilities by emailing **[email protected]** with: | |
| 8 | +- A description of the vulnerability | |
| 9 | +- Steps to reproduce | |
| 10 | +- Potential impact | |
| 11 | + | |
| 12 | +You will receive a response within 48 hours. We will work with you on a fix and coordinate disclosure. | |
| 13 | + | |
| 14 | +## Supported Versions | |
| 15 | + | |
| 16 | +| Version | Supported | | |
| 17 | +| ------- | --------- | | |
| 18 | +| Latest | ✅ | | |
| 19 | +| Older | No | |
| --- a/.github/SECURITY.md | |
| +++ b/.github/SECURITY.md | |
| @@ -0,0 +1,19 @@ | |
| --- a/.github/SECURITY.md | |
| +++ b/.github/SECURITY.md | |
| @@ -0,0 +1,19 @@ | |
| 1 | # Security Policy |
| 2 | |
| 3 | ## Reporting a Vulnerability |
| 4 | |
| 5 | Please **do not** open a public GitHub issue for security vulnerabilities. |
| 6 | |
| 7 | Report vulnerabilities by emailing **[email protected]** with: |
| 8 | - A description of the vulnerability |
| 9 | - Steps to reproduce |
| 10 | - Potential impact |
| 11 | |
| 12 | You will receive a response within 48 hours. We will work with you on a fix and coordinate disclosure. |
| 13 | |
| 14 | ## Supported Versions |
| 15 | |
| 16 | | Version | Supported | |
| 17 | | ------- | --------- | |
| 18 | | Latest | ✅ | |
| 19 | | Older | No | |
| --- .gitignore | ||
| +++ .gitignore | ||
| @@ -5,5 +5,10 @@ | ||
| 5 | 5 | *.log |
| 6 | 6 | *.pid |
| 7 | 7 | scuttlebot.yaml |
| 8 | 8 | tests/e2e/ |
| 9 | 9 | tmp-*.sh |
| 10 | + | |
| 11 | +# Compiled relay binaries are committed to the repo for convenience (no build step required). | |
| 12 | +# If you rebuild locally, `go build` output goes to bin/ (ignored above). | |
| 13 | +# The root-level binaries (claude-relay, codex-relay, gemini-relay, scuttlectl, scuttlebot) | |
| 14 | +# are the published release artifacts — do not add them here. | |
| 10 | 15 | |
| 11 | 16 | DELETED .scuttlebot.log |
| 12 | 17 | DELETED .scuttlebot.pid |
| 13 | 18 | ADDED LICENSE |
| --- .gitignore | |
| +++ .gitignore | |
| @@ -5,5 +5,10 @@ | |
| 5 | *.log |
| 6 | *.pid |
| 7 | scuttlebot.yaml |
| 8 | tests/e2e/ |
| 9 | tmp-*.sh |
| 10 | |
| 11 | ELETED .scuttlebot.log |
| 12 | ELETED .scuttlebot.pid |
| 13 | DDED LICENSE |
| --- .gitignore | |
| +++ .gitignore | |
| @@ -5,5 +5,10 @@ | |
| 5 | *.log |
| 6 | *.pid |
| 7 | scuttlebot.yaml |
| 8 | tests/e2e/ |
| 9 | tmp-*.sh |
| 10 | |
| 11 | # Compiled relay binaries are committed to the repo for convenience (no build step required). |
| 12 | # If you rebuild locally, `go build` output goes to bin/ (ignored above). |
| 13 | # The root-level binaries (claude-relay, codex-relay, gemini-relay, scuttlectl, scuttlebot) |
| 14 | # are the published release artifacts — do not add them here. |
| 15 | |
| 16 | ELETED .scuttlebot.log |
| 17 | ELETED .scuttlebot.pid |
| 18 | DDED LICENSE |
| --- a/.scuttlebot.log | ||
| +++ b/.scuttlebot.log | ||
| @@ -1,11 +0,0 @@ | ||
| 1 | -time=2026-03-31T21:45:07.749-06:00 level=INFO msg="scuttlebot starting" version=dev | |
| 2 | -time=2026-03-31T21:45:07.750-06:00 level=INFO msg="starting ergo" binary=/Users/ragelink/repos/conflict/scuttlebot/data/ergo/ergo | |
| 3 | -time=2026-03-31T21:45:08.252-06:00 level=INFO msg="ergo is healthy" | |
| 4 | -time=2026-03-31T21:45:08.252-06:00 level=INFO msg="ergo healthy" | |
| 5 | -time=2026-03-31T21:45:08.252-06:00 level=INFO msg="api token" token=d2f5565f5f34fe6ea81d3cba6c20117f032180e3cf4aa401 | |
| 6 | -time=2026-03-31T21:45:08.725-06:00 level=INFO msg="mcp server listening" addr=:8081 | |
| 7 | -time=2026-03-31T21:45:08.725-06:00 level=INFO msg="api server listening" addr=:8080 | |
| 8 | -time=2026-03-31T21:45:08.725-06:00 level=ERROR msg="mcp server error" err="listen tcp :8081: bind: address already in use" | |
| 9 | -time=2026-03-31T21:45:09.016-06:00 level=INFO msg="bridge joined channel" channel=#general | |
| 10 | -time=2026-03-31T21:45:10.959-06:00 level=INFO msg="bridge connected" | |
| 11 | -time=2026-03-31T21:51:09.458-06:00 level=INFO msg="bridge joined channel" channel=#relay-debug |
| --- a/.scuttlebot.log | |
| +++ b/.scuttlebot.log | |
| @@ -1,11 +0,0 @@ | |
| 1 | time=2026-03-31T21:45:07.749-06:00 level=INFO msg="scuttlebot starting" version=dev |
| 2 | time=2026-03-31T21:45:07.750-06:00 level=INFO msg="starting ergo" binary=/Users/ragelink/repos/conflict/scuttlebot/data/ergo/ergo |
| 3 | time=2026-03-31T21:45:08.252-06:00 level=INFO msg="ergo is healthy" |
| 4 | time=2026-03-31T21:45:08.252-06:00 level=INFO msg="ergo healthy" |
| 5 | time=2026-03-31T21:45:08.252-06:00 level=INFO msg="api token" token=d2f5565f5f34fe6ea81d3cba6c20117f032180e3cf4aa401 |
| 6 | time=2026-03-31T21:45:08.725-06:00 level=INFO msg="mcp server listening" addr=:8081 |
| 7 | time=2026-03-31T21:45:08.725-06:00 level=INFO msg="api server listening" addr=:8080 |
| 8 | time=2026-03-31T21:45:08.725-06:00 level=ERROR msg="mcp server error" err="listen tcp :8081: bind: address already in use" |
| 9 | time=2026-03-31T21:45:09.016-06:00 level=INFO msg="bridge joined channel" channel=#general |
| 10 | time=2026-03-31T21:45:10.959-06:00 level=INFO msg="bridge connected" |
| 11 | time=2026-03-31T21:51:09.458-06:00 level=INFO msg="bridge joined channel" channel=#relay-debug |
| --- a/.scuttlebot.log | |
| +++ b/.scuttlebot.log | |
| @@ -1,11 +0,0 @@ | |
| --- a/.scuttlebot.pid | ||
| +++ b/.scuttlebot.pid | ||
| @@ -1 +0,0 @@ | ||
| 1 | -23693 |
| --- a/.scuttlebot.pid | |
| +++ b/.scuttlebot.pid | |
| @@ -1 +0,0 @@ | |
| 1 | 23693 |
| --- a/.scuttlebot.pid | |
| +++ b/.scuttlebot.pid | |
| @@ -1 +0,0 @@ | |
| --- a/LICENSE | ||
| +++ b/LICENSE | ||
| @@ -0,0 +1,21 @@ | ||
| 1 | +MIT License | |
| 2 | + | |
| 3 | +Copyright (c) 2026 CONFLICT LLC (https://weareconflict.com). All rights reserved. | |
| 4 | + | |
| 5 | +Permission is hereby granted, free of charge, to any person obtaining a copy | |
| 6 | +of this software and associated documentation files (the "Software"), to deal | |
| 7 | +in the Software without restriction, including without limitation the rights | |
| 8 | +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
| 9 | +copies of the Software, and to permit persons to whom the Software is | |
| 10 | +furnished to do so, subject to the following conditions: | |
| 11 | + | |
| 12 | +The above copyright notice and this permission notice shall be included in all | |
| 13 | +copies or substantial portions of the Software. | |
| 14 | + | |
| 15 | +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
| 16 | +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
| 17 | +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
| 18 | +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
| 19 | +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
| 20 | +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |
| 21 | +SOFTWARE. |
| --- a/LICENSE | |
| +++ b/LICENSE | |
| @@ -0,0 +1,21 @@ | |
| --- a/LICENSE | |
| +++ b/LICENSE | |
| @@ -0,0 +1,21 @@ | |
| 1 | MIT License |
| 2 | |
| 3 | Copyright (c) 2026 CONFLICT LLC (https://weareconflict.com). All rights reserved. |
| 4 | |
| 5 | Permission is hereby granted, free of charge, to any person obtaining a copy |
| 6 | of this software and associated documentation files (the "Software"), to deal |
| 7 | in the Software without restriction, including without limitation the rights |
| 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
| 9 | copies of the Software, and to permit persons to whom the Software is |
| 10 | furnished to do so, subject to the following conditions: |
| 11 | |
| 12 | The above copyright notice and this permission notice shall be included in all |
| 13 | copies or substantial portions of the Software. |
| 14 | |
| 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
| 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
| 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
| 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
| 21 | SOFTWARE. |
| --- README.md | ||
| +++ README.md | ||
| @@ -10,11 +10,11 @@ | ||
| 10 | 10 | |
| 11 | 11 | --- |
| 12 | 12 | |
| 13 | 13 | ## What you get |
| 14 | 14 | |
| 15 | -**Real-time visibility.** Every agent session mirrors its activity to IRC as it happens — tool calls, assistant reasoning, bash commands. Open the web UI or any IRC client and watch your fleet work. | |
| 15 | +**Real-time visibility.** Every agent session mirrors its activity to IRC as it happens — tool calls, assistant messages, bash commands. Open the web UI or any IRC client and watch your fleet work. | |
| 16 | 16 | |
| 17 | 17 | **Live interruption.** Message any session nick and the broker injects your instruction directly into the running terminal — with a Ctrl+C if the agent is mid-task. No waiting for a tool hook. |
| 18 | 18 | |
| 19 | 19 | **Named, addressable sessions.** Every session gets a stable fleet nick: `claude-myrepo-a1b2c3d4`. Address it like a person. Multiple agents, multiple sessions, no confusion. |
| 20 | 20 | |
| @@ -52,17 +52,17 @@ | ||
| 52 | 52 | --url http://localhost:8080 \ |
| 53 | 53 | --token "$(cat data/ergo/api_token)" |
| 54 | 54 | ~/.local/bin/claude-relay |
| 55 | 55 | |
| 56 | 56 | # Codex |
| 57 | -bash skills/scuttlebot-relay/scripts/install-codex-relay.sh \ | |
| 57 | +bash skills/openai-relay/scripts/install-codex-relay.sh \ | |
| 58 | 58 | --url http://localhost:8080 \ |
| 59 | 59 | --token "$(cat data/ergo/api_token)" |
| 60 | 60 | ~/.local/bin/codex-relay |
| 61 | 61 | |
| 62 | 62 | # Gemini |
| 63 | -bash skills/scuttlebot-relay/scripts/install-gemini-relay.sh \ | |
| 63 | +bash skills/gemini-relay/scripts/install-gemini-relay.sh \ | |
| 64 | 64 | --url http://localhost:8080 \ |
| 65 | 65 | --token "$(cat data/ergo/api_token)" |
| 66 | 66 | ~/.local/bin/gemini-relay |
| 67 | 67 | ``` |
| 68 | 68 | |
| 69 | 69 |
| --- README.md | |
| +++ README.md | |
| @@ -10,11 +10,11 @@ | |
| 10 | |
| 11 | --- |
| 12 | |
| 13 | ## What you get |
| 14 | |
| 15 | **Real-time visibility.** Every agent session mirrors its activity to IRC as it happens — tool calls, assistant reasoning, bash commands. Open the web UI or any IRC client and watch your fleet work. |
| 16 | |
| 17 | **Live interruption.** Message any session nick and the broker injects your instruction directly into the running terminal — with a Ctrl+C if the agent is mid-task. No waiting for a tool hook. |
| 18 | |
| 19 | **Named, addressable sessions.** Every session gets a stable fleet nick: `claude-myrepo-a1b2c3d4`. Address it like a person. Multiple agents, multiple sessions, no confusion. |
| 20 | |
| @@ -52,17 +52,17 @@ | |
| 52 | --url http://localhost:8080 \ |
| 53 | --token "$(cat data/ergo/api_token)" |
| 54 | ~/.local/bin/claude-relay |
| 55 | |
| 56 | # Codex |
| 57 | bash skills/scuttlebot-relay/scripts/install-codex-relay.sh \ |
| 58 | --url http://localhost:8080 \ |
| 59 | --token "$(cat data/ergo/api_token)" |
| 60 | ~/.local/bin/codex-relay |
| 61 | |
| 62 | # Gemini |
| 63 | bash skills/scuttlebot-relay/scripts/install-gemini-relay.sh \ |
| 64 | --url http://localhost:8080 \ |
| 65 | --token "$(cat data/ergo/api_token)" |
| 66 | ~/.local/bin/gemini-relay |
| 67 | ``` |
| 68 | |
| 69 |
| --- README.md | |
| +++ README.md | |
| @@ -10,11 +10,11 @@ | |
| 10 | |
| 11 | --- |
| 12 | |
| 13 | ## What you get |
| 14 | |
| 15 | **Real-time visibility.** Every agent session mirrors its activity to IRC as it happens — tool calls, assistant messages, bash commands. Open the web UI or any IRC client and watch your fleet work. |
| 16 | |
| 17 | **Live interruption.** Message any session nick and the broker injects your instruction directly into the running terminal — with a Ctrl+C if the agent is mid-task. No waiting for a tool hook. |
| 18 | |
| 19 | **Named, addressable sessions.** Every session gets a stable fleet nick: `claude-myrepo-a1b2c3d4`. Address it like a person. Multiple agents, multiple sessions, no confusion. |
| 20 | |
| @@ -52,17 +52,17 @@ | |
| 52 | --url http://localhost:8080 \ |
| 53 | --token "$(cat data/ergo/api_token)" |
| 54 | ~/.local/bin/claude-relay |
| 55 | |
| 56 | # Codex |
| 57 | bash skills/openai-relay/scripts/install-codex-relay.sh \ |
| 58 | --url http://localhost:8080 \ |
| 59 | --token "$(cat data/ergo/api_token)" |
| 60 | ~/.local/bin/codex-relay |
| 61 | |
| 62 | # Gemini |
| 63 | bash skills/gemini-relay/scripts/install-gemini-relay.sh \ |
| 64 | --url http://localhost:8080 \ |
| 65 | --token "$(cat data/ergo/api_token)" |
| 66 | ~/.local/bin/gemini-relay |
| 67 | ``` |
| 68 | |
| 69 |
| --- docs/index.md | ||
| +++ docs/index.md | ||
| @@ -6,11 +6,11 @@ | ||
| 6 | 6 | |
| 7 | 7 | --- |
| 8 | 8 | |
| 9 | 9 | ## What you get |
| 10 | 10 | |
| 11 | -**Real-time visibility.** Every agent session mirrors its activity to IRC as it happens — tool calls, assistant reasoning, bash commands. Open the web UI or any IRC client and watch your fleet work. | |
| 11 | +**Real-time visibility.** Every agent session mirrors its activity to IRC as it happens — tool calls, assistant messages, bash commands. Open the web UI or any IRC client and watch your fleet work. | |
| 12 | 12 | |
| 13 | 13 | **Live interruption.** Message any session nick and the broker injects your instruction directly into the running terminal — with a Ctrl+C if the agent is mid-task. No waiting for a tool hook. |
| 14 | 14 | |
| 15 | 15 | **Named, addressable sessions.** Every session gets a stable fleet nick: `claude-myrepo-a1b2c3d4`. You address it exactly like you'd address a person. Multiple agents, multiple sessions, no confusion. |
| 16 | 16 | |
| @@ -53,21 +53,21 @@ | ||
| 53 | 53 | ``` |
| 54 | 54 | |
| 55 | 55 | === "Codex" |
| 56 | 56 | |
| 57 | 57 | ```bash |
| 58 | - bash skills/scuttlebot-relay/scripts/install-codex-relay.sh \ | |
| 58 | + bash skills/openai-relay/scripts/install-codex-relay.sh \ | |
| 59 | 59 | --url http://localhost:8080 \ |
| 60 | 60 | --token "$(cat data/ergo/api_token)" |
| 61 | 61 | |
| 62 | 62 | ~/.local/bin/codex-relay |
| 63 | 63 | ``` |
| 64 | 64 | |
| 65 | 65 | === "Gemini" |
| 66 | 66 | |
| 67 | 67 | ```bash |
| 68 | - bash skills/scuttlebot-relay/scripts/install-gemini-relay.sh \ | |
| 68 | + bash skills/gemini-relay/scripts/install-gemini-relay.sh \ | |
| 69 | 69 | --url http://localhost:8080 \ |
| 70 | 70 | --token "$(cat data/ergo/api_token)" |
| 71 | 71 | |
| 72 | 72 | ~/.local/bin/gemini-relay |
| 73 | 73 | ``` |
| @@ -87,11 +87,11 @@ | ||
| 87 | 87 | ``` |
| 88 | 88 | <claude-scuttlebot-a1b2c3d4> › bash: go test ./internal/api/... |
| 89 | 89 | <claude-scuttlebot-a1b2c3d4> edit internal/api/chat.go |
| 90 | 90 | <claude-scuttlebot-a1b2c3d4> Running tests... |
| 91 | 91 | <codex-scuttlebot-f3e2d1c0> › bash: git diff HEAD --stat |
| 92 | -<ragelink> claude-scuttlebot-a1b2c3d4: focus on the auth handler first | |
| 92 | +<operator> claude-scuttlebot-a1b2c3d4: focus on the auth handler first | |
| 93 | 93 | <claude-scuttlebot-a1b2c3d4> Got it — switching to the auth handler. |
| 94 | 94 | <gemini-scuttlebot-9b8a7c6d> read internal/auth/store.go |
| 95 | 95 | ``` |
| 96 | 96 | |
| 97 | 97 | --- |
| 98 | 98 | |
| 99 | 99 | DELETED tmp-codex-hook-probe.sh |
| --- docs/index.md | |
| +++ docs/index.md | |
| @@ -6,11 +6,11 @@ | |
| 6 | |
| 7 | --- |
| 8 | |
| 9 | ## What you get |
| 10 | |
| 11 | **Real-time visibility.** Every agent session mirrors its activity to IRC as it happens — tool calls, assistant reasoning, bash commands. Open the web UI or any IRC client and watch your fleet work. |
| 12 | |
| 13 | **Live interruption.** Message any session nick and the broker injects your instruction directly into the running terminal — with a Ctrl+C if the agent is mid-task. No waiting for a tool hook. |
| 14 | |
| 15 | **Named, addressable sessions.** Every session gets a stable fleet nick: `claude-myrepo-a1b2c3d4`. You address it exactly like you'd address a person. Multiple agents, multiple sessions, no confusion. |
| 16 | |
| @@ -53,21 +53,21 @@ | |
| 53 | ``` |
| 54 | |
| 55 | === "Codex" |
| 56 | |
| 57 | ```bash |
| 58 | bash skills/scuttlebot-relay/scripts/install-codex-relay.sh \ |
| 59 | --url http://localhost:8080 \ |
| 60 | --token "$(cat data/ergo/api_token)" |
| 61 | |
| 62 | ~/.local/bin/codex-relay |
| 63 | ``` |
| 64 | |
| 65 | === "Gemini" |
| 66 | |
| 67 | ```bash |
| 68 | bash skills/scuttlebot-relay/scripts/install-gemini-relay.sh \ |
| 69 | --url http://localhost:8080 \ |
| 70 | --token "$(cat data/ergo/api_token)" |
| 71 | |
| 72 | ~/.local/bin/gemini-relay |
| 73 | ``` |
| @@ -87,11 +87,11 @@ | |
| 87 | ``` |
| 88 | <claude-scuttlebot-a1b2c3d4> › bash: go test ./internal/api/... |
| 89 | <claude-scuttlebot-a1b2c3d4> edit internal/api/chat.go |
| 90 | <claude-scuttlebot-a1b2c3d4> Running tests... |
| 91 | <codex-scuttlebot-f3e2d1c0> › bash: git diff HEAD --stat |
| 92 | <ragelink> claude-scuttlebot-a1b2c3d4: focus on the auth handler first |
| 93 | <claude-scuttlebot-a1b2c3d4> Got it — switching to the auth handler. |
| 94 | <gemini-scuttlebot-9b8a7c6d> read internal/auth/store.go |
| 95 | ``` |
| 96 | |
| 97 | --- |
| 98 | |
| 99 | ELETED tmp-codex-hook-probe.sh |
| --- docs/index.md | |
| +++ docs/index.md | |
| @@ -6,11 +6,11 @@ | |
| 6 | |
| 7 | --- |
| 8 | |
| 9 | ## What you get |
| 10 | |
| 11 | **Real-time visibility.** Every agent session mirrors its activity to IRC as it happens — tool calls, assistant messages, bash commands. Open the web UI or any IRC client and watch your fleet work. |
| 12 | |
| 13 | **Live interruption.** Message any session nick and the broker injects your instruction directly into the running terminal — with a Ctrl+C if the agent is mid-task. No waiting for a tool hook. |
| 14 | |
| 15 | **Named, addressable sessions.** Every session gets a stable fleet nick: `claude-myrepo-a1b2c3d4`. You address it exactly like you'd address a person. Multiple agents, multiple sessions, no confusion. |
| 16 | |
| @@ -53,21 +53,21 @@ | |
| 53 | ``` |
| 54 | |
| 55 | === "Codex" |
| 56 | |
| 57 | ```bash |
| 58 | bash skills/openai-relay/scripts/install-codex-relay.sh \ |
| 59 | --url http://localhost:8080 \ |
| 60 | --token "$(cat data/ergo/api_token)" |
| 61 | |
| 62 | ~/.local/bin/codex-relay |
| 63 | ``` |
| 64 | |
| 65 | === "Gemini" |
| 66 | |
| 67 | ```bash |
| 68 | bash skills/gemini-relay/scripts/install-gemini-relay.sh \ |
| 69 | --url http://localhost:8080 \ |
| 70 | --token "$(cat data/ergo/api_token)" |
| 71 | |
| 72 | ~/.local/bin/gemini-relay |
| 73 | ``` |
| @@ -87,11 +87,11 @@ | |
| 87 | ``` |
| 88 | <claude-scuttlebot-a1b2c3d4> › bash: go test ./internal/api/... |
| 89 | <claude-scuttlebot-a1b2c3d4> edit internal/api/chat.go |
| 90 | <claude-scuttlebot-a1b2c3d4> Running tests... |
| 91 | <codex-scuttlebot-f3e2d1c0> › bash: git diff HEAD --stat |
| 92 | <operator> claude-scuttlebot-a1b2c3d4: focus on the auth handler first |
| 93 | <claude-scuttlebot-a1b2c3d4> Got it — switching to the auth handler. |
| 94 | <gemini-scuttlebot-9b8a7c6d> read internal/auth/store.go |
| 95 | ``` |
| 96 | |
| 97 | --- |
| 98 | |
| 99 | ELETED tmp-codex-hook-probe.sh |
| --- a/tmp-codex-hook-probe.sh | ||
| +++ b/tmp-codex-hook-probe.sh | ||
| @@ -1,11 +0,0 @@ | ||
| 1 | -#!/bin/sh | |
| 2 | -set -eu | |
| 3 | -log_file="${CODEX_HOOK_PROBE_LOG:-/tmp/codex-hook-fired.log}" | |
| 4 | -input="$(cat || true)" | |
| 5 | -event="$(printf '%s' "$input" | jq -r '.hook_event_name // "unknown"' 2>/dev/null || printf 'unknown')" | |
| 6 | -{ | |
| 7 | - printf '---\n' | |
| 8 | - printf 'event=%s\n' "$event" | |
| 9 | - printf '%s\n' "$input" | |
| 10 | -} >> "$log_file" | |
| 11 | -exit 0 |
| --- a/tmp-codex-hook-probe.sh | |
| +++ b/tmp-codex-hook-probe.sh | |
| @@ -1,11 +0,0 @@ | |
| 1 | #!/bin/sh |
| 2 | set -eu |
| 3 | log_file="${CODEX_HOOK_PROBE_LOG:-/tmp/codex-hook-fired.log}" |
| 4 | input="$(cat || true)" |
| 5 | event="$(printf '%s' "$input" | jq -r '.hook_event_name // "unknown"' 2>/dev/null || printf 'unknown')" |
| 6 | { |
| 7 | printf '---\n' |
| 8 | printf 'event=%s\n' "$event" |
| 9 | printf '%s\n' "$input" |
| 10 | } >> "$log_file" |
| 11 | exit 0 |
| --- a/tmp-codex-hook-probe.sh | |
| +++ b/tmp-codex-hook-probe.sh | |
| @@ -1,11 +0,0 @@ | |