Automation
Indigo CLI is designed for automation. Every command produces structured output, uses consistent exit codes, and works with standard Unix tools.
JSON output
Every command supports the --json flag. Without it, commands produce human-readable output. With it, you get structured JSON suitable for parsing.
# Human-readableindigo signals list
# Machine-readableindigo signals list --jsonThis applies to all command groups: auth, signals, meetings, and config.
Exit codes
The CLI uses structured exit codes for reliable scripting:
| Code | Meaning |
|---|---|
0 | Success |
1 | General error |
2 | Authentication error (not logged in or token expired) |
3 | Network error (API unreachable) |
4 | Invalid input (bad arguments or flags) |
5 | Resource not found |
Use these in scripts for conditional logic:
indigo auth status > /dev/null 2>&1if [ $? -eq 2 ]; then echo "Not authenticated. Running login..." indigo auth loginfiCredential sharing
The CLI shares credentials with Indigo Desktop through the system keychain. If you authenticate in one, both are authorized. This means automation scripts do not require separate credential management — authenticate once with indigo auth login and your scripts work immediately.
Example workflows
Morning briefing script
Pull yesterday’s decisions and today’s meetings into a single digest:
#!/bin/bash
echo "=== Decisions from recent meetings ==="indigo signals list --type decision --limit 10 --json | \ jq -r '.[] | "- \(.content) (\(.meeting))"'
echo ""echo "=== Today's meetings ==="indigo meetings list --limit 10 --json | \ jq -r '.[] | "- \(.title) at \(.start)"'Decision audit trail
Export all decisions to a CSV for tracking and compliance:
indigo signals list --type decision --json | \ jq -r '["ID","Content","Meeting","Date"], (.[] | [.id, .content, .meeting, .created_at]) | @csv' \ > decisions.csvMeeting attendance tracking
Track how many meetings involve a specific person:
indigo meetings search "alice@example.com" --json | \ jq 'length'Signal monitoring
Watch for new action items and send to a webhook:
#!/bin/bash
indigo signals list --type action --limit 5 --json | \ jq -c '.[]' | while read -r signal; do curl -s -X POST "$WEBHOOK_URL" \ -H "Content-Type: application/json" \ -d "$signal" doneCombining with other tools
# Count signals by typeindigo signals list --json | \ jq 'group_by(.type) | map({type: .[0].type, count: length})'# Quick text search on signal contentindigo signals list --json | jq -r '.[].content' | grep -i "deadline"# Post decisions to a Slack channelDECISIONS=$(indigo signals list --type decision --limit 5 --json | \ jq -r '.[] | "- \(.content)"' | head -10)
curl -s -X POST "$SLACK_WEBHOOK" \ -H "Content-Type: application/json" \ -d "{\"text\": \"Recent decisions:\n$DECISIONS\"}"CI/CD integration
Indigo CLI works in CI/CD environments. Authenticate once on the runner, then use commands in pipeline steps.
# Example: GitHub Actions step- name: Export weekly decisions run: | indigo signals list --type decision --json > decisions.json env: INDIGO_TOKEN: ${{ secrets.INDIGO_TOKEN }}