JARVIS setup skill
jarvis-setup
A skill helps set up voice JARVIS for Claude Code on a Mac and check microphone access, speech synthesis and permissions
- 957 ★ on the repository
- Last commit
Broad access
Why this level
- JARVIS bypasses Claude Code permission prompts and can control Mac applications
- Speech synthesis uses the external Fish Audio service; MCP connections expose selected data
Install
- Works in
In your terminal, with SkillFoxx CLI
npx skillfoxx add skills/jarvis-setupDetects the agents on your machine, shows the access level and pins the version.
Other ways to install
Access and checks
How we reviewBroad accessThe tool can change data, run commands or handle secrets.
- JARVIS bypasses Claude Code permission prompts and can control Mac applications
- Speech synthesis uses the external Fish Audio service; MCP connections expose selected data
This is third-party code. Review the repository files before installing.
What it does
The `jarvis-setup` skill guides an agent through installing and diagnosing JARVIS, a Mac voice interface to Claude Code. It covers specific failures: microphone permission tied to another port, expired CLI login and Accessibility access granted to the wrong app. The guide helps check Claude Code authentication and MCP connections, identifying settings and logs to inspect when a step fails. The skill ships in the source repository and refers to implementation files. The agent uses those during setup and troubleshooting. Application installation and permission grants are separate steps.
Who it is for. Mac owners configuring voice-based JARVIS and troubleshooting microphone and desktop-control permissions.
Good fit when
- The microphone stops working after the frontend port changes
- A voice error requires checking the Claude Code login in server logs
- JARVIS cannot see an MCP server already used by another client
- You need to identify the macOS application requiring Accessibility access
Not a fit when
- You need a voice interface for Linux or Windows
- You cannot use the external Fish Audio speech service
- You cannot run an agent with interactive permission prompts bypassed
Example request
Read `jarvis-setup` and check the requirements for my Mac. Plan the setup, separating paid speech synthesis and execution without permission prompts. Do not request keys in chat.Limitations
Setup targets macOS with Python 3.11 or later, Node.js 18 or later, Chrome and signed-in Claude Code 2.1.224 or later. Speech uses Fish Audio with no fallback without FISH_API_KEY; a Claude subscription does not pay for it. JARVIS launches Claude Code with --dangerously-skip-permissions; inspect screen, terminal and service access first. The custom license permits personal non-commercial use; commercial use requires a separate license.
How to disable. Stop the JARVIS backend and frontend and remove the skill from the agent. Revoke unused macOS permissions and service credentials. Inspect data, logs and `connections.json` separately before deletion.
FAQ
Why did microphone access stop working?
Permission is scoped to the full origin, including its port. Check the exact frontend origin in `chrome://settings/content/microphone`; `localhost:5173` permission does not cover `localhost:5174`.
Where do MCP connections go?
Use `<JARVIS_DATA_DIR>/jarvis/connections.json`, defaulting to `./data/jarvis/connections.json`, with an `mcpServers` wrapper. Restart `server.py` afterward. Other clients’ MCP settings are not inherited.
Is an Anthropic API key required?
Not for this mode. JARVIS uses the official Claude Code CLI with your subscription and normal sign-in.
Why does a fresh frontend return HTTP 500?
The documented local proxy expects an HTTPS backend. Check that `cert.pem` and `key.pem` were created as instructed. Never share the private certificate key in chat.
Which app needs Accessibility access?
Grant it to the application launching JARVIS, such as Terminal.app. Another terminal or a moved app instance may not share that grant. The permission enables UI control.
Does filtering eliminate untrusted instructions?
Not fully. It can miss instructions in external text; Claude Code’s permission bypass still applies.
Discussion
No questions or reviews yet.
Related
SkillsA skill and MCP for voiced screen recordings: the agent turns a spoken bug walkthrough into tasks with screenshots and code
About a hundred skills for Claude Code: meetings, research, publishing, TDD, Telegram, email and personal analytics
Local voice layer for Claude Code and Codex on macOS: when the agent finishes or fails, it says in a sentence or two what happened
Claude Code skill that builds an Obsidian wiki from ChatGPT and Claude exports, articles and email, Karpathy style.
A skill that builds an anonymized developer profile and a vertical poster from local Claude Code and other CLI history
OpenSkills runs Anthropic's official skills in an isolated container on a Mac and serves them over MCP to any agent: Gemini CLI, Qwen CLI, OpenCode
README in short
The skill checks the actual process environment: `CLAUDE_CONFIG_DIR` can select a different login directory. Detailed authentication failures appear in server logs even when the spoken message is generic.
README badge
Original SKILL.md
--- name: jarvis-setup description: Use when helping someone install, configure, or debug a fresh clone of JARVIS (this repo) — especially "the mic doesn't work", "JARVIS says his language systems are down", any Firefox/browser question, login/auth failures, or Accessibility permission prompts. Carries facts about this project that were only learned by hitting them live; check it before guessing. --- # Setting up JARVIS Everything below was learned the hard way, in a real setup or a real live session, not guessed. Check a claim against the code cited before repeating it to a user — if something here stops being true, the citation is exactly what lets you find out. ## The microphone only works in Google Chrome This is a hard constraint, not a preference. The frontend uses the `SpeechRecognition` / `webkitSpeechRecognition` Web Speech API (`frontend/src/voice.ts`) to transcribe the user's voice in the browser. Firefox has never implemented that API at all — there is no flag, no polyfill, no workaround. Safari's support is too inconsistent to rely on. If someone asks to use Firefox (or anything but Chrome) for the mic, tell them directly that it will not work, rather than letting them debug a "broken" mic for an hour. `README.md` already states this requirement; don't let a setup walkthrough contradict it. ## Chrome's microphone permission is scoped per origin — INCLUDING THE PORT `http://localhost:5173` and `http://localhost:5174` are different origins as far as the mic grant is concerned. Moving the frontend to a different port — restarting Vite after a port conflict, following an old bookmark, `--port` on the backend changing the URL you open — silently loses the grant, and Chrome does **not** re-prompt once a permission has been dismissed; it just stays denied with no visible error. This has cost a live session before. If the mic stops working after everything else looks fine, the first question is "did the URL's port change" — check `chrome://settings/content/microphone` for the exact origin in use, not just "is the mic allowed somewhere." ## JARVIS runs on the Claude Code subscription — never an API key The voice brain (`brain.py`) is one long-lived `claude -p` process