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:
--key <api-key>flagBENTO_API_KEYenvironment variable~/.boxlircfile —{"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-cardembednewsletterdividergallerySee 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.