NeetoDesk CLI

Work with your tickets from your terminal, your scripts, and your coding agent. Open source, and it runs on macOS, Linux and Windows.

Install the NeetoDesk CLI

macOS with Homebrew:

brew install neetozone/tap/neetodesk

macOS or Linux:

curl -fsSL https://neetodesk.com/cli/install.sh | sh

Windows (PowerShell):

irm https://neetodesk.com/cli/install.ps1 | iex

Next, sign in using your browser. No API key is required:

neetodesk login --subdomain your-workspace

To configure your AI coding assistant to use the CLI, run the appropriate command from your project folder:

neetodesk setup claude      # Claude Code
neetodesk setup cursor      # Cursor
neetodesk setup codex       # Codex
neetodesk setup copilot     # GitHub Copilot
neetodesk setup gemini      # Antigravity CLI and Gemini CLI
neetodesk setup windsurf    # Devin (formerly Windsurf)

Every command supports --json for scripting and --toon for compact, token-efficient output when working with AI assistants. See the NeetoDesk CLI reference for every command.

Automate with the CLI

Why use a CLI when MCP exists? Because some tasks don't need AI. You can run them on a schedule using the NeetoDesk CLI and familiar tools like jq, curl, and your cloud CLI. No AI subscription, no model usage costs, and consistent results every time.

Post the open queue every morning

Save this as ~/open-queue.sh and make it executable:

#!/bin/sh
neetodesk tickets list --status open --page-size 1 --json \
  | jq '{text:
      "Open tickets this morning: \(.pagination.total_records)"}' \
  | curl -s -X POST -H "Content-Type: application/json" \
      -d @- "$SLACK_WEBHOOK_URL"

Then add it to your crontab to run every weekday at 9am:

0 9 * * 1-5 ~/open-queue.sh

Alert on unassigned tickets

Every hour, post a list of open tickets that haven't been assigned.

neetodesk tickets list --status open --unassigned \
  --page-size 100 --json \
  | jq -r '.data[] | "#\(.number) \(.subject)"' \
  | while read -r line; do
      curl -s -X POST -H "Content-Type: application/json" \
        -d "$(jq -n --arg text "Unassigned: $line" '{text: $text}')" \
        "$SLACK_WEBHOOK_URL"
    done

Create tickets from monitoring alerts

Turn an alert into a ticket straight from your alerting script.

neetodesk tickets create \
  --email alerts@example.com \
  --subject "Checkout error rate above 5%" \
  --description \
    "<p>Error rate crossed 5% at $(date -u +%H:%M) UTC.</p>" \
  --priority high

Back up every ticket nightly

page=1
while :; do
  out=$(neetodesk tickets list \
    --page "$page" --page-size 100 --json) || exit 1
  echo "$out" | jq -c '.data[]'
  total=$(echo "$out" | jq '.pagination.total_pages')
  [ "$total" -le "$page" ] && break
  page=$((page + 1))
done > tickets.jsonl

aws s3 cp tickets.jsonl \
  "s3://your-backup-bucket/neetodesk/$(date +%F).jsonl"

Export tickets to a spreadsheet

page=1
while :; do
  out=$(neetodesk tickets list \
    --page "$page" --page-size 100 --json) || exit 1
  echo "$out" | jq -r '.data[]
    | [.number, .subject, .status, .priority,
       .customer.email, .assignee.email, .created_at]
    | @csv'
  total=$(echo "$out" | jq '.pagination.total_pages')
  [ "$total" -le "$page" ] && break
  page=$((page + 1))
done > tickets.csv

Save the weekly agent report

Every Monday, save last week's agent performance report and compare it with the previous week.

neetodesk reports agents --range-type last_week --json \
  > "agent-report-$(date +%F).json"

Close a batch of tickets

After a fix ships, close every ticket you've linked to it.

for ticket in 1042 1047 1051; do
  neetodesk tickets update "$ticket" --status closed
done

Set up a new agent

neetodesk team-members create --email priya@example.com \
  --role Agent --send-invitation-email

Let a coding agent build it for you

You don't have to write these scripts yourself. Claude Code, Codex, and other coding agents can create automations using the open-source NeetoDesk CLI. Run neetodesk setup claude (or setup codex, setup cursor) once, then ask:

Every weekday at 9 AM, use the NeetoDesk CLI to post a summary of open and unassigned tickets to our Slack channel. Write the script, test it, and set up the cron job.

Using the NeetoDesk CLI, write a script that exports last month's tickets to CSV with the customer and assignee for each one.

You describe what you need in plain language and get a script you can review, run, and commit.

Terminal recording of Claude Code. It reads open tickets with the neetodesk CLI, writes a script that posts a summary of open and unassigned tickets to Slack, tests it against a local test server, and adds a cron job that runs at 9 AM on weekdays.
Claude Code builds the 9 AM ticket summary with the NeetoDesk CLI, tests it, and schedules it with cron.

When to use the CLI and when to use MCP

Both work with the same tickets, customers, and reports. The right choice depends on how you want to work.

Use MCP when:

  • The context is already in your conversation. Turn a Slack thread or email into a ticket without retyping anything.
  • The work needs reading and judgment. Summarizing a ticket, triaging the queue, or drafting a reply means understanding the conversation.
  • You need answers from your support data. Ask questions like "Which agent has the fastest response time this month?" and get an explanation.
  • You don't use a terminal. NeetoDesk hosts the server. There's nothing to install.

Use the CLI when:

  • You don't need AI. Run commands from cron jobs or CI pipelines without an AI model or model usage costs.
  • The output feeds another program. The CLI prints raw JSON for jq, a spreadsheet, a Slack webhook, or your own script.
  • You're working through thousands of tickets. The CLI pages through everything unattended.
  • You need repeatable results. Run the same commands consistently, without relying on an AI model to interpret instructions.

You can also use both. Run neetodesk setup claude to let your AI assistant use the CLI. You can then describe what you need in plain language and get commands you can review and reuse.

Open source

The NeetoDesk CLI is open source. You can inspect the code on GitHub, see how it communicates with NeetoDesk, and customize it for your workflows. It's written in Go and runs on macOS, Linux, and Windows.

The CLI is built on neeto-cli-commons, the shared foundation for all Neeto CLI tools. Commands and conventions stay consistent across Neeto products.

Found a bug or need a new command? Open an issue or submit a pull request.

Frequently asked questions

Can I automate NeetoDesk without using AI?

Yes. The NeetoDesk CLI works directly from your terminal, shell scripts, cron jobs, and CI workflows. You don't need Claude, ChatGPT, or any other AI service to automate tasks.

Is the NeetoDesk CLI open source?

Yes. The NeetoDesk CLI is open source and available on GitHub. You can inspect the code, modify it, and contribute improvements.

Ready to elevate your customer support?

Let's get started now.