Skip to main content
pinbox pin writes a pin straight from your shell. Reach for it when you want to try pinbox before wiring up the toolbar, or when the thing that needs changing is in the code rather than on a page. Because there is no browser, a terminal pin records nothing about one — no viewport, no screenshot, no element rectangle. It carries only what is true: your text, whatever place you named, your git identity, and the branch and commit the hub stamps on every pin.

Usage

Arguments

string
required
What needs to change, in your words. Quote it — it is one argument, not several.

Options

path[:line]
Anchor to a source location (recorded repo-relative). The path must exist. It is stored relative to the repo root, so the anchor still resolves on another machine. :line is optional.
url
The web surface this pin is about. Must be an absolute http or https URL.
string
CSS selector on that surface. Requires --url — a selector with no page is not a target.
boolean
Machine output: the {"ok":true,"data":…} envelope.

Examples

The new pin id goes to stdout. The confirmation goes to stderr, so 2>/dev/null leaves you with just the id.
With no anchor at all — a note about the product, not about a place:
About a page you never opened:
With a selector on that page. The confirmation names the page, and the selector is stored on the pin:

JSON

data is the created pin. Note what is absent: no env.viewport, no target.rect. Absent, not zeroed.
To capture the id in a script, parse the envelope rather than the human line — a pipe switches the command to JSON mode anyway:

Errors

A --file that points at nothing is rejected before the pin is created. An agent sent to a path that does not exist is worse off than one with no anchor at all.

Next: read it back with pinbox show, find it again with pinbox list, or close it out with pinbox resolve.