Skip to content

osodevops/otterai-cli

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ottercli

A fast, single-binary CLI for Otter.ai, built in Rust.

Manage meeting transcripts, upload recordings, search across conversations, and automate Otter.ai from your terminal — with structured JSON output and full agentic workflow support.

CI Release License: MIT

Install

# Homebrew (macOS/Linux)
brew install osodevops/tap/ottercli

# Pre-built binaries — download from GitHub Releases
# https://github.com/osodevops/otterai-cli/releases

# From source
cargo install --git https://github.com/osodevops/otterai-cli

Setup

Authenticate with your Otter.ai email and password:

ottercli auth login --email you@example.com --password your-password

Or use environment variables:

export OTTER_EMAIL=you@example.com
export OTTER_PASSWORD=your-password
ottercli auth login

Session cookies are saved locally (~/.config/ottercli/session.json on Linux, ~/Library/Application Support/ottercli/session.json on macOS) so you only need to login once. Sessions persist across CLI invocations.

Quick Start

# List your transcripts
ottercli speeches list --limit 10

# Get a specific transcript
ottercli speeches get SPEECH_ID

# Get just the transcript text
ottercli speeches get SPEECH_ID --transcript

# Get the AI summary
ottercli speeches get SPEECH_ID --summary

# Get action items
ottercli speeches get SPEECH_ID --action-items

# Search across all transcripts
ottercli search "quarterly review"

# Upload a recording for transcription
ottercli speeches upload ./meeting.mp4

# Download a transcript
ottercli speeches download SPEECH_ID --format txt --output transcript.txt

# Delete a transcript
ottercli speeches delete SPEECH_ID --confirm

Commands

Authentication

ottercli auth login           # Authenticate with Otter.ai
ottercli auth logout          # Clear stored session
ottercli auth whoami          # Show current user info
ottercli auth status          # Check if session is valid (exit code 0/1)
ottercli auth refresh         # Force session refresh

Speeches / Transcripts

ottercli speeches list                    # List all transcripts
ottercli speeches list --limit 5          # Limit results
ottercli speeches list --after 2025-01-01 # Filter by date
ottercli speeches list --source shared    # Show shared transcripts

ottercli speeches get SPEECH_ID           # Full transcript details
ottercli speeches get SPEECH_ID --transcript   # Transcript only
ottercli speeches get SPEECH_ID --summary      # AI summary only
ottercli speeches get SPEECH_ID --action-items # Action items only
ottercli speeches get SPEECH_ID --speakers     # Speaker breakdown
ottercli speeches get SPEECH_ID --word-cloud   # Keywords

ottercli speeches search "keyword"                  # Search all transcripts
ottercli speeches search "keyword" --speech-id ID   # Search within one transcript

ottercli speeches upload ./recording.mp4            # Upload for transcription
ottercli speeches upload ./audio.mp3                # Auto-detects MIME type

ottercli speeches download SPEECH_ID --format txt   # Download as text
ottercli speeches download SPEECH_ID --format pdf   # Download as PDF
ottercli speeches download SPEECH_ID --format srt --output subs.srt

ottercli speeches delete SPEECH_ID --confirm        # Move to trash

Speakers

ottercli speakers list                    # List known speakers
ottercli speakers create --name "Name"    # Create a speaker

Folders

ottercli folders list                     # List folders

Groups

ottercli groups list                      # List groups

Search

ottercli search "keyword"                 # Search across all transcripts
ottercli search "keyword" --limit 10      # Limit results

Notifications

ottercli notifications get                # Get notification settings

Configuration

ottercli config init                      # Create default config file
ottercli config path                      # Show config file path
ottercli config get                       # Show current config
ottercli config set key value             # Set a config value

Shell Completions

ottercli completions bash >> ~/.bashrc
ottercli completions zsh >> ~/.zshrc
ottercli completions fish > ~/.config/fish/completions/ottercli.fish

Output Formats

ottercli auto-detects the output format:

  • TTY (interactive terminal): Human-readable pretty-printed JSON
  • Pipe (non-interactive): Machine-readable JSON envelope

Override with --output:

ottercli speeches list --output json      # Force JSON
ottercli speeches list --output human     # Force human-readable
ottercli speeches list --output plain     # Plain text

JSON Envelope

All JSON output follows a standard envelope:

{
  "ok": true,
  "data": { ... },
  "meta": {
    "request_id": "uuid",
    "timestamp": "2025-01-01T00:00:00Z",
    "duration_ms": 123
  }
}

Supported File Types

Upload supports auto-detection of MIME types by extension:

Extension Type
.mp3 audio/mpeg
.mp4, .m4v video/mp4
.m4a audio/mp4
.wav audio/wav
.ogg, .oga audio/ogg
.flac audio/flac
.webm video/webm
.aac audio/aac
.wma audio/x-ms-wma

Override with --content-type:

ottercli speeches upload ./file.bin --content-type audio/mpeg

Configuration

Config file location:

  • Linux: ~/.config/ottercli/config.toml
  • macOS: ~/Library/Application Support/ottercli/config.toml
[default]
email = "you@example.com"

[output]
format = "auto"    # auto, json, human, plain
color = true
page_size = 25

[network]
timeout = 30
max_retries = 3
retry_backoff_base = 2

[watch]
interval = 60

Profiles

Use named profiles for multiple accounts:

ottercli --profile work auth login --email work@company.com --password ...
ottercli --profile personal auth login --email me@gmail.com --password ...

ottercli --profile work speeches list
ottercli --profile personal speeches list

Environment Variables

Variable Description
OTTER_EMAIL Login email
OTTER_PASSWORD Login password
RUST_LOG Tracing filter (e.g., debug, ottercli=trace)

Verbosity

ottercli speeches list            # Warnings only
ottercli -v speeches list         # Info level
ottercli -vv speeches list        # Debug level
ottercli -vvv speeches list       # Trace level

Exit Codes

Code Meaning
0 Success
1 General error
2 Authentication error
3 Not found
4 Rate limited
5 Network error
6 Invalid input

Agentic Usage

ottercli is designed for use by AI agents and automation. Key features:

  • Structured JSON output when piped — parse with jq or any JSON library
  • Deterministic exit codes for error handling
  • No interactive prompts when --confirm flags are used
  • Environment variable auth — no interactive login needed
  • Idempotent operations — safe to retry

Example in a script:

#!/bin/bash
export OTTER_EMAIL=you@example.com
export OTTER_PASSWORD=your-password

# Login
ottercli auth login

# Get latest transcripts as JSON
transcripts=$(ottercli speeches list --limit 5 --output json)

# Extract speech IDs
echo "$transcripts" | jq -r '.data.speeches[].otid' | while read id; do
  # Download each as text
  ottercli speeches download "$id" --format txt --output "transcripts/${id}.txt"
done

Development

cargo build                          # Debug build
cargo build --release                # Release build
cargo test --lib --bins              # Unit tests
cargo test --features integration    # Integration tests
cargo fmt -- --check                 # Check formatting
cargo clippy --all-targets -- -D warnings  # Lint

License

MIT

About

Agent-first Rust CLI for Otter.ai — manage transcripts, upload recordings, search conversations, with structured JSON output for AI agents and automation

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages