CLI Reference

Manage Boxli profiles and tiles from any terminal, shell script, CI/CD pipeline, or agent that can run shell commands — no MCP config or HTTP client required.

Install

Run without installing via npx:

npx boxli-cli --help

Or install globally:

npm install -g boxli-cli

Or build from source:

cd cli && npm install && npm run build
node dist/index.js --help

Authentication

The CLI reads your API key in this priority order:

  1. --key <api-key> flag
  2. BENTO_API_KEY environment variable
  3. ~/.boxlirc file — {"apiKey":"...","baseUrl":"..."}

Your API key is available in the Boxli dashboard under Settings. You can also override the base URL with --url or BENTO_BASE_URL for self-hosted instances.

# Quickstart — set once, use everywhere
export BENTO_API_KEY=your_key_here
boxli profile get my-profile

Commands

profile get <slug>

Fetch a profile summary. Add --json for full tile data.

boxli profile get my-profile
boxli profile get my-profile --json | jq '.tiles | length'

profile publish <slug>

Publish the current tile state as a public snapshot. Fetches current state then publishes it.

boxli profile publish my-profile

tile list <slug>

Print a table of all tiles with their IDs, types, positions, and content preview.

boxli tile list my-profile
boxli tile list my-profile --json

tile add <slug> --type <type> [--content <json>] [--position <json>] [--theme <json>]

Add a new tile. Pass content, position, and theme as JSON strings.

boxli tile add my-profile --type text --content '{"heading":"Hello world"}'

boxli tile add my-profile --type link \
  --content '{"title":"My Site","url":"https://example.com"}' \
  --position '{"col":1,"row":2,"colSpan":2,"rowSpan":1}'

tile update <slug> <tileId> [--content <json>] [--position <json>] [--theme <json>]

Partially update an existing tile. Only the fields you pass are changed.

boxli tile update my-profile tile-123 --content '{"heading":"Updated heading"}'

tile delete <slug> <tileId>

Remove a tile permanently.

boxli tile delete my-profile tile-123

tile replace <slug> --tiles <json-array>

Replace ALL tiles on a profile in one operation. Useful for bulk AI-generated layouts.

boxli tile replace my-profile --tiles '[{"type":"text","position":{"col":1,"row":1,"colSpan":2,"rowSpan":1},"content":{"heading":"Hi"},"theme":{},"meta":{}}]'

Tile types

Valid values for --type:

textlinkbuttonimagevideosociallocationrich-cardembednewsletterdividergallery

See the Tile Reference for the content fields each type accepts.

Using with agents

Any agent that can run shell commands can manage your Boxli profile. This includes Claude Code, CI/CD runners, or custom automation scripts. The --json flag makes output fully machine-readable.

# Claude Code example (give this instruction to Claude Code):
# "Update the heading of tile tile-abc-123 on profile my-profile to 'New heading'"

BENTO_API_KEY=$KEY boxli tile update my-profile tile-abc-123 \
  --content '{"heading":"New heading"}'

For Claude Desktop and other MCP clients, the MCP server provides a richer, self-describing interface. The CLI and MCP complement each other — use whichever fits your environment.