Quick start
Sign in to a provider, run a first turn, and read the permission card bingo puts in front of you.
Open bingo where the work is
cd ~/code/my-project
bingo
With a terminal on both ends of the pipe, bingo takes the whole screen and opens its terminal surface. If either stdin or stdout is redirected, the same binary runs headless instead — see running headless.
The first screen is a welcome box, an input box, and one line of status under it:
╭──────────────────────────────────────────────────────────────╮
│ ✻ Welcome to bingo! │
│ │
│ /help for help · /login codex to use a subscription │
│ cwd: ~/code/my-project │
╰──────────────────────────────────────────────────────────────╯
╭──────────────────────────────────────────────────────────────╮
│ > ask anything · / for commands · ! for shell │
╰──────────────────────────────────────────────────────────────╯
? for shortcuts
Sign in
Nothing runs until a provider has a credential. Which command you use depends on what you have.
bingo login codex # a ChatGPT subscription, through a browser
bingo login anthropic # paste an API key
bingo login openai # paste an API key
bingo login <provider> opens a browser for the providers that have an OAuth
issuer, and asks for a pasted credential for the ones that take a key
(ADR-0012, ADR-0017). Two flags change how it asks: --device shows a code to
enter in a browser somewhere else, and --paste reads a credential minted
elsewhere from stdin. bingo logout <provider> forgets it again.
ANTHROPIC_API_KEY and OPENAI_API_KEY are read too, so a machine that
already exports one needs no login at all. Credentials land in
~/.bingo/data/auth.json, mode 0600 — never in a settings file, which a
project commits.
The same two commands exist inside a session as /login and /logout. More
in providers and models.
The first prompt
Type a sentence and press enter. What comes back reads like this:
> what is in this workspace?
⏺ I'll read the manifest first.
⏺ Read(Cargo.toml)
⎿ Read 42 lines
⏺ One workspace, 27 crates: a kernel and its plugins.
> is what you said, ⏺ is what bingo said or did, ⎿ is what came back.
While a turn runs, an activity row sits above the input box —
✻ Simmering… (esc to interrupt · 4s · ↓ 1.2k tokens) — and esc stops it.
You can also give the prompt on the command line, which skips straight to it:
bingo "what is in this workspace?"
The permission card
Before a tool touches anything, bingo asks. The question is a card with the only bright border on screen, under the row that asked:
╭──────────────────────────────────────────────────────────────╮
│ Edit │
│ +line 0 │
│ +line 1 │
│ … +8 lines (ctrl+e to expand) │
│ │
│ Do you want to edit src/lib.rs? │
│ ❯ 1. Yes │
│ 2. Yes, allow Edit(src/) during this session │
│ 3. No, and tell bingo what to do differently (esc) │
╰──────────────────────────────────────────────────────────────╯
Answer with the number, or with y / a / n. Option 2 installs a rule for
this session only; it is never written to disk. Option 3 lets you say what to
do instead, and that text goes back to the model as the denial’s reason.
ctrl+e expands the preview above the question.
What is asked about, and what runs without asking, is the permission mode and the rule tables — see settings and permissions.
Commands worth knowing on day one
| command | what it does |
|---|---|
/help | the shortcuts and commands panel (? toggles it too) |
/status | model, provider, context and the rest of the session’s facts |
/model [<provider>/]<model> | switch what the next turn runs on |
/compact [instructions] | summarise the transcript now |
/permission <mode> | read or set the permission mode |
/clear | start a fresh session in this directory |
/resume | reopen an earlier session from a picker |
/exit | leave |
!<line> | run a shell line yourself, without the gate |
Commands complete on tab, and / opens the list.
Coming back to a session
Every session is a journal on disk under ~/.bingo/data/sessions/<id>/, so
leaving loses nothing:
bingo --continue # the most recent session in this directory
bingo --resume <id> # a particular one
Inside the terminal surface, /resume opens the picker instead, one session
per row:
Resume
❯ 1. fix the parser · 12 msgs · 2h ago
2. 请帮我把这个解析器修好 · 1 msg · 1d ago
3. untitled · 5d ago
Next: the terminal surface in full.