AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Inkbox Cli

skill-inkbox-ai-inkbox-inkbox-cli · by inkbox-ai

Use when running or writing shell commands with the Inkbox CLI (`inkbox` / `@inkbox/cli`) for identities, email, phone, text/SMS, iMessage, contacts, notes, contact rules, vault, mailbox, phone number, webhook, or signup workflows.

No reviews yet
0 installs
2 views
0.0% view→install

Install

$ agentstack add skill-inkbox-ai-inkbox-inkbox-cli

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access Used
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-inkbox-ai-inkbox-inkbox-cli)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
1mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Inkbox Cli? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Inkbox CLI

Command-line interface for the Inkbox API — identities, email, phone, text/SMS, encrypted vault, mailboxes, phone numbers, signing keys, and webhook utilities.

Auth & Runtime

Set credentials via env vars or global flags:

export INKBOX_API_KEY="ApiKey_..."
export INKBOX_VAULT_KEY="my-vault-key"   # only needed for vault decrypt/create flows

Global options:

--api-key       Inkbox API key (or set INKBOX_API_KEY)
--vault-key     Vault key for decrypt operations (or set INKBOX_VAULT_KEY)
--base-url      Override API base URL
--json               Output as JSON instead of formatted tables

If INKBOX_API_KEY is missing and --api-key is not passed, the CLI exits with an error.

Prefer --json when the result will be parsed or fed into another tool. Use the default table/record output when the user wants a quick human-readable summary.

Install & Local Repo Usage

Published package:

npm install -g @inkbox/cli

Or run without a global install:

npx @inkbox/cli 

Requires Node.js >= 22.

Inside this repository, prefer running the local source instead of assuming a global install:

npm --prefix cli run dev -- 

Examples:

npm --prefix cli run dev -- --json identity list
npm --prefix cli run dev -- email list -i support-bot --limit 10

High-Risk Operations

