skyboard-cli
v0.3.1
Published
CLI for Skyboard – a collaborative kanban board on AT Protocol
Readme
Skyboard CLI (sb)
A command-line interface for Skyboard, a collaborative kanban board built on AT Protocol. Manage boards and tasks from your terminal without opening a browser.
Install
npm install -g skyboard-cliQuick start
sb login alice.bsky.social # opens browser for AT Protocol OAuth
sb boards # list your boards
sb use "Sprint Board" # set default board
sb cards # view all cards
sb new "Fix login bug" # create a card
sb mv 3labc12 done # move it to DoneAuth
The CLI uses AT Protocol OAuth with a loopback redirect. Running sb login starts a local server, opens your browser for authorization, and stores the session in ~/.config/skyboard/. Tokens auto-refresh on subsequent commands.
sb login alice.bsky.social # opens browser for OAuth
sb whoami # show handle, DID, and PDS endpoint
sb logout # clear stored sessionCommands
Board navigation
| Command | Description |
| ---------------- | ----------------------------------------- |
| sb boards | List all boards (owned + joined) |
| sb use <board> | Set default board for subsequent commands |
| sb add <link> | Join a board by AT URI or web URL |
| sb cols | Show columns with task counts |
sb use accepts a board name (fuzzy match), rkey, AT URI, or web URL.
Card operations
| Command | Description |
| ------------------------- | ---------------------------------------- |
| sb cards | List cards grouped by column |
| sb new <title> | Create a new card |
| sb show <ref> | Show card details, comments, and history |
| sb mv <ref> <column> | Move card to a different column |
| sb edit <ref> | Edit card fields |
| sb comment <ref> <text> | Add a comment |
| sb rm <ref> | Delete a card (owner only) |
Card references
Cards are referenced by TID rkey prefix, similar to git short hashes. sb cards shows 7-character truncated rkeys. A minimum of 4 characters is required; if the prefix is ambiguous, the CLI lists the matches.
sb cards
To Do
3labc12 Fix login bug
3labc13 Update docs
sb show 3labc12 # exact prefix
sb mv 3lab done # shorter prefix, if unambiguousColumn matching
Columns can be referenced by:
- Exact name (case-insensitive):
"In Progress" - Name prefix:
inmatchesIn Progress - 1-based index:
2(fromsb colsoutput)
Filters
sb cards -c "In Progress" # filter by column
sb cards -l "bug" # filter by label
sb cards -s "login" # search title and descriptionCreating and editing
sb new "Fix login bug" # create in first column
sb new "Update docs" -c done -d "Add examples" # specify column and description
sb edit 3lab -t "New title" # edit title
sb edit 3lab -d "New description" # edit description
sb edit 3lab -l bug -l urgent # set labelsJSON output
All commands support --json for machine-readable output:
sb cards --json | jq '.[].cards[].title'
sb boards --json
sb whoami --jsonAutonomous dev loop (sb ralph)
sb ralph runs Claude Code in an autonomous loop driven by a Skyboard kanban board. Each iteration picks a task, does one unit of work, moves the card, and writes a status file. The loop continues until all tasks are done, all remaining tasks are blocked, or the iteration limit is reached.
Setup
sb ralph init --board "Sprint Board" # creates .skyboard-ralph/ config + protocol
sb ralph start # run the loopCommands
| Command | Description |
| ----------------- | ----------------------------------------------------------- |
| sb ralph init | Set up .skyboard-ralph/ config and generate protocol file |
| sb ralph start | Run the autonomous dev loop |
| sb ralph status | Show current loop state (iteration count, last status) |
sb ralph init options
| Option | Description |
| ---------------------- | ----------------------------------------------------------------------- |
| --board <ref> | Board reference (rkey, AT URI, URL, name). Falls back to default board. |
| --max-iterations <n> | Default max iterations (default: 50) |
Creates files under .skyboard-ralph/:
config.json— Config with board ref, iteration limit, and file pathsprotocol.md— The agent protocol template. Edit this to customize agent behavior.
sb ralph start options
| Option | Description |
| ---------------------- | ----------------------------------------------------------------------------------------- |
| --max-iterations <n> | Override the max iterations from config |
| --interactive | Require permission approval for each tool use (disables --dangerously-skip-permissions) |
By default, start runs with --dangerously-skip-permissions so the agent can work autonomously. Use --interactive for supervised runs.
Output streams to both stdout and .skyboard-ralph/loop.log. Press Ctrl-C to stop gracefully — the current iteration finishes before exiting.
sb ralph status options
| Option | Description |
| -------- | ---------------------------- |
| --json | Machine-readable JSON output |
Protocol customization
The generated .skyboard-ralph/protocol.md contains the full agent protocol with {{placeholder}} markers that are interpolated at runtime:
{{iteration}}— Current iteration number{{maxIterations}}— Total iteration limit{{boardDid}}— Board owner DID{{boardRkey}}— Board record key
Edit the protocol file to change how the agent picks tasks, what transitions it makes, or any other behavior.
Monitoring
- Skyboard web UI — Watch cards move across columns in real time
- Card comments — The agent logs what it did each iteration
- Log file —
.skyboard-ralph/loop.loghas full output from every iteration - Status —
sb ralph statusshows iteration count and last status
Claude Code plugin
The sb CLI includes a Claude Code plugin so you can manage boards directly from a Claude Code conversation using /sb:cards, /sb:new, /sb:mv, etc.
Install the plugin
# Add the marketplace (once)
/plugin marketplace add /path/to/skyboard
# Install the plugin
/plugin install sb@skyboardOr from the terminal:
claude plugin marketplace add /path/to/skyboard
claude plugin install sb@skyboard --scope userRestart Claude Code after installing. All 15 sb commands are available as skills (e.g. /sb:status, /sb:cards, /sb:new).
How it works
The CLI authenticates via OAuth and talks directly to AT Protocol PDS endpoints — there is no local database. Each command fetches fresh data from the board owner's PDS and all trusted participants, runs the same materializeTasks() per-field LWW merge logic as the web app, and displays the result.
Write commands (new, mv, edit, comment) create AT Protocol records in your PDS. The web app picks these up in real time via Jetstream, and other CLI users see them on their next command.
Config
Session and config are stored in ~/.config/skyboard/:
| File | Purpose |
| -------------- | ---------------------------------------- |
| session.json | Current user (DID, handle, PDS endpoint) |
| auth/ | OAuth session tokens (mode 0600) |
| config.json | Default board and known boards list |
License
GPL-3.0-only
