1. a quick kiss on the cheek :*
2. a brisk north wind
3. a terminal where multi-agent coding is painless
01 · philosophy
one thread. a whole team. you, in flow.
agents made us fast. they also made our days feel empty.
you start five things in five tabs, and each one waits for you: "should i continue?", "which gray?", "v1 or v2?". you're the router, the memory and the merge tool. at 6pm a lot got merged, and you feel like you did nothing. you gave away the fun part, and got nothing back.
it's not you. it's the switching. forty times a day something pulls you out of your head, and flow, the state where you think clearly and the hours disappear, never gets a chance to start.
so bise gives you one thread.
one thread per repo, for good: compaction keeps the context, you never start over. you talk to main, bise's main agent. main splits your ideas into jobs, starts agents in the background, answers the obvious questions the way you would, and taps your shoulder only when a decision is really yours. and main is always listening: say the next thing while the last one runs.
behind it, the team runs itself. agents message each other before they collide, make a worktree only when one helps and clean it up after, and commit their own work. you don't design a workflow: bise has opinions, so you don't need any. after a day you forget there are agents at all.
built for humans piloting hundreds of robots, from a distance.
a bise is a little kiss, and a cold north wind. that's the whole idea: a light touch on the shoulder when something needs you, and the rest of the time, a breeze that keeps everything moving while you think.
what we believe
- flow is the product. everything else is plumbing.
- one conversation beats ten tabs. you talk; the orchestration is our job.
- the human has the ideas. the tech keeps up, then gets out of the way.
- more agents should mean more done, never more to watch.
- an agent starts when a job needs one. that's the whole rule: no committee of agents checking each other, no tokens burned for show.
- a calm screen is a feature. what's for you stands out; the rest is folded, one key away.
- trust comes from honesty: say what happened, say what isn't built, never pretend.
02 · values
five things we never trade away.
you never wait on a turn. say it, keep talking. the work runs in the background and bise is always listening.
you decide. bise answers the obvious questions itself, shows why, and brings you only the real decisions.
no project management, no workflow to design, four words to learn. worktrees and conflicts are handled for you. many hands, light work.
color means attention. agents talk to each other quietly; what's for you stands out, the rest stays dim.
no silent failure, no hidden limit, no feature we pretend to have. the history never lies: it only grows, in order.
03 · name and mark
bise :*
the name is always lowercase, like a command you type: bise. four letters, easy to type a hundred times a day.
the mark is :*, the kiss you type on a keyboard. it works in any terminal and any font, and looks typed by a human. inside the product it marks main's voice.
say it: beez. in english the word is rare, so we explain it wherever a stranger meets it first (site hero, README, launch posts), with a dictionary entry: bise /beez/ · french, n. 1. a quick kiss on the cheek. 2. a brisk north wind. 3. a terminal where multi-agent coding is painless. short form, one line: bise (say: beez): french for a kiss. also a wind. not inside the product: there, the :* says it.
standalone. bise is its own brand: no borrowed colors, no parent logo.
taglines
| where | line |
|---|---|
| site, headline | kiss your backlog goodbye. |
| site, subline | ramble. interrupt. change your mind. i run the agents. you stay in flow. |
| inside the product | ideas in. little kisses out. also pull requests. |
| in reserve | you, but with way more hands. · your team is as big as your ideas. |
retired, don't bring them back: "built for engineers who think faster than they type." (not strong enough) · "all the agents. none of the overhead." · "code like a team of ten." (a number is a cap) · "all your ideas. none of the juggling." (sounds like an LLM)
04 · voice and tone
a human, typing fast.
lowercase, always
no capital letter at the start of a word, anywhere: site, UI, messages. it reads like someone typing, not a company talking.
- proper nouns keep their capitals: GitHub, Claude Code, Ghostty.
- acronyms stay in caps: API, MCP, PR. "cli" in lowercase is fine.
- ALL CAPS to shout: allowed, extremely rarely.
- our name stays lowercase: bise.
no period at the end of a title
a stack of titles that all end with a period sounds like a list of verdicts. so titles drop their last period: sections, features, lists, UI labels. all your MCPs. all your skills. always on: the periods in the middle stay, only the last one goes. the numbered meanings of the gloss (1. a quick kiss on the cheek) drop it too.
- keep it only on the headline and on real punchlines, where the period is the timing of the joke:
kiss your backlog goodbye.,one thread. a whole team.,no yaml was harmed.one per screen, at most. - body text keeps its periods.
who speaks
inside the product, bise says "i", and "you" is always the user. on the site, we talk to the reader as "you".
four words, no more
the user meets you, main, agents, the inbox; what waits in the inbox is a notification. never "task", "sub-agent", "orchestrator", "hub", "hands" or "card" in the UI.
do / don't
say it and keep talking. the work runs in the background, i'm always here.
docs asked v1 or v2; the brief says v2, so i answered.
glm-5 can't read images. pick a model that can, or describe the screen in words.
Welcome! Unleash the power of seamless multi-agent orchestration.
Task #3 (docs) has been resolved by the Orchestrator.
Error 400: invalid_request_error: image_url not supported.
- short sentences. show the moment, don't name the feeling.
- warm, a bit cheeky, never cute at the expense of clear.
- no promise with a number. the real limits are tokens, cost and provider speed: say so.
- no polished LLM patterns: "X. none of the Y.", "seamless", "supercharge", "unleash".
05 · visual identity
the site is paper. the product is the terminal
two places, two looks. the site (bise.dev, this book, the README, the og image) is a page of paper: a serif in ink, a pen for the kiss and the notes in the margin, colored pencils for the doodles. the product stays a terminal app: monospace, calm, your terminal's background, the palette below. where the site shows the product, the screen is laid on the page as a figure, and inside it the terminal keeps its own colors.
paper · the site's palette
- the paper has a light grain. one accent on it: the pen. graphite is for doodles and tallies only.
- the switch in the menu turns the page to dark paper, the same book at night.
the terminal · dark (the product: it doesn't change)
fig. 1 · the terminal's palette, on its figure card
- the background is yours. in the terminal we never paint the background: your terminal's color, transparency and blur show through. we only choose the colors of the text. two themes, light and dark, picked from your terminal's background at start.
- color means attention. only "needs you" and errors get a hue. the accent is pink, not red, so "needs you" never looks like an error.
- every text you read is at least 4.5:1 on white, cream, black and a typical dark grey. faint is for rails and borders only.
type
Newsreader. 600 for titles, tight (−0.025 to −0.045em); 400 for text, italic for asides and captions.
Caveat. only for group labels and short notes in the margin. never a sentence, never the :*: the kiss is always mono.
$ npm run build ✓
JetBrains Mono, only inside screens, for code and commands. in the terminal, the font is yours.
- lowercase everywhere. no final period on titles, no § before them.
- the kiss is written with the pen: the * comes down level with the colon, it's a mouth.
pen marks
drawn by hand in SVG, and they draw themselves once, when their block comes in. one or two per screen, on the words that matter.
the doodle
bise is also the north wind. it's drawn as a pencil cloud (graphite, hatched, pink cheeks) that blows next to the name, and falls asleep at the end of a page.
the figure
a screen on the page is a figure: a card a bit lighter than the paper, a pencil frame, a flat offset shadow kept very light (3px 3px 0, 5%), and the terminal's own colors inside: light theme on paper, dark theme on dark paper. a caption in italic under it, like a book. no tape, no blurry shadows.
fig. 2 · a bise session, on paper
motion
on the site: the pen marks draw once when they come in, the cloud bobs and blows, a few seeds drift. nothing loops in your face. in the product, only four things move: the working breeze ∿, the cursor , the typed welcome, and the :* pop. nothing bounces, nothing slides.
06 · symbols
one glyph per thing.
status is a symbol, not a word and not a color. learn them once, read a screen of 30 agents at a glance.
entities
agent status
marks
07 · ux principles
seven rules for every screen.
| 1 | you stay in control, the screen stays calm. agents work quietly; only what needs you gets color. |
| 2 | everything is readable. prose never wider than a novel line; contrast ≥ 4.5:1. |
| 3 | progressive disclosure. one line per step, details one key away. scripts are the exception: always in full. |
| 4 | one symbol per thing. |
| 5 | the history never lies. it only grows, in arrival order. |
| 6 | no new vocabulary. you, main, agents, cards. |
| 7 | honest. no silent failure, no hidden limit, nothing we pretend to have. |
08 · the screen
one conversation, all your agents.
| header | bise :*, then only the non-zero counts. the pink one is the one that needs you. |
| feed | the conversation. prose ≤ 88 columns, in a 91-column reading column; extra width goes to the margin. |
| agents | one row each: number, status, name, age and context. ⌥ + number jumps to it; numbers never change while an agent lives. hidden under 70 columns. |
| divider | who you're talking to (you → main, the name in pink) and, on the right, what they're doing. |
| composer | everything under the divider is slightly raised, like the bottom of an app. your text sits behind a thin bar (faint while empty, pink once you type), at least 2 rows; it grows with you. |
| key bar | right under the composer: keys in the text color, what they do dim, a tip on the right when you're idle. in an agent's view it starts with esc back to main. |
the first run
09 · three levels
what's for you, and what isn't.
everything on screen belongs to one of three levels. the level decides the look, never the other way round.
- level 1 gets the pink bar and stays until you answer.
- levels 2 and 3 differ by brightness and the rail, never by color.
- traffic between agents is always there, so the story stays readable. main's next line is the summary for you.
10 · the history
it only grows. in order.
the history is append-only, in arrival order. nothing is grouped by agent, nothing moves later. what changes over time (status, age, open notifications) lives outside it: the panel, the header, the card box.
- content is frozen; small marks are not. the only change on an existing line is its status mark, like ✓ becoming ✓✓.
- only the tail can grow. more than 3 messages between agents fold into one dim line. only the last run, at the bottom, still grows; a line for you closes it forever.
- time marks after a pause: a faint · 14:31 · after 5 minutes of silence.
11 · reading
a novel line, not a wall.
prose wraps at 88 columns, whatever the terminal width. code goes up to 100, then wraps with a faint ».
scripts in full
bash and TypeScript scripts are always shown whole, with colors. you should never wonder what an agent actually ran.
async function main() { const issues = await tools.github.search_issues({ query: "safari login", limit: 5 }); // only the open ones return issues.filter((i) => i.state === "open"); }
tables
no frame, no bars. two spaces between columns, a bold header, and a faint rule with one segment per column. numbers align right. too wide for the screen: the widest column wraps; still too wide: one block per row, key and value.
endpoint owner status tests coverage
──────── ────────── ─────── ───── ────────
/users ep-users done 21 94%
/orgs ep-orgs done 17 91%
/keys ep-keys working 9 62%
/billing ep-billing waitingprogressive disclosure
| item | by default | open |
|---|---|---|
| thinking | ∴ thought for 14s ▸ | the full text |
| bash, typescript | always in full | — |
| output | ▸ output · 42 lines · 1 failed | the output |
| file edit | ± edit session.ts ✓ +3 −1 ▸ | the diff |
| report | ✓ bench is done. ▸ report | the report |
| brief | ◇ brief ▸ | the brief |
| agent traffic | ▸ 12 messages between 8 agents | the messages, in order |
12 · notifications
only the decisions that are yours.
main answers the obvious questions itself. what's left arrives as a notification: a pink bar, who needs you, the question, the choices.
| ? | a question, or an agent blocked |
| ✗ | an agent failed |
| ↻ | a restart failed, rolled back |
| – | confirm dropping an agent |
| ⇄ | two agents changed the same file |
| ✓ | done |
ctrl+f opens a long notification full screen, pgup / pgdn scroll it.
13 · talking to agents
just talk. that's the whole interface.
to main
say what you want, as many things as you want, one after the other. main says who takes what.
to one agent
@name sends a direct message without leaving main. ⌥ + number or ⏎ on an agent takes you inside it; esc brings you back.
did it get my message?
while an agent works, what you send waits for its turn. the marks at the end of your line tell you where it is, like a text message.
changing your mind
you just say it, like you would to a person. main tells the agent, plainly, and confirms.
14 · images
show it, don't describe it.
drag a screenshot into the terminal, paste one with ctrl+v, or pick one with @. an image is one pink chip in your text; delete the chip, the image is gone.
the attachments sit in their own small box, under the divider and above your message: attached in its top border, one row per chip. the chips stay in your text, wherever you put them, with the same number.
a model that can't read images says so in plain words, with a way out:
⚠ drawing the picture itself in the terminal comes later.
15 · onboarding
hi, i'm bise :*
six short steps, one choice each: the welcome, your theme, your model, your folder (and one honest thing), how it works in three lines, then the real thing. after that, no tour: each hint shows once, next to the thing, the first time it happens.
click inside, then press enter to go on.
16 · live
ten agents, one calm screen.
an 80-second simulation of a real session: you ask, main starts ten agents, they talk, one needs you, you answer. type your own messages in it at any time.
every screen, one by one: all the screens
17 · keys
few keys, all shown where they're used.
| keys | does |
|---|---|
⏎ | send to the agent in view; during a turn, steer it |
@name | a direct message from main |
⌥ + 0…9 | go to main or agent n |
⌥↑ ⌥↓ | select the previous / next agent; ⏎ enters it, space previews it |
esc | back to main |
ctrl+c | interrupt; again to quit (agents keep running) |
ctrl+1…9 | open inbox item n (a click too). in it: 1…9 pick · ← → other items · esc back |
ctrl+o | open or close everything folded: thinking, outputs, diffs, agent traffic |
ctrl+v | paste an image |
ctrl+r | voice |
ctrl+` | a shell in the folder |
/ | commands |
18 · copy deck
the words, exactly.
every string the UI shows. when a string isn't here, write it in the same voice and add it.
| where | text |
|---|---|
| header | no agents yet · ∿ 3 working · … 1 waiting · ? 1 needs you · ✓ 1 done |
| panel | agents · ⌥ + number · + 21 more · ▸ 4 archived |
| first run | what's on your mind? · say it and keep talking. the work runs in the background, i'm always here. |
| inside an agent | you're talking to auth-fix directly. main isn't in the loop. esc back to main. |
| composer | ⏎ send · @ file · / commands · ⏎ steer · ctrl+c interrupt |
| history | ▸ 12 messages between 8 agents · ∴ thought for 14s · ▸ output · 42 lines · ✓ turn done · 2m 10s |
| cards | ? docs needs you · alt+r answer with text · ctrl+x later · ctrl+f full screen |
| direct | @ auth-fix to you: … |
| not delivered | ✗ not delivered: auth-fix stopped. ⏎ send again · esc drop |
| provider down | ✗ the model provider answered 503. retrying in 8s (2 of 5). · auth-fix and release are waiting on it; nothing is lost. |
| onboarding | hi, i'm bise :* · ideas in. little kisses out. also pull requests. · press enter ↵ |
19 · examples
one small team, always the same.
every demo, mock and README tells the same afternoon: one person, five small wishes, five agents. use this cast. when you need a new line, write one they would say.
the rules: things anyone has lived (a slow page, a banner over the buy button, a broken export). no version numbers, no migrations, no "refactor the module". one joke per scene, never at the user. the numbers stay the same everywhere.
| agent | what you said | how it ends |
|---|---|---|
| perf | signup is slow on mobile. can you look? | the hero image was 4.2 MB. signup: 4.1 s → 0.9 s on a mid-range phone. |
| dark-mode | oh and dark mode. people keep asking | settings first, then the rest. asked which gray: the one in tokens.css. |
| cookies | and the cookie banner hides the buy button on mobile | you changed your mind: legal wants the banner. it stays, half the size, off the button. |
| emoji-csv | wait also the csv export crashes on emoji 😭 | it's always unicode. 🦄 came out as 🦄: the file was read as latin-1. |
| release | OK LAST ONE. release notes for all of this | waits for the others, then writes them. 2.5 notes drafted. five things, zero tabs. |
lines that work anywhere:
| moment | text |
|---|---|
| main starts work | release waits for the others, then writes them. go get a coffee. |
| main answers for you | i answered dark-mode: the one in tokens.css. (like everywhere else) |
| a decision card | ? perf needs you · the hero image is 4.2 MB. compress it, or lazy-load it? |
| a card about the version | ? release needs you · dark mode changes the default colors. call it 2.5 or 3.0? |
| agents sync | ✉ release → emoji-csv did the export format change? · ✉ emoji-csv → release no. same columns, now in utf-8. |
| a clean worktree | perf needs a clean build to time signup. it gets its own worktree. |
| the last line | you're the best · :* |
20 · resources
everything else.
| design system | the laws, foundations, components and UX patterns behind every screen |
| screens | every screen of the product, one by one |
| live | the live simulation; type your own messages |
| onboarding | the first launch |
| desktop | bise as a desktop app: every feature in a window (proposal) |
| bise.dev | the landing page |
| in the repo | the full book with the spec and the implementation plan: docs/brand/bise-book.md, and the work issue by issue: bise-issues.md |