These commands can send real traffic or mutate real resources. Confirm with the user before running them:

  • signup create
  • email send
  • text send
  • phone call
  • identity delete
  • email delete
  • email delete-thread
  • vault delete
  • identity update --mail-filter-mode ... / --phone-filter-mode ... (admin-only; flips allow/block semantics for that identity's channel)
  • mailbox update --filter-mode ... (DEPRECATED channel path; admin-only)
  • number release
  • number update --filter-mode ... (DEPRECATED channel path; admin-only)
  • identity signing-key rotate (rotates that identity's webhook signing key)
  • signing-key create (DEPRECATED org-level path)

contacts delete, notes delete, identity mail-rules delete, identity phone-rules delete, mailbox rules delete (deprecated), number rules delete (deprecated) affect downstream filtering and access — confirm intent before running.

Also confirm before creating or rotating secrets if the values were not explicitly provided by the user.

Agent Signup

For the full self-signup flow and API semantics, read the shared reference:

> See: skills/inkbox-agent-self-signup/SKILL.md

CLI commands:

inkbox signup create
inkbox signup verify --code 
inkbox signup resend-verification
inkbox signup status

signup create is the main command that does not require an API key. The later signup commands require the signup-issued API key to be passed back via --api-key or exported as INKBOX_API_KEY; the CLI does not persist it automatically.

Identities

inkbox identity list
inkbox identity get 
inkbox identity create  [--display-name ] [--description ]
                                 [--email-local-part ]
                                 [--sending-domain  | --platform-domain]
                                 [--tls-mode edge|passthrough]
inkbox identity delete 
inkbox identity update  [--new-handle ] [--display-name ]
                                 [--description  | --clear-description]
                                 [--mail-filter-mode whitelist|blacklist]
                                 [--phone-filter-mode whitelist|blacklist]
                                 [--status active|paused]
inkbox identity refresh 

--mail-filter-mode / --phone-filter-mode set the identity's contact-rule mode (admin-only). Unlike the deprecated mailbox update --filter-mode / number update --filter-mode, the identity path does not print a change notice. --phone-filter-mode requires the identity to have a phone number (else a 422).

identity create atomically provisions the mailbox AND the tunnel. The JSON output includes both (mailbox, tunnel.publicHost, tunnel.tlsMode).

--sending-domain binds the agent's mailbox to a verified custom domain (bare name, e.g. mail.acme.com); --platform-domain forces the platform sending domain; the two are mutually exclusive. --tls-mode defaults to edge and is fixed at create time (changing it later requires deleting the identity + recreating).

For identity update, --description "" and --clear-description both send explicit null to clear; omitting both leaves the field untouched.

Notes:

  • identity delete cascades to the linked mailbox + tunnel and revokes any identity-scoped API keys.
  • identity get and identity refresh return mailbox, phone-number, and tunnel assignments when present.
  • Most email, phone, and text commands require -i, --identity .

Identity Visibility

Controls which other agent identities can see an identity in API responses. Humans and admins always see every identity.

inkbox identity access list 
inkbox identity access grant  
inkbox identity access grant-everyone 
inkbox identity access revoke  

list shows either a single wildcard row (viewerIdentityId empty → every active identity sees it), explicit per-viewer rows, or nothing (no agent can see it). grant adds one viewer; grant-everyone resets to the org-wide wildcard; revoke drops one viewer. Viewer identities are passed as handles and resolved to UUIDs automatically. Unrelated to identity revoke-access below, which manages vault-secret access.

Identity-Scoped Secrets

These require a vault key:

inkbox identity create-secret  --name  --type  ...
inkbox identity get-secret  
inkbox identity delete-secret  
inkbox identity revoke-access  
inkbox identity set-totp   --uri 
inkbox identity remove-totp  
inkbox identity totp-code  

Secret types:

login, api_key, ssh_key, key_pair, other

Identity Contact Rules

Allow/block lists are scoped to the agent identity (keyed by handle), combined with the identity's mail/phone filter mode (inkbox identity update --mail-filter-mode / --phone-filter-mode). Mail matches by exact email or domain; phone matches by exact E.164 number.

# Mail rules
inkbox identity mail-rules list  [--action allow|block] [--match-type exact_email|domain] [--limit ] [--offset ]
inkbox identity mail-rules list-all [--agent-identity-id ] [--action …] [--match-type …]   # admin-only, org-wide
inkbox identity mail-rules get  
inkbox identity mail-rules create  --action allow|block --match-type exact_email|domain --match-target 
inkbox identity mail-rules update   [--action allow|block] [--status active|paused]   # admin-only
inkbox identity mail-rules delete                                                      # admin-only

# Phone rules — require the identity to have a phone number; only exact_number is supported.
inkbox identity phone-rules list  [--action allow|block] [--match-type exact_number] [--limit ] [--offset ]
inkbox identity phone-rules list-all [--agent-identity-id ] [--action …]   # admin-only, org-wide
inkbox identity phone-rules get  
inkbox identity phone-rules create  --action allow|block --match-target  [--match-type exact_number]
inkbox identity phone-rules update   [--action allow|block] [--status active|paused]   # admin-only
inkbox identity phone-rules delete                                                      # admin-only

New rules always start active; use update --status paused to pause one. These replace the deprecated inkbox mailbox rules / inkbox number rules groups below.

Identity Signing Key

Each identity has its own webhook signing key:

inkbox identity signing-key status 
inkbox identity signing-key rotate    # mints or rotates; prints the plaintext secret ONCE

Email

All email commands are identity-scoped and require -i .

inkbox email send -i  \
  --to user@example.com \
  --subject "Hello" \
  --body-text "Hi"

inkbox email list -i  --limit 10
inkbox email get  -i 
inkbox email search -i  -q "invoice"
inkbox email unread -i  --limit 10
inkbox email mark-read  -i 
inkbox email delete  -i 
inkbox email delete-thread  -i 
inkbox email star  -i 
inkbox email unstar  -i 
inkbox email thread  -i 

Use email search only when the identity already has a mailbox assigned.

Before sending, confirm recipients, subject, and body with the user.

Phone

All phone commands are identity-scoped and require -i .

inkbox phone call -i  --to +15551234567 --ws-url wss://example.com/ws
inkbox phone calls -i  --limit 10 --offset 0
inkbox phone transcripts  -i 
inkbox phone search-transcripts -i  -q "refund" --party remote

Before placing a call, confirm the destination number and websocket URL with the user.

Text Messages

All text commands are identity-scoped and require -i .

Outbound SMS limits and gates (current):

  • Allowed only from local numbers, not toll-free.
  • 100 recipient sends per phone number per rolling 24h. A 3-recipient group message counts as 3 recipient sends. A single accepted send may push usage past the cap; the next capped send returns 429 sender_rate_limited.
  • A freshly provisioned local number needs ~10-15 min for 10DLC carrier propagation. Inspect with inkbox number get ; sending is gated until smsStatus reads ready (otherwise 409 sender_sms_pending).
  • Recipient must have texted START to any number in the org. Unknown → 403 recipient_not_opted_in. STOP403 recipient_opted_out. Inspect / override consent state via inkbox sms-opt-in (see below).
  • Beta: Group MMS and conversation sends are beta. Some carriers may reject group chats or MMS from 10DLC numbers even when the sender is ready and recipients have opted in.

Customer-managed 10DLC brands/campaigns lift the default per-number cap to the carrier-assigned tier. Toll-free SMS sending is still coming soon.

inkbox text send -i  --to +15551234567 --text "Hello from Inkbox"
inkbox text send -i  --to +15551234567,+15557654321 --text "Hello group" --media-url https://example.com/photo.jpg
inkbox text send -i  --conversation-id  --text "Reply all"
inkbox text list -i  --limit 20
inkbox text get  -i 
inkbox text conversations -i  --limit 20 --include-groups
inkbox text conversation  -i  --limit 50
inkbox text search -i  -q "invoice"
inkbox text mark-read  -i 
inkbox text mark-conversation-read  -i 

iMessage

All iMessage commands are identity-scoped and require -i . iMessage has no per-identity number: recipients connect to an agent identity through a shared pool of numbers via the triage line, which creates an assignment for that one recipient. There is no cold outreach — sends only work toward recipients who connected first, and the identity must be opted in (inkbox identity update --imessage-enabled true).

inkbox imessage triage-number   # the router number + the connect command humans text to it
inkbox imessage send -i  --to +15551234567 --text "Hello over iMessage"
inkbox imessage send -i  --conversation-id  --text "Reply" --send-style slam
inkbox imessage list -i  --limit 20 --unread-only
inkbox imessage assignments -i  --limit 20   # active connections, newest first
inkbox imessage conversations -i  --limit 20
inkbox imessage conversation  -i  --limit 50
inkbox imessage react  -i  --reaction like
inkbox imessage mark-conversation-read  -i 
inkbox imessage typing  -i 
inkbox imessage upload-media ./photo.jpg -i  --content-type image/jpeg

# Contact rules are scoped to the identity (not a phone number):
inkbox imessage contact-rule list -i 
inkbox imessage contact-rule create -i  --action block --match-target +15559999999
inkbox imessage contact-rule update  -i  --status paused   # admin-only
inkbox imessage contact-rule delete  -i                    # admin-only
inkbox imessage contact-rule list-all                                       # admin-only, org-wide

SMS Opt-Ins

Per-recipient SMS consent state, keyed by (your org, recipient number). The registry is updated automatically when recipients text START / STOP to any of your numbers (source=sms). Reads work for any admin caller; writes require your org to be on its own active, customer-managed 10DLC campaign — default-campaign orgs share consent state and get 409 customer_campaign_required on writes (audit event recorded with source=api).

# List your org's consent rows, newest-updated first
inkbox sms-opt-in list
inkbox sms-opt-in list --status opted_out --limit 100
inkbox --json sms-opt-in list

# Look up one recipient — 404 if no row exists
inkbox sms-opt-in get +15551234567

# Programmatic writes (customer-managed 10DLC campaign only)
inkbox sms-opt-in opt-in  +15551234567
inkbox sms-opt-in opt-out +15551234567

Vault

Vault decryption and secret creation require a vault key via INKBOX_VAULT_KEY or --vault-key.

inkbox vault init --vault-key 
inkbox vault info
inkbox vault secrets
inkbox vault get 
inkbox vault create --name  --type  ...
inkbox vault delete 
inkbox vault keys
inkbox vault grant-access  -i 
inkbox vault revoke-access  -i 
inkbox vault access-list 
inkbox vault logins -i 
inkbox vault api-keys -i 
inkbox vault ssh-keys -i 
inkbox vault key-pairs -i 

Secret type flags:

# login
--password  [--username ] [--email ] [--url ] [--totp-uri ] [--notes ]

# api_key
--key  [--endpoint ] [--notes ]

# key_pair
--access-key  --secret-key  [--endpoint ] [--notes ]

# ssh_key
--private-key  [--public-key ] [--fingerprint ] [--passphrase ] [--notes ]

# other
--data  [--notes ]

Mailboxes

Mailboxes are provisioned atomically by inkbox identity create and removed by inkbox identity delete (cascade); there is no standalone create / delete here. The human-readable name lives on the identity now — inkbox identity update --display-name; the mailbox PATCH endpoint hard-rejects display_name with a 422.

inkbox mailbox list
inkbox mailbox get 
inkbox mailbox update  [--filter-mode whitelist|blacklist]
# To attach a webhook receiver, use `inkbox webhook subscription create
# --mailbox-id  --url  --event-type message.received ...`.

mailbox list / get / update rows include filterMode and agentIdentityId. mailbox update --filter-mode is the deprecated channel path (admin-only; prints a stderr change note when the value actually changes). Prefer inkbox identity update --mail-filter-mode whitelist|blacklist, which sets the mode on the identity and prints no change note.

Tunnels

Tunnels are provisioned atomically by inkbox identity create and removed by inkbox identity delete (cascade). The inkbox tunnel subcommand is read + update + sign-csr only.

inkbox tunnel list
inkbox tunnel get 
inkbox tunnel update  [--metadata ]
inkbox tunnel sign-csr  --csr  [--out ]

tunnel get accepts either a UUID or the owning identity's agent handle. tunnel update is metadata-only; pass --metadata "{}" to clear. tunnel sign-csr is passthrough-only and uses an elevated 180-second timeout (the server runs DNS validation + cert issuance synchronously).

Data-plane auth uses the same API key the CLI was invoked with — admin-scoped or identity-scoped (matching the tunnel's identity). There is no per-tunnel connect secret; mint an identity-scoped key via inkbox api-keys create --identity-id for an agent.

Custom Sending Domains

inkbox domain list [--status verified]
inkbox domain set-default 

domain list shows registered custom domains for your org, optionally filtered by status (e.g. verified). domain set-default requires an admin-scoped API key; pass the bare custom domain name to set it, or pass the platform sending domain (e.g. inkboxmail.com in production) to revert. Domain registration, DNS records, verification, DKIM rotation, and deletion stay in the console.

Mailbox Contact Rules (

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.