FishladderHelp Center
IntegrationsAPI ReferenceCLIClaude (MCP)
Help CenterAPICLI Tool

Related Articles

API Keys

Generate and manage API keys for programmatic access to your team data.

URL Parameters

Bookmark and share filtered views using URL query parameters.

© 2026 Fishladder. All rights reserved.

Help CenterAPI DocsCLIClaude (MCP)Sign In

CLI Tool

The Fishladder CLI lets you manage tasks, CRM contacts and companies, feedback, and hiring from your terminal. Install it once, authenticate with your browser, and every command uses the same data as the web app.

This guide walks through the common workflows. For every command, argument and option, see the CLI command reference — it's generated from the CLI itself, so it always matches the latest version.

Installation

npm install -g fishladder

Requires Node.js 18 or later. The binary is fish.

Authentication

fish login       # Opens browser — authorises and stores token in system keychain
fish whoami      # Show current user and team
fish logout      # Remove stored credentials

Credentials are stored in your OS keychain (Keychain on macOS, libsecret on Linux, Credential Manager on Windows). No tokens are written to disk in plaintext.

The CLI authenticates via API key — the same keys you generate at Settings → API Keys. You can also set a key directly: FISHLADDER_API_KEY=fl_... fish tasks list.

Teams

A key belongs to exactly one team. This is the single most common source of confusion with the CLI — commands succeed, and act on a team you were not thinking of.

fish teams                  # List your teams, marking the active one
fish whoami                 # Which account, team and role this key is using
fish login --team <id>      # Mint a key for a specific team
fish teams use <id>         # Switch the active team

FISHLADDER_TEAM pins one terminal to a team without disturbing the others, which matters when two sessions are working on different teams:

FISHLADDER_TEAM=Fishladder fish tasks list

If a command returns nothing and you expected results, run fish whoamibefore assuming the data is missing — an empty answer from the wrong team looks exactly like an empty team.

Default project

Bind a directory to a Fishladder project so task commands don't need --project every time. This is the recommended setup when working in a code repository (including with AI agents like Claude Code):

fish project use "Alpha Launch"   # by name, unique fragment, or ID
fish project current              # show the default project in effect
fish project clear                # unbind

fish project use saves the project to a .fishladder.json in the current directory, found by walking up from wherever you run fish (like .git). It contains no secrets, so it is safe to commit to your repository. Once set, fish tasks list filters to that project (pass --all to see everything) and fish tasks create uses it automatically. Precedence: --project flag, then the FISHLADDER_PROJECT_ID environment variable, then .fishladder.json. Requires CLI v0.6.0 or later.

Roadmap projects

Manage roadmap cards and link them to tracker boards. A linked card shows task progress (done/total) in fish projects list. --tracker accepts a board name or ID; requires CLI v0.9.0 or later.

fish projects list                       # includes Tracker + Tasks (done/total) columns
fish projects create "Mobile app v2" --status planned --tracker "Mobile Board"
fish projects update <id> --tracker "Mobile Board"   # link (or relink)
fish projects update <id> --untrack                  # remove the link
fish tasks list --project <trackerProjectId>         # tasks behind a roadmap card

Tasks

All task commands work against the Tracker app. Use fish tasks projects first to get project IDs — or skip IDs entirely by setting a default project (above).

List projects and tasks

# List tracker projects (shows IDs you need for other commands)
fish tasks projects

# List all tasks
fish tasks list

# Tasks in a specific project
fish tasks list --project proj-abc123

# Machine-readable output
fish tasks list --project proj-abc123 --format json | jq '.[].title'

View a task

fish tasks show task-uuid-here

Displays full task details including description, assignee, priority, due date, and custom fields.

Create a task

# Minimal — title only (uses the default project if one is set)
fish tasks create "Write release notes"

# Full options — --section takes a column name or ID
fish tasks create "Write release notes" \
  --project proj-abc123 \
  --description "Cover all changes since v1.4" \
  --section "In Progress" \
  --priority high \
  --due 2026-05-15

# Smart syntax: @assignee !priority due:date
fish tasks create "Fix login bug" @sarah !high due:friday

# Assign to yourself, or by name / email / ID
fish tasks create "Review PR" --assign me
fish tasks create "Draft plan" --assign "Sarah Chen"

Team members

--assign and @name accept me, an email, a user ID, or a name (a first name works when only one person has it). Only active members can be assigned; an unknown name gets a clear error listing close matches.

fish members              # active members you can assign work to
fish members --all        # include deactivated people, marked inactive
fish members --format json

Update a task

# Change priority and due date
fish tasks update task-uuid \
  --priority high \
  --due 2026-05-15

# Reassign and retitle (--assign none unassigns)
fish tasks update task-uuid \
  --title "Updated title" \
  --assign [email protected]

# Move across the board by name — no IDs needed (CLI v0.8.0+)
fish tasks update task-uuid --section "Done" --status done

# All updatable fields:
# --title --description --section --priority --assign --due --status

Google Drive links

fish tasks drive list task-uuid                  # the task's Google Drive section
fish tasks drive add task-uuid https://docs.google.com/document/d/…/edit
fish tasks drive remove task-uuid link-id        # admin

Sections and statuses

Board columns (sections) and workflow statuses are per-project. List them to see what's available; --section/--status on task commands accept either the ID or the name (case-insensitive, unique fragments allowed). Requires CLI v0.8.0 or later.

fish sections                       # list board columns (uses default project)
fish sections create "Review" --order 3
fish statuses                       # list statuses — shows which is default and which mean done

Complete or delete a task

