docs: add macOS setup gotchas (npm prefix, ffmpeg, Groq key format)#45
Open
impactworks-dev wants to merge 7 commits intoearlyaidopters:mainfrom
Open
docs: add macOS setup gotchas (npm prefix, ffmpeg, Groq key format)#45impactworks-dev wants to merge 7 commits intoearlyaidopters:mainfrom
impactworks-dev wants to merge 7 commits intoearlyaidopters:mainfrom
Conversation
Captures real issues encountered during a fresh macOS setup walkthrough: - npm -g EACCES workaround via user-writable prefix - brew install ffmpeg required for local say + ffmpeg TTS fallback - Groq API keys are gsk_* (not org_*) to avoid 401 invalid_api_key - Clarify secrets live in .env, not the shell - launchd PATH must include Claude CLI dir to spawn subprocesses Also refreshes package-lock.json to match npm install. Co-Authored-By: Oz <oz-agent@warp.dev>
Document the one-time local setup for: - Obsidian Brain vault integration (path, registry, cleanup) - GitHub SSH ed25519 key with Keychain-backed auto-load - kepano/obsidian-skills install layout and user-level symlinks - Agent template vault configuration - launchd PATH requirements for npm-global binaries No secrets are recorded; machine-specific values stay in .env. Co-Authored-By: Oz <oz-agent@warp.dev>
Add a new chat_settings table to store per-chat preferences keyed by chat_id and key. Use it to persist the voice-reply toggle so the bot remembers each chat's voice mode across restarts. Changes: - db.ts: add chat_settings table and get/set/delete/getAllByKey helpers - bot.ts: load voice-enabled chats on startup; persist /voice toggle - index.ts: invoke loadVoiceEnabledChats() at startup and log result Co-Authored-By: Oz <oz-agent@warp.dev>
Add .gitignore entries for files that are either machine-specific or managed by tooling: - .agents/ and matching .claude/skills/* symlinks (managed by `skills`) - cli/ (third-party repo cloned for reference) - memory/ (personal knowledge base) - dashboard.html (generated from src/dashboard-html.ts) - TASKS.md (personal task tracker) - launchd/com.claudeclaw.tunnel.plist (absolute home paths) Also track skills-lock.json so the skill install set is reproducible. Co-Authored-By: Oz <oz-agent@warp.dev>
Introduces the warroom/ Python package: a WebSocket voice server that bridges browser audio to ClaudeClaw agents via either Gemini Live (default) or Deepgram STT + Cartesia TTS. Built against pipecat-ai 1.0.0: - WebsocketServerTransport owns the WebSocket server (host/port). - SileroVADAnalyzer is attached via WebsocketServerParams.vad_analyzer. - PipelineTask accepts params as a keyword-only argument. - LLMContext + LLMContextAggregatorPair replace the old OpenAILLMContext + llm.create_context_aggregator() pattern. - GeminiLiveLLMService replaces GeminiMultimodalLiveLLMService. - Cartesia/Deepgram service imports use their .tts / .stt submodules. - CartesiaTTSService uses Settings(voice=...) instead of deprecated voice_id kwarg. Also ignores warroom/.venv/ and warroom/__pycache__/ from VCS. Co-Authored-By: Oz <oz-agent@warp.dev>
The test 'truncates last_result to 500 chars' asserted toHaveLength(500) against a 1000-char input, but updateTaskAfterRun in src/db.ts truncates via result.slice(0, 4000). The input was therefore never truncated and the length check was unreachable. Align the test with the current runtime behavior: feed 5000 chars and assert the stored value is exactly 4000. Co-Authored-By: Oz <oz-agent@warp.dev>
Add War Room voice server on pipecat 1.0
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds a short "macOS setup notes" subsection in Step 1 of the README capturing the real issues a fresh Mac setup hits that aren't obvious from the current docs.
What's documented
npm i -gfails withEACCESon/usr/local/...— macOS ships an npm prefix owned by root. Docs the user-writable$HOME/.npm-globalworkaround so@anthropic-ai/claude-codeinstalls without sudo.say+ ffmpeg TTS fallback silently falls back to text without it. Addsbrew install ffmpeg.gsk_...values work; anorg_...identifier returnsHTTP 401 invalid_api_key..env, not the shell — pasting a key at the zsh prompt producescommand not found, easy to misread as a setup failure.claudelives in$HOME/.npm-global/bin).Also refreshes
package-lock.jsonto match a currentnpm install.Why
These were encountered during a real end-to-end setup on a clean Mac. Writing them in Step 1 up front saves newcomers from the same debug loop.
Testing
npm install,npm run build,npm run setupequivalent config generation, launchd install, andnpm run status— reports "All systems go."transcribeAudio()insrc/voice.ts(HTTP 200, correct transcript).synthesizeSpeech()(produces a valid OGG Opus buffer; round-trips back to text through Groq).Conversation
Generated with assistance from Warp (conversation: https://app.warp.dev/conversation/7f78a63a-b2fe-461c-b0e0-794ba9f23ae3)