npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

attio-cli

v0.3.1

Published

CLI for the Attio CRM API. Built for scripts, agents, and humans who prefer terminals.

Downloads

570

Readme

attio-cli

CLI for the Attio CRM API. Built for scripts, agents, and humans who prefer terminals.

Install

npm install -g attio-cli

Quick Start

attio init          # guided setup — paste your API key, done
attio whoami        # verify connection
attio people list --limit 5

You'll need an API key from Attio Developer Settings. attio init walks you through the rest.

Examples

# List companies, filter by name
attio companies list --filter 'name~Acme'

# Search for a person
attio people search "Jane"

# Create a company and get back just the ID
attio companies create --set name="Acme" --set domains='["acme.com"]' -q

# Get a record as JSON and pipe to jq
attio companies list --json | jq '.[].values.name[0].value'

# Export all companies to CSV
attio companies list --all --csv > companies.csv

See Scripting Examples for more advanced workflows (bulk updates, chaining commands, etc.).

For non-interactive environments (CI, scripts), use any of:

attio init --api-key <key>           # validates and saves
export ATTIO_API_KEY=<key>           # env var (takes precedence)
attio config set api-key <key>       # direct config write

Agent Setup

To let AI agents (Claude, etc.) discover this CLI, append the auto-generated snippet to your project's CLAUDE.md:

attio config claude-md >> CLAUDE.md

Command Reference

| Command | Description | |---------|-------------| | attio init | Interactive setup wizard — connect to your Attio workspace | | attio whoami | Show current workspace and user info | | Objects | | | attio objects list | List all objects in the workspace | | attio objects get <slug> | Get details for a specific object | | Attributes | | | attio attributes list <object> | List attributes for an object | | Records | | | attio records list <object> | List records for an object | | attio records get <object> <id> | Get a specific record | | attio records create <object> | Create a new record | | attio records update <object> <id> | Update an existing record | | attio records delete <object> <id> | Delete a record | | attio records assert <object> | Create or update a record by matching attribute | | attio records upsert <object> | Alias for records assert | | attio records search <query> | Full-text search across one or more objects | | attio records values <object> <id> | List current and historic attribute values | | attio records entries <object> <id> | List list entries where this record is the parent | | People | | | attio people list | List people | | attio people get <id> | Get a person by ID | | attio people create | Create a person | | attio people update <id> | Update a person | | attio people delete <id> | Delete a person | | attio people assert | Assert (upsert) a person by matching attribute | | attio people search <query> | Search people by name or email | | Companies | | | attio companies list | List companies | | attio companies get <id> | Get a company by ID | | attio companies create | Create a company | | attio companies update <id> | Update a company | | attio companies delete <id> | Delete a company | | attio companies assert | Assert (upsert) a company by matching attribute | | attio companies search <query> | Search companies by name or domain | | Deals | | | attio deals list | List deals | | attio deals get <id> | Get a deal by ID | | attio deals create | Create a deal | | attio deals update <id> | Update a deal | | attio deals delete <id> | Delete a deal | | attio deals assert | Assert (upsert) a deal by matching attribute | | attio deals search <query> | Search deals | | Users | | | attio users list | List users | | attio users get <id> | Get a user by ID | | attio users create | Create a user | | attio users update <id> | Update a user | | attio users delete <id> | Delete a user | | attio users assert | Assert (upsert) a user by matching attribute | | attio users search <query> | Search users | | Workspaces (Standard Object) | | | attio workspaces list | List workspace records | | attio workspaces get <id> | Get a workspace record by ID | | attio workspaces create | Create a workspace record | | attio workspaces update <id> | Update a workspace record | | attio workspaces delete <id> | Delete a workspace record | | attio workspaces assert | Assert (upsert) a workspace record by matching attribute | | attio workspaces search <query> | Search workspace records | | Lists | | | attio lists list | List all lists | | attio lists get <id> | Get a specific list | | Entries | | | attio entries list <list> | List entries in a list | | attio entries get <list> <id> | Get a specific entry | | attio entries create <list> | Add an entry to a list | | attio entries assert <list> | Assert (upsert) an entry by parent record | | attio entries update <list> <id> | Update a list entry | | attio entries delete <list> <id> | Remove an entry from a list | | Tasks | | | attio tasks list | List tasks | | attio tasks get <id> | Get a specific task | | attio tasks create | Create a task | | attio tasks update <id> | Update a task | | attio tasks delete <id> | Delete a task | | Notes | | | attio notes list | List notes | | attio notes get <id> | Get a specific note | | attio notes create | Create a note | | attio notes delete <id> | Delete a note | | Comments | | | attio comments list | List comments on a thread | | attio comments create | Create a comment | | attio comments delete <id> | Delete a comment | | Threads | | | attio threads list | List threaded conversations | | attio threads get <id> | Get a thread by ID | | Meetings (Beta) | | | attio meetings list | List meetings (beta endpoint) | | attio meetings get <id> | Get a meeting (beta endpoint) | | Recordings (Beta) | | | attio recordings list --meeting <id> | List call recordings for a meeting | | attio recordings get <id> --meeting <id> | Get a call recording, optionally with transcript | | Webhooks | | | attio webhooks events | List supported webhook event types | | attio webhooks list | List webhooks | | attio webhooks get <id> | Get a webhook by ID | | attio webhooks create | Create a webhook | | attio webhooks update <id> | Update a webhook | | attio webhooks delete <id> | Delete a webhook | | Members | | | attio members list | List workspace members | | Config | | | attio config set <key> <value> | Set a config value | | attio config get <key> | Get a config value | | attio config path | Print the config file path | | Open | | | attio open | Open the Attio web app in your browser |

