bise :*
kiss your backlog goodbye.
ramble. interrupt. change your mind. i run the agents. you stay in flow.
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
the brand book · scroll ↓

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

02 · values

five things we never trade away.

∿flow

you never wait on a turn. say it, keep talking. the work runs in the background and bise is always listening.

›control

you decide. bise answers the obvious questions itself, shows why, and brings you only the real decisions.

:*lightness

no project management, no workflow to design, four words to learn. worktrees and conflicts are handled for you. many hands, light work.

♡calm

color means attention. agents talk to each other quietly; what's for you stands out, the rest stays dim.

✓honesty

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

whereline
site, headlinekiss your backlog goodbye.
site, sublineramble. interrupt. change your mind. i run the agents. you stay in flow.
inside the productideas in. little kisses out. also pull requests.
in reserveyou, 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.

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.

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

do

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.

don't

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.

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

paper
#f2ede2 · dark #171513
ink
#1d1a17 · dark #ece6da
dim
#5a5349 · dark #b8b0a3
kick
#8a8174 · dark #8a8276
pen
#c8264a · dark #f4a6b0
graphite
#6b645a · dark #b8b0a3
figure card
#faf7f0 · dark #1f1c19
highlighter
#f4a6b0 · 60%, dark 28%

the terminal · dark (the product: it doesn't change)

fig. 1 · the terminal's palette, on its figure card

type

titles and text
bise, in flow

Newsreader. 600 for titles, tight (−0.025 to −0.045em); 400 for text, italic for asides and captions.

the pen
this one

Caveat. only for group labels and short notes in the margin. never a sentence, never the :*: the kiss is always mono.

inside screens
:* on it: perf takes it.
$ npm run build ✓

JetBrains Mono, only inside screens, for code and commands. in the terminal, the font is yours.

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.

you stay in flowthe underline
painlessthe ring
this onethe arrow, and a note
the tally, in graphite
made for humansthe highlighter

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.

blowing: the gusts start at its edge
asleep: the last breath

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.

:*on it: perf, dark-mode and cookies started.
✉ dark-mode → mainwhich gray for the borders?
✓ perf is done · signup 4.1 s → 0.9 s

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

│your message
│the composer
:*main
◇a brief
∴thinking
$bash
ƒtypescript
↳a sub-call
±a file edit
@a message
▣an image
?a card: needs you
≡compacting (pulsing)

agent status

·starting
∿working
…waiting on an agent
?needs you
✓done
✗failed
○idle
–stopped

marks

✓the agent got your message
✓✓the model read it
•unread activity
ψown worktree
⇄two agents, one file
▸closed · open with a key

07 · ux principles

seven rules for every screen.

1you stay in control, the screen stays calm. agents work quietly; only what needs you gets color.
2everything is readable. prose never wider than a novel line; contrast ≥ 4.5:1.
3progressive disclosure. one line per step, details one key away. scripts are the exception: always in full.
4one symbol per thing.
5the history never lies. it only grows, in arrival order.
6no new vocabulary. you, main, agents, cards.
7honest. no silent failure, no hidden limit, nothing we pretend to have.

08 · the screen

one conversation, all your agents.

bise :*∿ 3 working · ? 1 needs you · ✓ 1 done
the login breaks on safari
:*on it: auth-fix takes it.
✉ docs → mainv1 or v2?
✉ main → docsv2, the brief says so
:*docs asked v1 or v2; the brief says v2, so i answered. ▸ why
? docs needs you
v2 removes /users. document v1 or v2?
agents · ⌥ + number
0 :* main
1 ∿ auth-fix12m · 21%
2 ∿ release3m · 8%
3 ? docsyou
4 … api-v2waits docs
5 ✓ benchdone
you → mainidle · 210k / 1M tokens · 21%
what's on your mind?
⏎ send@ filectrl+s find agent/ commands? help
headerbise :*, then only the non-zero counts. the pink one is the one that needs you.
feedthe conversation. prose ≤ 88 columns, in a 91-column reading column; extra width goes to the margin.
agentsone row each: number, status, name, age and context. ⌥ + number jumps to it; numbers never change while an agent lives. hidden under 70 columns.
dividerwho you're talking to (you → main, the name in pink) and, on the right, what they're doing.
composereverything 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 barright 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

what's on your mind?
say it and keep talking. the work runs in the background, i'm always here.
try: "fix the flaky login test, and draft the release note"

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.

1 · needs you
? api-v2 needs you
the v2 schema file isn't in the repo. where is it?
alt+r answer with text · ctrl+x later · ctrl+f full screen
2 · for you
:*docs asked v1 or v2; the brief says v2, so i answered. ▸ why
♡bench is done. p95 at 180 ms, nothing to fix. ▸ report
@auth-fix to you: got it, i'll check logout next.
3 · between agents
✉ auth-fix → releaseheads-up, i'm touching web/src/auth.
✉ release → auth-fixok, i'll mention the fix.

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.

· 14:02 ·
ship the v2 api: endpoints, sdk, docs, migration.
:*that's 30 pieces. i split it and started them.
▸ 47 messages between 30 agents
:*the endpoint agents agreed on one error format; the sdk agents use it too.
▸ 23 messages between 9 agents
✓4 endpoints are done: users, orgs, keys, audit. ▸ reports
· 14:31 ·
▸ 12 messages between 6 agents ∿

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 ».

found it: safari drops SameSite=None cookies that aren't Secure. the dev server sets the cookie without Secure, so the session is lost on the redirect. added secure: true; the webkit test passes now.

scripts in full

bash and TypeScript scripts are always shown whole, with colors. you should never wonder what an agent actually ran.

ƒtypescript ✓ 0.4s
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");
}
↳ github.search_issues ✓
▸ result · 2 items

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.