fish tasks complete task-uuid
fish tasks delete task-uuid

What's due

Everything due in a time frame: task due dates, roadmap project target dates, deal close dates, quote expirations, interviews, questionnaires and audit milestones. Finished work is left out unless you pass --completed. Needs the Calendar module.

fish due                                   # everything due in the next 14 days
fish due --days 30 --project Acme          # Acme's tasks and target dates (partial names match)
fish due --project Acme,Globex             # several projects at once
fish due --type deals,quotes --start 2026-10-01 --end 2026-10-31
fish due --days -7 --completed             # what was due last week, finished or not
fish calendar --format json                # full command name; JSON for scripts

CRM

Full CRUD for companies, contacts, deals, pipelines, and activities.

Companies

fish crm companies                        # List all companies
fish crm companies show company-id        # View a company
fish crm companies create                 # Interactive prompt
fish crm companies update company-id      # Interactive prompt, updates only changed fields
fish crm companies delete company-id      # Delete (prompts for confirmation)

Contacts

fish crm contacts                         # List all contacts
fish crm contacts show contact-id         # View a contact
fish crm contacts create                  # Interactive prompt
fish crm contacts update contact-id       # Interactive prompt
fish crm contacts delete contact-id

Deals, pipelines, and activities

fish crm deals          # List deals
fish crm pipelines      # List pipeline stages
fish crm activities     # List recent activities

The fish crm commands work on Fishladder's built-in CRM. A team that connects HubSpot uses HubSpot instead, and these commands are turned off.

HubSpot links

With HubSpot connected, link HubSpot companies and contacts to tasks, roadmap projects and River pages. Nothing is written to HubSpot. Requires CLI v0.19.0 or later.

fish hubspot search "acme"                     # companies (--contacts for people)
fish hubspot link task task-uuid 123456        # link a company; add --contact for a contact
fish hubspot link page 69af0cc3 123456         # pages take the short ID or a title
fish hubspot links project project-id          # what's linked, with link IDs
fish hubspot unlink task task-uuid link-id

River wiki

Read wiki structure, create and edit pages, and link pages to other Fishladder entities. Content is markdown in both directions — the server converts to the editor's native format, so pages created from the CLI render normally in the app. Requires CLI v0.7.0 or later.

fish river spaces                          # list wiki spaces
fish river pages --space <idOrName>        # page tree
fish river show <page>                     # page as markdown — full ID, the 8-char ID from river pages, or title

# Create a page from a markdown file (or --content, or stdin).
# --space and --parent take a name or an ID; the new page's location is printed.
fish river create "API Guide" --space Engineering --parent Runbooks --file ./guide.md
# Link a page to a task so it shows on the task
fish river link <pageId> tracker_task <taskId>

# Replace content — the previous version is snapshotted
fish river update <page> --file ./guide.md --summary "refreshed examples"

# Move a page — spaces and parents by name, ID, or ID prefix (v0.15.0+)
fish river move <page> --space "Customer Success"            # top level of a space
fish river move <page> --space Runbooks --create-space        # create the space if missing
fish river move <page> --parent "Enrichment Sources"         # nest under a page

# Link a page to an entity (tracker_task, crm_deal, roadmap_project, ...)
fish river link <pageId> tracker_task <taskId>

Labeler work tracking

For third-party labeling platforms. Runs on a team API key; the labeler is named per item by email or user ID. A task push with the same source + externalId updates the existing task instead of duplicating it, so a batch can be re-sent safely. Requires CLI v0.16.0 or later.

fish labeler projects                               # projects with labelers and managers
fish labeler labelers                               # labeler-role members
fish labeler tasks --project <id> --status done     # list tasks
echo '[{"externalId":"b7/12","title":"Label 40 frames","quantity":40,"status":"done"}]' \
  | fish labeler tasks push --project <id> --labeler [email protected]
fish labeler tasks update <taskId> --status rejected
fish labeler log-time  --project <id> --labeler [email protected] --minutes 90
fish labeler log-units --project <id> --labeler [email protected] --quantity 120

The same operations are available directly: GET/POST /api/v1/labeler/tasks, PATCH /api/v1/labeler/tasks/:id, POST /api/v1/labeler/time, POST /api/v1/labeler/units, GET /api/v1/labeler/projects, GET /api/v1/labeler/labelers. Webhook events: labeler.task.created, labeler.task.updated, labeler.task.completed.

Canvases

Publish self-contained HTML documents that Fishladder hosts and renders — see Canvases. Create and update take the document from --file, --html, or stdin. Requires CLI v0.14.0 or later.

fish canvas                                # list canvases
cat page.html | fish canvas create "Q3 dashboard"
fish canvas update <id> --file page.html   # previous version kept
fish canvas show <id> --html > page.html   # export the raw document
fish canvas versions <id>                  # past documents, newest first
fish canvas restore <id> <versionId>

Feedback

fish feedback list                        # List feedback entries
fish feedback list --format json          # JSON output for scripting
fish feedback show feedback-id            # View a single entry

Hiring

fish hiring             # List ATS jobs and recent applications

Everything else

The sections above cover the commands used most. The CLI also has goals, initiatives, rows, cpq, custom-fields, webhooks and ai. Each follows the same shape — run fish <command> --help to see its subcommands.

Output formats

Most list commands accept --format json to output newline-delimited JSON, useful for piping to jq or other tools. The default is a human-readable table.

# Example: get task IDs for a project
fish tasks list --project proj-abc123 --format json | jq -r '.[].id'

REST API

The CLI uses the same REST API available for direct integration. See API Keys for setup instructions.