Global Flags

| Flag | Description | |------|-------------| | --api-key <key> | Override the API key for this request | | --json | Force JSON output | | --table | Force table output | | --csv | Force CSV output | | -q, --quiet | Only output IDs (one per line) | | --no-color | Disable colored output | | --debug | Print request/response details to stderr |

Output format is auto-detected: table when stdout is a TTY (interactive terminal), JSON when piped.

Filtering

Use --filter to narrow results. The syntax is attribute operator value.

| Operator | Meaning | Example | |----------|---------|---------| | = | Equals | --filter 'name=Acme' | | != | Not equals | --filter 'status!=closed' | | ~ | Contains | --filter 'name~corp' | | !~ | Does not contain | --filter 'name!~test' | | ^ | Starts with | --filter 'name^Acme' | | > | Greater than | --filter 'revenue>1000000' | | >= | Greater than or equal | --filter 'created_at>=2024-01-01' | | < | Less than | --filter 'revenue<500000' | | <= | Less than or equal | --filter 'created_at<=2024-12-31' | | ? | Is set / not empty | --filter 'email?' |

Multiple filters are ANDed together:

attio records list companies --filter 'name~Acme' --filter 'revenue>=1000000'

Sorting

Use --sort with the format attribute:direction:

attio records list companies --sort name:asc
attio people list --sort name.last_name:desc

Scripting Examples

# Create a company and immediately add a note
ID=$(attio records create companies --set name="Acme" --set domains='["acme.com"]' -q)
attio notes create --object companies --record $ID --title "New lead" --content "From website"

# Export all companies to JSON
attio records list companies --all --json > companies.json

# Pipe to jq
attio records list companies --all --json | jq -r '.[].values.name[0].value'
# Bulk update from a CSV
while IFS=, read -r id status; do
  attio records update companies "$id" --set "status=$status"
done < updates.csv
# Find and delete test records
attio records list companies --filter 'name^TEST_' --json -q | \
  xargs -I{} attio records delete companies {}

Why CLI over MCP for Agents

While MCP tools work well, a CLI is often the better choice for AI agent workflows:

  • Simpler — a single bash command vs. structured tool-call JSON
  • Self-documentingattio --help and attio companies --help let agents discover capabilities without external docs
  • LLM-native — language models are heavily RL'd on command-line usage; they generate CLI invocations more reliably than tool-call schemas
  • Composable — pipe attio output into jq, grep, xargs, or any other Unix tool, building complex workflows from simple parts
  • Cheaper — MCP servers load all tool schemas as input tokens on every LLM call (14,521 tokens for Attio's 30 tools), even if only one tool is used. A CLI just needs the Bash tool schema (~200 tokens). See benchmarks/REPORT.md for detailed cost comparisons.

Contributing

  1. Fork the repo
  2. Create a feature branch (git checkout -b feature/my-feature)
  3. Make your changes
  4. Run tests (npm test)
  5. Submit a pull request

License

MIT -- see LICENSE for details.