Wave Ruby
Ruby API client and CLI for Wave.
Wave is an AI note taker for meetings and conversations, and it is one of my favorite tools in this category. Learn more at wave.co and follow @waveappai.
CLI
Available commands:
wave login
wave account
wave list
wave search "meeting content"
wave show SESSION_ID
wave transcript SESSION_IDUse --json on any read command for machine-readable output:
wave list --json
wave account --jsonYou can provide credentials with --token, WAVE_API_TOKEN, or a token saved locally by wave login.
Ruby API
client = Wave::Client.new(token: ENV.fetch("WAVE_API_TOKEN"))
client.account
client.list_sessions(limit: 10)
client.search_sessions(query: "roadmap")
client.session("session_123")
client.transcript("session_123")Development
Install dependencies:
bundle installRun the test suite:
bundle exec rspecBuild the gem locally:
gem build wave-ruby.gemspecLive API Verification
Copy .env.example to .env and set a real token:
cp .env.example .envThen set:
WAVE_API_TOKEN=your_wave_api_tokenLive specs are opt-in and skipped by default. Run them locally with:
WAVE_LIVE=1 bundle exec rspec spec/wave/live/client_live_spec.rbThat exercises the current live coverage for:
accountlist_sessionsstatssessiontranscriptsearch_sessions
session, transcript, and search_sessions auto-discover test inputs from your first listed session. You can make them deterministic by setting WAVE_SESSION_ID and WAVE_SEARCH_QUERY in .env.
To record local-only cassettes for every live example in the gitignored directory:
WAVE_LIVE=1 WAVE_RECORD_LIVE=1 bundle exec rspec spec/wave/live/client_live_spec.rbThose recordings stay under spec/cassettes/local/ and must not be committed. If you want to keep an example response in the repo, convert it into a sanitized fixture under spec/fixtures/wave/ or a scrubbed example cassette under spec/cassettes/examples/.
Use the sanitization patterns in spec/support/sanitizer.rb before committing any captured API data.
See CONTRIBUTING.md for the full policy.