Skip to main content

CLI Tool

Nico provides a zero-dependency Python 3 command-line tool that any AI agent can use to search Nico’s job index and manage your applications.

Prerequisites

  • Python 3 (no additional packages needed)
  • A Nico API key

Setup

1. Get the CLI

The CLI is included in the nico-jobagent/nico-skills repository:
The CLI script is at nico-skills/skills/nico-jobagent/scripts/nico_client.py.

2. Configure

Quick setup (recommended). Run the interactive setup.sh from the repository root:
It prompts for your NICO_API_KEY (and, optionally, NICO_API_URL), detects installed AI agents (Claude Code, OpenClaw, Cursor, GitHub Copilot), symlinks the skill for each, and writes the environment variables to your shell profile. Open a new terminal (or source your profile) afterward so the variables take effect. Manual setup. If you’d rather configure it yourself, set the environment variables:

Command groups

Commands come in two groups: All commands print JSON to stdout. Run python3 nico_client.py --help for the full list. Search Nico’s job postings index. Pass employer and city names — the CLI resolves them for you. --country is required. Results are compact (no url or description — use posting get for those) and paged.
Don’t combine --region/--city with --work-mode remote. Remote postings aren’t pinned to a location, so a geographic filter plus remote almost always returns nothing. Search remote roles by country, and use --region/--city for on-site or hybrid roles.
Output: JSON with job_postings (compact — no url/description), count, and a pagination block (current_page, total_pages, total_count, per_page). Errors are returned as { "error": "…" } — e.g. unknown/ambiguous employer, unknown location, country_code is required, or job search not enabled for the account.

posting get

Fetch one posting’s full detail by the id from a posting search result. Adds the application url and the full description (the two fields the search list omits).
Output: JSON with the full posting, including url and description. Returns { "error": "Job posting not found" } for an unknown id.

application — job application management

Check whether a job is already in your applications (duplicate check by URL, or search by company name).
*At least one of --url or --company-name is required. Output: For a URL search, { "exists": true|false, "count": N, "job_applications": [...] }.

application list

List your job applications.
Output: JSON with job_applications and a pagination block.

application get

Fetch one application’s full detail, including its notes and interviews.
Output: JSON with the full application, plus notes and interviews arrays.

application create

Create a new proposed job application.
Output: JSON with the created application. Status is always proposed.
Created jobs require your approval before they move forward. You’ll see them on your kanban board in the Draft column.

application add-note

Add a note to a job application.

application parse-url

Parse a job posting URL to extract structured data you can pass to application create.
Output: JSON with parsed job details (title, company, location, work mode, salary).

Authentication

The CLI sends your API key as a Bearer token in the Authorization header:

Typical AI agent workflow

Search Nico’s index first — it already holds hundreds of thousands of postings — then track the interesting ones: