Your models.
Pick a provider. Change models as the work changes. Your workflow isn’t tied to one.
Choose a providerA local coding agent, built in Rust
Think it through. Build it out. A coding agent that works in your terminal, with your models, your tools, and your say in what happens next.
Open source. Made to be made yours.
Real dev TUI · deterministic provider · no live model or server shell.
Scroll sideways for the full 80-column terminal.
Read the existing code
╭──────────────────────────────────────────────────────────────────────────────╮
│ ✻ Welcome to bingo! │
│ │
│ /help for help · /login codex to use a subscription │
│ cwd: ~/project │
╰──────────────────────────────────────────────────────────────────────────────╯
> Trim whitespace in greet(), then run the tests.
⏺ I'll read the greeting, make the small fix, and run its tests.
⏺ Read(src/greeting.py)
⎿ 1 def greet(name):
2 return f"Hello, {name}!"
✻ Sketching… (esc to interrupt · 1s · ↓ 0.0k tokens)
╭──────────────────────────────────────────────────────────────────────────────╮
│ > ask anything · ⏎ steers · tab queues │
╰──────────────────────────────────────────────────────────────────────────────╯
⏵⏵ acceptEdits (shift+tab to cycle) ? for shortcuts 10k/191k · fake/fake-1
Read, edit, and test
⏺ Read(src/greeting.py)
⎿ 1 def greet(name):
2 return f"Hello, {name}!"
⏺ Edit(src/greeting.py)
⎿ --- /private/tmp/bingo-mws58eo4/project/src/greeting.py
+++ /private/tmp/bingo-mws58eo4/project/src/greeting.py
@@ -1,2 +1,2 @@
def greet(name):
- return f"Hello, {name}!"
+ return f"Hello, {name.strip()}!"
⏺ Bash(python3 test_greeting.py)
⎿ $ python3 test_greeting.py
3 tests passed.
[Exited with code 0]
⏺ Fixed whitespace handling. All 3 tests pass.
╭──────────────────────────────────────────────────────────────────────────────╮
│ > ask anything · / for commands · ! for shell │
╰──────────────────────────────────────────────────────────────────────────────╯
⏵⏵ acceptEdits (shift+tab to cycle) ? for shortcuts 10k/191k · fake/fake-1 Pick a provider. Change models as the work changes. Your workflow isn’t tied to one.
Choose a providerWork with real files and real tools. Sessions are journaled locally, ready to pick up again.
Meet the terminalExplicit permission modes put you in control of what the agent can do, and when it needs to ask.
Set the boundariesSmall at the core. Open at the edges.
An agent should be a tool you can understand, not a box you have to trust. bingo keeps its kernel small and its boundaries explicit.
Inside the architectureproviders / tools / skills / MCP
sessions · turns · permissions · journal
terminal / headless / JSON-RPC
Sessions, turns, permissions, and the journal. A small foundation, not a growing collection of features.
Models, tools, and interfaces connect through the SDK. Extend the pieces you need without forking the whole.
The terminal, headless runs, and connected clients read the same ordered events. No parallel version of the truth.
Fits the way you work
Keep the tools you know. Add the context you need. Let bingo meet you there.
Give the agent reusable instructions and connect the services you already use.
Run a turn from a script. Stream structured output into your own workflow.
A process, a pipe, and JSON-RPC. Extend bingo without writing Rust.
bingo --print "review this diff"
# machine-readable, when you need it
bingo --print "review this diff" \
--output-format stream-jsontext / json / stream-jsonMake yourself at home
Build from source, connect a provider, and open a session in your project.
Rust 1.96+ · Git · ~/.cargo/bin on PATH
Full installation guidegit clone https://github.com/yexrob/bingo
cd bingo
cargo install --path crates/bingo --lockedbingo login codexUse your ChatGPT subscription with Codex, or configure an API provider. Choose a provider →
cd /path/to/your-project
bingo --provider codexA small core. An open world.
View source on GitHub