:*here's where the v2 endpoints stand:
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  waiting

progressive disclosure

itemby defaultopen
thinking∴ thought for 14s ▸the full text
bash, typescriptalways in full—
output▸ output · 42 lines · 1 failedthe output
file edit± edit session.ts ✓ +3 −1 ▸the diff
report✓ bench is done. ▸ reportthe report
brief◇ brief ▸the brief
agent traffic▸ 12 messages between 8 agentsthe 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.

? docs needs you · 1 of 3 · 2m
the brief says "keep old clients working", but v2 removes /users. do we document v1 or v2?
1 v1 2 v2 alt+r answer with text · ctrl+x later · ctrl+f full screen
?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.

the login breaks on safari. oh and draft the release note.
:*on it: auth-fix takes the bug, release takes the note.

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.

skip firefox, only webkit✓✓ the model read it
and log the cookie headers✓ the agent got it, waiting for its turn
also the logout path· sending

changing your mind

you just say it, like you would to a person. main tells the agent, plainly, and confirms.

:*docs asked v1 or v2; the brief says v2, so i answered. ▸ why
no, v1 for docs
:*told docs: v1, you changed your mind.
@ main → docs the user changed their mind: use v1, not v2.

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.

attached
▣ 1 shots/login-mobile.png1170×2532 · 310 kB
▣ 2 clipboard2048×1536 · resized to fit 2048
backspace on a chip removes it
compare ▣ 1 with the design ▣ 2, the button is off

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:

✗ glm-5 can't read images. pick a model that can (/model), or describe the screen in words.

⚠ 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.

keysdoes
⏎send to the agent in view; during a turn, steer it
@namea direct message from main
⌥ + 0…9go to main or agent n
⌥↑ ⌥↓select the previous / next agent; ⏎ enters it, space previews it
escback to main
ctrl+cinterrupt; again to quit (agents keep running)
ctrl+1…9open inbox item n (a click too). in it: 1…9 pick · ← → other items · esc back
ctrl+oopen or close everything folded: thinking, outputs, diffs, agent traffic
ctrl+vpaste an image
ctrl+rvoice
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.

wheretext
headerno agents yet · ∿ 3 working · … 1 waiting · ? 1 needs you · ✓ 1 done
panelagents · ⌥ + number · + 21 more · ▸ 4 archived
first runwhat's on your mind? · say it and keep talking. the work runs in the background, i'm always here.
inside an agentyou'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.
onboardinghi, 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.

agentwhat you saidhow it ends
perfsignup 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-modeoh and dark mode. people keep askingsettings first, then the rest. asked which gray: the one in tokens.css.
cookiesand the cookie banner hides the buy button on mobileyou changed your mind: legal wants the banner. it stays, half the size, off the button.
emoji-csvwait also the csv export crashes on emoji 😭it's always unicode. 🦄 came out as 🦄: the file was read as latin-1.
releaseOK LAST ONE. release notes for all of thiswaits for the others, then writes them. 2.5 notes drafted. five things, zero tabs.

lines that work anywhere:

momenttext
main starts workrelease waits for the others, then writes them. go get a coffee.
main answers for youi 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 worktreeperf needs a clean build to time signup. it gets its own worktree.
the last lineyou're the best · :*

20 · resources

everything else.

design systemthe laws, foundations, components and UX patterns behind every screen
screensevery screen of the product, one by one
livethe live simulation; type your own messages
onboardingthe first launch
desktopbise as a desktop app: every feature in a window (proposal)
bise.devthe landing page
in the repothe full book with the spec and the implementation plan: docs/brand/bise-book.md, and the work issue by issue: bise-issues.md