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
| Command | Opens |
|---|---|
snag capture | the box, in the kind last used |
snag capture --note | the box, as a note |
snag capture --kind task | the box, as a task |
Bind these to keys; see Keyboard shortcuts.
Pressing the capture key again while the box is up:
| Box state | Plain snag capture | snag capture --note (or --kind) |
|---|---|---|
| not on screen | opens it | opens it as that kind |
| on screen, not focused | focuses it | switches to that kind, or focuses if it already is |
| on screen and focused | switches to the next kind | switches 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
| Kind | Enter does |
|---|---|
| task | files a new task, or logs time when the line has a ~duration |
| note | adds 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.
| Marker | Means | Example |
|---|---|---|
#name | project, matched fuzzily | #co finds Core |
@name | one or more labels from that project | @bug @ui |
p1 to p4 | priority, 1 highest | p2 |
+name | assign to a project member | +sam |
~duration | log time against an existing task instead of creating one | ~45m, ~1h30, ~90m |
| trailing date words | due date | tomorrow, friday, next week, 2026-11-02, 3pm |
\word | keep the word as literal text | \monday |
Examples:
Do packing dry run tomorrow
Fix invoice export #core @bug p2 +sam friday
Client call #acme ~45mHow ambiguous text is read
- A marker counts only at the start of a word.
issue#42,C++and email addresses stay as text.p1counts only as a whole word, sop1anningis text. - Trailing punctuation is ignored:
#core,works. - A sigil followed only by digits is text:
#42and+5stay in the task name. p0andp5are 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,wedand 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.
| Key | Does |
|---|---|
| Tab | takes the highlighted match |
| Up, Down | move through the matches |
| Enter | takes the highlighted project, label or person; for a date it files the line as typed |
| Esc | closes 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:
default_projectin 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.- 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.
- 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. ~durationlogs 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.
| Rule | Limit |
|---|---|
| files per capture | 5 |
| size per file | 10 MB |
| types on a task | png, jpg, jpeg, gif, webp, pdf, txt, csv, md, log, docx, xlsx, pptx |
| types on a note | images (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