Write
Write a commit, reply or quote
- Press c to write a new commit.
- Press r to reply to the selected commit.
- Press q to quote it in a new commit.
The composer opens at the bottom of the screen. Type your text, then press ctrl-s to send it.
To write in your own editor instead, press ctrl-e. ttyl opens
$VISUAL, or $EDITOR if $VISUAL is not set, or vi if neither is. Save
and quit the editor to come back with your text.
To add an emoji, type : and the start of its name, then pick one from the list.
Keep a draft
Press esc to close the composer. ttyl keeps the draft, even after you quit, and gives it back the next time you write the same commit, reply or quote.
Preview before you send
Press ctrl-r in the composer to see the draft as the commit it would become, with code blocks in color. dev-null.sh renders the preview, so it matches what other people see.
// ttyl @ /dev/null ● 3 @ada ╭─ following ── /latest ── trending ─────────────────────────────────╮ ╭ thread ─────────────────────────────────────╮ │ ┆ Today │ │ ● Ada @ada · 18m e4f5a61 │ │ │ │ │ │ switched the feed to cursorPaginate(20). │ │ ● Ada @ada · 18m · 3 12 e4f5a61 │ │ │ offsets fall over once the table grows. │ │ ┃ switched the feed to cursorPaginate(20). offsets fall over once │ │ │ 9:42 AM · Oct 21, 2026 · commit e4f5a61 │ │ ┃ the table grows. │ │ │ 3 12 │ │ │ │ │ │ │ ● Ada @ada · 29m in review e4f5a62 │ │ │ │ │ and the p99 dropped from 480ms to 31ms. same lesson as this: │ │ │ │ │ Margaret @margaret notes from rewriting our scheduler. 1. th… │ │ │ │ │ │ │ │ │ ● Grace @grace · 1h · 5 27 0000201 │ │ │ │ │ today's footgun: │ │ │ │ │ php │ │ │ │ │ $name = 'devnull'; │ │ │ │ │ echo "<b>$name</b>"; │ │ │ │ │ +2 lines · space to expand │ │ │ │ │ │ │ │ │ ● Linus @linus · 2h 0000301 │ │ │ │ │ first commit here. hello /dev/null. │ │ │ │ │ │ │ │ │ ┆ Yesterday │ │ │ ╰────────────────────────────────────────────────────────────────────╯ ╰─────────────────────────────────────────────╯ commit ──────────────────────────────────────────────────────────────────────────────────────────────────────────────── today's footgun: php $name = 'devnull'; echo "<b>$name</b>"; escape your output. preview ctrl-s commit esc write
// ttyl @ /dev/null ● 3 @ada ─ following ── /latest ── trending ─────────────── ┆ Today │ ● Ada @ada · 18m · 3 12 e4f5a61 ┃ switched the feed to cursorPaginate(20). offsets ┃ fall over once the table grows. ┃ ● Grace @grace · 10m @ada did you keep an in… │ ● Ada @ada · 29m in review e4f5a62 │ and the p99 dropped from 480ms to 31ms. same │ lesson as this: │ Margaret @margaret notes from rewriting our … │ ● Grace @grace · 1h · 5 27 0000201 │ today's footgun: │ php │ $name = 'devnull'; │ echo "<b>$name</b>"; │ +2 lines · space to expand │ ○ fatal: bad object 0000202 │ ● Linus @linus · 2h 0000301 │ first commit here. hello /dev/null. │ commit ──────────────────────────────────────────── today's footgun: php $name = 'devnull'; echo "<b>$name</b>"; escape your output. preview ctrl-s commit esc write
Press esc to go back to writing, or ctrl-s to send it from the preview.
Add a poll
Only a new commit can carry a poll.
- Press ctrl-p in the composer.
- Type the first option. Press enter to add the next one. A poll has up to four options.
- Press tab or ↓ to move from the last option to how long the poll lasts.
- Press ← or → to change how long it lasts.
// ttyl @ /dev/null ● 3 @ada ╭─ following ── /latest ── trending ─────────────────────────────────╮ ╭ thread ─────────────────────────────────────╮ │ ┆ Today │ │ ● Ada @ada · 18m e4f5a61 │ │ │ │ │ │ switched the feed to cursorPaginate(20). │ │ ● Ada @ada · 18m · 3 12 e4f5a61 │ │ │ offsets fall over once the table grows. │ │ ┃ switched the feed to cursorPaginate(20). offsets fall over once │ │ │ 9:42 AM · Oct 21, 2026 · commit e4f5a61 │ │ ┃ the table grows. │ │ │ 3 12 │ │ │ │ │ │ │ ● Ada @ada · 29m in review e4f5a62 │ │ │ │ │ and the p99 dropped from 480ms to 31ms. same lesson as this: │ │ │ │ │ Margaret @margaret notes from rewriting our scheduler. 1. th… │ │ │ │ │ │ │ │ │ ● Grace @grace · 1h · 5 27 0000201 │ │ │ │ │ today's footgun: │ │ │ │ │ php │ │ │ │ │ $name = 'devnull'; │ │ │ │ │ echo "<b>$name</b>"; │ │ │ │ │ +2 lines · space to expand │ │ │ │ │ │ │ │ │ ● Linus @linus · 2h 0000301 │ │ │ │ │ first commit here. hello /dev/null. │ │ │ │ │ │ │ │ │ ┆ Yesterday │ │ │ │ │ │ │ │ ╰────────────────────────────────────────────────────────────────────╯ ╰─────────────────────────────────────────────╯ commit ──────────────────────────────────────────────────────────────────────────────────────────────────────────────── which one do you reach for first? ○ grep ○ ripgrep enter adds an option lasts ‹ 1 day › ctrl-s commit ctrl-e editor ctrl-p poll ctrl-v image ctrl-r preview esc close
// ttyl @ /dev/null ● 3 @ada ─ following ── /latest ── trending ─────────────── ┆ Today │ ● Ada @ada · 18m · 3 12 e4f5a61 ┃ switched the feed to cursorPaginate(20). offsets ┃ fall over once the table grows. ┃ ● Grace @grace · 10m @ada did you keep an in… │ ● Ada @ada · 29m in review e4f5a62 │ and the p99 dropped from 480ms to 31ms. same │ lesson as this: │ Margaret @margaret notes from rewriting our … │ ● Grace @grace · 1h · 5 27 0000201 │ today's footgun: │ php │ $name = 'devnull'; │ echo "<b>$name</b>"; │ +2 lines · space to expand │ ○ fatal: bad object 0000202 │ ● Linus @linus · 2h 0000301 │ first commit here. hello /dev/null. │ ┆ Yesterday commit ──────────────────────────────────────────── which one do you reach for first? ○ grep ○ ripgrep enter adds an option lasts ‹ 1 day › ctrl-s commit ctrl-e editor esc close
Press backspace on an empty option to remove it. Press ctrl-p again to take the poll off.
Attach images
A new commit can carry up to three images. To attach one, do one of these:
- Drop the file on the terminal window.
- Paste the path of the file.
- Copy an image or an image file, then press ctrl-v. On Linux,
this reads the clipboard through
wl-clipboardorxclip.
Each image gets a description line, which people who cannot see the image read instead. Press tab to move to it and type the description.
// ttyl @ /dev/null ● 3 @ada ╭─ following ── /latest ── trending ─────────────────────────────────╮ ╭ thread ─────────────────────────────────────╮ │ ┆ Today │ │ ● Ada @ada · 18m e4f5a61 │ │ │ │ │ │ switched the feed to cursorPaginate(20). │ │ ● Ada @ada · 18m · 3 12 e4f5a61 │ │ │ offsets fall over once the table grows. │ │ ┃ switched the feed to cursorPaginate(20). offsets fall over once │ │ │ 9:42 AM · Oct 21, 2026 · commit e4f5a61 │ │ ┃ the table grows. │ │ │ 3 12 │ │ │ │ │ │ │ ● Ada @ada · 29m in review e4f5a62 │ │ │ │ │ and the p99 dropped from 480ms to 31ms. same lesson as this: │ │ │ │ │ Margaret @margaret notes from rewriting our scheduler. 1. th… │ │ │ │ │ │ │ │ │ ● Grace @grace · 1h · 5 27 0000201 │ │ │ │ │ today's footgun: │ │ │ │ │ php │ │ │ │ │ $name = 'devnull'; │ │ │ │ │ echo "<b>$name</b>"; │ │ │ │ │ +2 lines · space to expand │ │ │ │ │ │ │ │ │ ● Linus @linus · 2h 0000301 │ │ │ │ │ first commit here. hello /dev/null. │ │ │ │ │ │ │ │ │ ┆ Yesterday │ │ │ │ │ │ │ │ │ ● Margaret @margaret · 11h · 14 88 0000401 │ │ │ │ │ notes from rewriting our scheduler. │ │ │ ╰────────────────────────────────────────────────────────────────────╯ ╰─────────────────────────────────────────────╯ commit ──────────────────────────────────────────────────────────────────────────────────────────────────────────────── new desk, same bugs. a desk with two monitors desk.png · 800×600 · 8 KB ctrl-s commit ctrl-e editor ctrl-p poll ctrl-v image ctrl-r preview esc close
// ttyl @ /dev/null ● 3 @ada ─ following ── /latest ── trending ─────────────── ┆ Today │ ● Ada @ada · 18m · 3 12 e4f5a61 ┃ switched the feed to cursorPaginate(20). offsets ┃ fall over once the table grows. ┃ ● Grace @grace · 10m @ada did you keep an in… │ ● Ada @ada · 29m in review e4f5a62 │ and the p99 dropped from 480ms to 31ms. same │ lesson as this: │ Margaret @margaret notes from rewriting our … │ ● Grace @grace · 1h · 5 27 0000201 │ today's footgun: │ php │ $name = 'devnull'; │ echo "<b>$name</b>"; │ +2 lines · space to expand │ ○ fatal: bad object 0000202 │ ● Linus @linus · 2h 0000301 │ first commit here. hello /dev/null. │ ┆ Yesterday │ ● Margaret @margaret · 11h · 14 88 0000401 commit ──────────────────────────────────────────── new desk, same bugs. sk with two monitors desk.png · 800×600 · 8 KB ctrl-s commit ctrl-e editor esc close
Press backspace on an empty description to remove its image.
If ttyl stops before sending
- If the text looks like it holds a secret, such as an API key, ttyl asks first. Press y to send it anyway, or any other key to go back to the draft.
- If dev-null.sh refuses the commit under its rules, press O to read the rules in your browser, or esc to go back to the draft.
Delete a commit
Select one of your own commits and press D. ttyl asks you to confirm first.