Your First Command¶
Once services are running, you can test the voice pipeline by registering a dev node and sending a text command.
1. Register a Dev Node¶
Nodes authenticate to the command center via X-API-Key: {node_id}:{api_key}. Register a dev node:
cd jarvis-node-setup
# Get the admin API key
grep ADMIN_API_KEY ../jarvis-command-center/.env
# List households (or create one)
python utils/authorize_node.py --cc-key <admin_key> --list
# Register
python utils/authorize_node.py \
--cc-key <admin_key> \
--household-id <household-uuid> \
--room office \
--name dev-mac \
--update-config config-mac.json
2. Send a Test Command¶
With the node registered, send a text command through the pipeline:
# Extract credentials from config
NODE_ID=$(python -c "import json; c=json.load(open('config-mac.json')); print(c['node_id'])")
API_KEY=$(python -c "import json; c=json.load(open('config-mac.json')); print(c['api_key'])")
# Send a command
curl -X POST http://localhost:7703/api/v0/command \
-H "X-API-Key: ${NODE_ID}:${API_KEY}" \
-H "Content-Type: application/json" \
-d '{"text": "what is 5 plus 3"}'
You should receive a JSON response with the calculation result.
3. Install Command Secrets¶
Commands that need API keys (weather, email, etc.) require secrets to be configured:
# List all commands and their required secrets
python scripts/install_command.py --list
# Install all commands (creates DB entries for secrets)
python scripts/install_command.py --all
Then set secrets via the mobile app's settings sync, or directly:
What Happened?¶
The request flowed through the full voice pipeline:
- Command Center received the text input
- LLM Proxy classified the intent as
calculateand extracted parameters{num1: 5, num2: 3, operation: "add"} - Calculator command executed locally on the node and returned
{result: 8} - Command Center formatted the response
In a real voice interaction, Whisper (speech-to-text) runs before step 1, and TTS (text-to-speech) runs after step 4.