Snag help › Snag for the desktop

Quick capture

The capture box is a small window for one line. Type, press Enter, and it is filed to your Snag account.

Opening it

CommandOpens
snag capturethe box, in the kind last used
snag capture --notethe box, as a note
snag capture --kind taskthe box, as a task

Bind these to keys; see Keyboard shortcuts.

Pressing the capture key again while the box is up:

Box statePlain snag capturesnag capture --note (or --kind)
not on screenopens itopens it as that kind
on screen, not focusedfocuses itswitches to that kind, or focuses if it already is
on screen and focusedswitches to the next kindswitches to that kind, or focuses if it already is

Switching kind keeps the typed text.

With snag run going, the daemon owns a single box. Without it, snag capture opens a standalone box, so capture still works with the daemon stopped.

Two kinds

KindEnter does
taskfiles a new task, or logs time when the line has a ~duration
noteadds the text to today's daily note, under its Inbox heading, with the capture time first

A note is plain text. It is not parsed for #project or any other marker. Notes need the knowledge:write ability on the token.

The task line

<text> [#project] [@label ...] [p1|p2|p3|p4] [+person] [~duration] [due date]

Markers can go in any order.

MarkerMeansExample
#nameproject, matched fuzzily#co finds Core
@nameone or more labels from that project@bug @ui
p1 to p4priority, 1 highestp2
+nameassign to a project member+sam
~durationlog time against an existing task instead of creating one~45m, ~1h30, ~90m
trailing date wordsdue datetomorrow, friday, next week, 2026-11-02, 3pm
\wordkeep the word as literal text\monday

Examples:

Do packing dry run tomorrow
Fix invoice export #core @bug p2 +sam friday
Client call #acme ~45m

How ambiguous text is read

  • A marker counts only at the start of a word. issue#42, C++ and email addresses stay as text. p1 counts only as a whole word, so p1anning is text.
  • Trailing punctuation is ignored: #core, works.
  • A sigil followed only by digits is text: #42 and +5 stay in the task name.
  • p0 and p5 are not priorities.
  • Repeated #project: the last one wins, so retyping a project corrects it. Repeated priority, person or duration: the first wins and the rest are struck through with a warning.
  • A date is read only from the end of the line, at most four words, and every word must be a date word. "ship the monday report" keeps its Monday.
  • A single word that is also an ordinary word is not taken as a date: may, march, sat, sun, wed and the other three-letter month abbreviations. Full month names work. A bare number is never a date.
  • A leading ! forces a phrase to be read as a date, for example !may 3.

The live preview

As the line is typed, each recognised marker is highlighted in its own colour. A marker that was recognised but could not be matched (#nosuchthing, an unknown label) is struck through and a warning says why. Nothing is dropped silently.

Tab completion

Typing a project, label, person or a date word at the end of the line opens a menu of matches.

KeyDoes
Tabtakes the highlighted match
Up, Downmove through the matches
Entertakes the highlighted project, label or person; for a date it files the line as typed
Esccloses the menu (a second Esc closes the box)

Only Tab completes a date, so "call tom" can still be filed as typed. A date is offered only at the end of the line and after at least three letters.

Where a task goes with no #project

In order:

  1. default_project in the config file, by name. See Settings. A name that matches no project is not guessed: the box shows no destination and refuses to file.
  2. The project your account marks as its default (My Stuff on a new account). If the account has none, Snag asks the server to create one when the box starts.
  3. On a server that marks no default, your only private project, if there is exactly one.

Filing

Enter sends the capture straight to the server. The box shows "filing...", then closes on success. On failure it stays open with the server's message and keeps the text.

  • A line that cannot be filed yet (for example no project) does nothing except show why.
  • Pressing Enter twice on the same line does not file it twice; the second press reports it as already filed.
  • If a label, priority or person on the line cannot be applied, the task is still filed and the box stays open to say what was left out, for example filed #14 in Core, without p1.
  • ~duration logs time against an existing task in the project whose name matches the text.

Capture needs a network connection. Unlike the timer, a capture is not queued offline.

Drafts

Esc closes the box and keeps the text for 60 seconds. Reopening within that time restores it. A draft is cleared once its capture is filed.

Attachments

Paste a file or screenshot (Ctrl+V) or drop a file on the box. Each file appears as a chip above the preview, with an x to remove it.

RuleLimit
files per capture5
size per file10 MB
types on a taskpng, jpg, jpeg, gif, webp, pdf, txt, csv, md, log, docx, xlsx, pptx
types on a noteimages (png, jpeg, gif, webp) and PDF

svg and html are always refused. A file that breaks a rule is refused when it is pasted, not when Enter is pressed. The server's own limits still apply and may be stricter.

On a task, the task is created first and then each file is uploaded to it. If some files fail, the ones that landed are removed from the box and the rest stay; Enter again sends only those.

On a note, the text and pictures go in one request. Files a note cannot hold are left out of it, kept in the box and named in the reply.

Pasted screenshots are named with the date and time, for example pasted-2026-10-09-143207.png.

Account status

The box shows the signed-in account, or "reading token" while the token is loaded, or "cannot file" with the reason. If the token lacks an ability the box needs, the banner names it before anything is typed.

Next: The timer