CLI Overview
Build tools, test agents, and monitor calls from your terminal
The Chanl CLI manages your entire agent lifecycle from the command line -- create tools, import calls, run evaluations, and connect AI assistants via MCP.
Install
npm install -g @chanl/cliVerify:
chanl --versionchanl/1.0.0 darwin-arm64 node-v20.11.0Authenticate
chanl loginOpening browser for authentication...
✓ Authenticated as dean@acme.com
Workspace: acme (ws_abc123)Or use an API key directly:
chanl login --api-key ak_abc123Verify:
chanl auth whoamiUser: dean@acme.com
Workspace: acme (ws_abc123)
Role: ownerCommand Map
All Commands
Build
| Command | Description |
|---|---|
chanl tools list | List all tools in the workspace |
chanl tools create | Create a new tool (HTTP, JS, or system) |
chanl tools get <id> | Get tool details |
chanl tools execute <id> | Execute a tool with arguments |
chanl tools delete <id> | Delete a tool |
chanl toolsets list | List toolsets |
chanl toolsets create | Create a toolset |
chanl toolsets get <id> | Get toolset details and tools |
chanl toolsets add-tool | Add a tool to a toolset |
chanl toolsets remove-tool | Remove a tool from a toolset |
chanl kb add | Add a knowledge base entry |
chanl kb upload | Upload a file or URL |
chanl kb search | Search the knowledge base |
chanl kb list | List all entries |
chanl mcp config | Generate MCP config for Claude/Cursor |
chanl mcp test | Test the MCP connection |
Test
| Command | Description |
|---|---|
chanl chat <agent-id> | Interactive text chat with an agent |
chanl chat <agent-id> -m "..." | Send a single message |
chanl scenarios list | List test scenarios |
chanl scenarios run <id> | Run a scenario |
chanl personas list | List test personas |
Monitor
| Command | Description |
|---|---|
chanl calls import | Import a call (transcript, audio, or file) |
chanl calls list | List calls with filters |
chanl calls get <id> | Get call details and analysis |
chanl calls delete <id> | Delete a call |
chanl scorecards list | List scorecards |
chanl scorecards create | Create a scorecard |
chanl scorecards evaluate <call-id> | Evaluate a call against a scorecard |
chanl scorecards results <call-id> | View evaluation results |
Core
| Command | Description |
|---|---|
chanl login | Authenticate via browser OAuth |
chanl auth whoami | Show current user and workspace |
chanl auth logout | Clear stored credentials |
chanl config set <key> <value> | Set a config value |
chanl config get <key> | Get a config value |
chanl config list | Show all config |
chanl health | Check API status |
Configuration
chanl config set workspace-id ws_abc123
chanl config set output json
chanl config listConfiguration
────────────────────────────────────
workspace-id: ws_abc123
output: table
api-url: https://api.chanl.aiEnvironment Variables
Override any config with environment variables:
export CHANL_API_KEY=chanl_key_abc123
export CHANL_WORKSPACE_ID=ws_abc123
export CHANL_OUTPUT=jsonGlobal Options
Every command accepts these flags:
| Option | Short | Description |
|---|---|---|
--json | -j | Output as JSON |
--workspace <id> | -w | Override default workspace |
--quiet | -q | Suppress non-essential output |
--verbose | -v | Show detailed output |
--help | -h | Show command help |
Output Formats
Table output (default) for humans:
chanl calls listCalls
──────────────────────────────────────────────────────────────
ID Customer Duration Status Sentiment
695d6957e21c0ceb325c394d John Doe 3m 0s ended positive
695d6957e21c0ceb325c394e Jane Smith 4m 5s ended neutralJSON output for scripts:
chanl calls list --json | jq -r '.calls[].id'695d6957e21c0ceb325c394d
695d6957e21c0ceb325c394eScripting
Pipe JSON Output
chanl calls list --json | jq -r '.calls[].id'
chanl calls list --json | \
jq '.calls | group_by(.status) | map({status: .[0].status, count: length})'Batch Operations
chanl calls list --status ended --json | \
jq -r '.calls[].id' | \
xargs -I {} chanl scorecards evaluate {} --scorecard scorecard_abc123CI/CD
- name: Evaluate call quality
run: |
chanl scorecards evaluate $CALL_ID \
--scorecard $SCORECARD_ID \
--json > result.json
score=$(jq '.score' result.json)
if [ "$score" -lt "70" ]; then
echo "Quality score $score below threshold"
exit 1
fi
env:
CHANL_API_KEY: ${{ secrets.CHANL_API_KEY }}
CHANL_WORKSPACE_ID: ${{ vars.CHANL_WORKSPACE_ID }}