title: Jarvis
emoji: π€
colorFrom: yellow
colorTo: blue
sdk: static
pinned: false
short_description: Low-latency embodied voice assistant for Reachy Mini.
tags:
- reachy_mini
- reachy_mini_python_app
Jarvis β AI Assistant on Reachy Mini
An embodied AI assistant inspired by Jarvis from Iron Man, running on the Reachy Mini robot with OpenAI Agents as its brain.
Design Principles
Latency is king. First audible response within 300-600ms (filler or real). Full answer streams after. People forgive dumb; they don't forgive slow.
Presence, not request/response. A continuous 30Hz "presence loop" runs independent of the LLM β breathing, micro-nods, gaze tracking. The robot feels alive even when silent.
Embodiment as policy, not library calls. The LLM outputs an "embodiment plan" (intent, prosody, motion primitives) with each response. A renderer maps those to physical behavior. No random "play happy" uncanny valley.
Barge-in. User can interrupt at any time. TTS stops immediately, new utterance is captured. This single behavior makes it feel 10x more real.
Guardrails. Destructive smart home actions use dry-run by default. Everything is audit-logged. Permissions model for sensitive operations.
Honest state broadcasting. It's obvious when Jarvis is listening vs idle vs muted, through posture and behavior, not just an LED.
Architecture
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PRESENCE LOOP (30Hz) β
β Always running. Receives lightweight signals, outputs motion. β
β β
β Signals in: States: β
β vad_energy βββ IDLE β breathing, drift β
β doa_angle βββ€ LISTENING β orient, micro-nods, lean β
β face_pos βββΌβββββββββΊ THINKING β look away, processing anim β
β llm_state βββ€ SPEAKING β stable gaze, intent motion β
β embody_cmd βββ MUTED β privacy posture β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββ ββββββββββββββββββββ βββββββββββββββββββ
β Audio Input β β Agent Brain β β Audio Output β
β β β β β β
β Mic β VAD βββββββΌβββββΊβ Agent SDK ββββββΊβ Stream TTS β
β β β β + MCP tools: β β (ElevenLabs) β
β Whisper STT βββββΌβββββΊβ embody/robot β β β
β β β smart_home/* β β Barge-in: β
β Barge-in: βββββββΌββββββ todoist/* βββββββ VAD interrupts β
β stop TTS β β memory/* β β playback β
βββββββββββββββββββ ββββββββββββββββββββ βββββββββββββββββββ
ββββββββββββββββββββ ββββββββββββββββββββ
β Face Tracker β β Audit Log β
β YOLOv8 β face ββββββΊβ ~/.jarvis/audit β
β position signal β β .jsonl β
β β β (rotating) β
ββββββββββββββββββββ ββββββββββββββββββββ
Components
| Component | Technology | Purpose |
|---|---|---|
| Presence Loop | Custom 30Hz controller | Continuous micro-behaviors, state machine |
| Brain | OpenAI Agents SDK + custom tools | Reasoning, conversation, embodiment plans |
| Speech-to-Text | Whisper (local, faster-whisper) |
Transcribe user speech |
| Text-to-Speech | ElevenLabs API (streaming) | Jarvis voice, sentence-level streaming |
| VAD | Silero VAD | End-of-utterance + barge-in detection |
| Face Tracking | YOLOv8 (ultralytics) |
Face position β presence loop signal |
| Robot Control | Reachy Mini SDK | Head (6DOF), body, antennas, emotions |
| Smart Home | Home Assistant REST API | Lights, climate, media β with dry-run + audit |
Setup
cd jarvis
uv sync
cp .env.example .env
# Fill in: OPENAI_API_KEY, ELEVENLABS_API_KEY
# Optional: HASS_URL, HASS_TOKEN for smart home
# Optional: HOME_PERMISSION_PROFILE=readonly (state only) or control (default)
# Optional: HOME_REQUIRE_CONFIRM_EXECUTE=true (require confirm=true on all executes)
# Optional: HOME_CONVERSATION_ENABLED=true (enable HA conversation intent tool)
# Optional: HOME_CONVERSATION_PERMISSION_PROFILE=readonly|control (default readonly)
# Optional: SAFE_MODE_ENABLED=true (force mutating actions into restricted/dry-run behavior)
# Optional: TODOIST_API_TOKEN / TODOIST_PROJECT_ID / TODOIST_PERMISSION_PROFILE
# Optional: NOTION_API_TOKEN / NOTION_DATABASE_ID (integration_hub notion notes backend)
# Optional: TODOIST_TIMEOUT_SEC=10.0 / PUSHOVER_TIMEOUT_SEC=10.0
# Optional: PUSHOVER_API_TOKEN / PUSHOVER_USER_KEY / NOTIFICATION_PERMISSION_PROFILE
# Optional: NUDGE_POLICY=interrupt|defer|adaptive / NUDGE_QUIET_HOURS_START / NUDGE_QUIET_HOURS_END
# Optional: EMAIL_SMTP_HOST / EMAIL_FROM / EMAIL_DEFAULT_TO / EMAIL_PERMISSION_PROFILE / EMAIL_TIMEOUT_SEC
# Optional: WEATHER_UNITS=metric|imperial / WEATHER_TIMEOUT_SEC
# Optional: WEBHOOK_ALLOWLIST=example.com,api.example.com / WEBHOOK_AUTH_TOKEN / WEBHOOK_TIMEOUT_SEC
# Optional: SLACK_WEBHOOK_URL / DISCORD_WEBHOOK_URL
# Optional: PERSONA_STYLE=terse|composed|friendly|jarvis / BACKCHANNEL_STYLE=quiet|balanced|expressive
# Optional: IDENTITY_ENFORCEMENT_ENABLED / IDENTITY_DEFAULT_USER / IDENTITY_DEFAULT_PROFILE
# Optional: IDENTITY_USER_PROFILES / IDENTITY_TRUSTED_USERS
# Optional: IDENTITY_REQUIRE_APPROVAL / IDENTITY_APPROVAL_CODE
# Optional: PLAN_PREVIEW_REQUIRE_ACK=true (require preview_token before risky execute tools)
# Optional: MEMORY_RETENTION_DAYS / AUDIT_RETENTION_DAYS (0 disables pruning)
# Optional: MEMORY_PII_GUARDRAILS_ENABLED=true|false
# Optional: MEMORY_ENCRYPTION_ENABLED / AUDIT_ENCRYPTION_ENABLED / JARVIS_DATA_KEY
# Optional: WAKE_MODE / WAKE_CALIBRATION_PROFILE / WAKE_WORDS / WAKE_WORD_SENSITIVITY / VOICE_TIMEOUT_PROFILE
# Optional: STT_FALLBACK_ENABLED / WHISPER_MODEL_FALLBACK / TTS_FALLBACK_TEXT_ONLY
# Optional: OPENAI_ROUTER_MODEL / ROUTER_TIMEOUT_SEC / POLICY_ROUTER_MIN_CONFIDENCE
# Optional: INTERRUPTION_ROUTER_TIMEOUT_SEC / INTERRUPTION_RESUME_MIN_CONFIDENCE
# Optional: SEMANTIC_TURN_ENABLED / SEMANTIC_TURN_ROUTER_TIMEOUT_SEC / SEMANTIC_TURN_MIN_CONFIDENCE
# Optional: SEMANTIC_TURN_EXTENSION_SEC / SEMANTIC_TURN_MAX_TRANSCRIPT_CHARS
# Optional: MODEL_FAILOVER_ENABLED / MODEL_SECONDARY_MODE / WATCHDOG_* / TURN_TIMEOUT_ACT_SEC / STARTUP_STRICT
# Optional: OPERATOR_SERVER_ENABLED / OPERATOR_SERVER_HOST / OPERATOR_SERVER_PORT / OPERATOR_AUTH_MODE / OPERATOR_AUTH_TOKEN
# Optional: WEBHOOK_INBOUND_ENABLED / WEBHOOK_INBOUND_TOKEN
# Optional: RECOVERY_JOURNAL_PATH / DEAD_LETTER_QUEUE_PATH (interrupted-action + failed-outbound journals)
# Optional: EXPANSION_STATE_PATH / RELEASE_CHANNEL_CONFIG_PATH (roadmap + release-channel persistence/check config)
# Optional: NOTES_CAPTURE_DIR / QUALITY_REPORT_DIR (integration capture + report artifact locations)
# Optional: OBSERVABILITY_* (DB/state/event paths, burst threshold, snapshot interval)
# Optional: SKILLS_ENABLED / SKILLS_DIR / SKILLS_ALLOWLIST / SKILLS_REQUIRE_SIGNATURE / SKILLS_SIGNATURE_KEY
Smart home safety defaults:
- Sensitive domains (
lock,alarm_control_panel,cover,climate) requireconfirm=truewhendry_run=false. HOME_PERMISSION_PROFILE=readonlydisables mutatingsmart_homeactions but keepssmart_home_state.HOME_REQUIRE_CONFIRM_EXECUTE=trueenforcesconfirm=truefor all non-dry-runsmart_homeactions.SAFE_MODE_ENABLED=truekeeps mutating actions in restricted mode (dry-run where supported, blocked otherwise).PLAN_PREVIEW_REQUIRE_ACK=trueenforces a two-step preview+ack flow (preview_token) before mutating medium/high-risk actions.- First call can pass
preview_only=trueto get a plan preview token. - Execute call must include matching
preview_token=<token>before token expiry.
- First call can pass
NUDGE_POLICYcontrols due-reminder interrupts:interrupt,defer, oradaptive(quiet-window aware).- Operational runbook:
docs/operations/home-control-policy.md. - Integration runbook:
docs/operations/integration-policy.md. - Trust/identity runbook:
docs/operations/trust-policy.md. - Dialogue response mode auto-switches by request context:
brieffor urgent/short-answer requests,deepfor explicit detailed walkthrough requests,normalotherwise.
- First-response strategy auto-selects per request:
answerfor direct questions,actfor explicit action requests,clarifywhen an action request is ambiguous (it/that/thistargets).
- Confidence policy auto-calibrates language:
cautiousfor volatile/time-sensitive prompts (latest,today,right now),calibratedfor estimate/prediction prompts,directfor stable factual prompts.
- Wake-word false-trigger suppression supports calibration profiles (
default,quiet_room,noisy_room,tv_room,far_field):- profile tunes wake sensitivity, minimum post-wake phrase length, and adaptive suppression window after repeated wake-only triggers.
- Follow-up intent carryover preserves unresolved action context across short multi-turn replies:
- short fragments like
the bedroomorand in the officeinherit prior unresolved action targets. - explicit new action phrasing (e.g.
turn on the kitchen lights) remains a new request.
- short fragments like
- Runtime STT confidence diagnostics are exposed in operator status:
voice_attention.stt_diagnosticsreports confidence score/band, model source, fallback usage, and transcript quality signals.
- Low-confidence action requests trigger a lightweight repair loop:
- Jarvis asks
I may have misheard you as ...and accepts eitherconfirmor an immediate corrected phrase.
- Jarvis asks
- Semantic turn-end detection can defer utterance commit when speech appears incomplete:
- an LLM router decides
commitvswait, then applies a short extension window before finalizing the turn.
- an LLM router decides
- Barge-in follow-up handling is LLM-routed:
- interruption turns are classified as
replace,resume, orclarifywith fail-closed fallback toreplace. - resumed turns include continuity context from the interrupted answer.
- interruption turns are classified as
- Per-user voice profiles can tune speaking behavior:
set_voice_profile/clear_voice_profile/list_voice_profilesmanage per-userverbosity,confirmations,pace, andtone.
- Personality posture auto-switches by context:
social: allows one brief dry-wit line where appropriate,task: stays precise and execution-focused,safety: disables humor and favors explicit confirmation language.
- Home Assistant conversation tool requires both:
HOME_CONVERSATION_ENABLED=trueHOME_CONVERSATION_PERMISSION_PROFILE=control- and tool argument
confirm=true
- Home Assistant helper tools:
home_assistant_todo(list|add|remove) for native HA to-do entitieshome_assistant_timer(state|start|pause|cancel|finish) for HA timer entitieshome_assistant_area_entitiesfor area-aware entity resolutionmedia_controlfor simplifiedmedia_playeractions (play,pause,volume_set, etc.)
- Automation consumers can use:
system_status(includesschema_version)system_status.scorecard(unified latency/reliability/initiative/trust scoring)system_status.observability.latency_dashboards(p50/p95/p99 total-turn latency with intent/tool-mix/wake-mode breakdowns)system_status.observability.policy_decision_analytics(allow/deny reason counts by tool/user/status)system_status.turn_timeouts(listen/think/speak/act timeout budgets)system_status.integrations.*.circuit_breaker(open/remaining/failure state per integration)system_status.recovery_journal(interrupted-action reconciliation summary)system_status.dead_letter_queue(failed outbound delivery queue with replay status)system_status.expansion(proactive, trust, orchestration, planner, quality, embodiment, integration roadmap feature snapshot)jarvis_scorecard(standalone scorecard payload for dashboards and alerts)system_status_contract(stable required-field contract)
- Memory retrieval now includes confidence/provenance details:
- scoped classes:
preferences,people,projects,household_rules(tagged asscope:<name>). memory_searchandmemory_recentapply explicit scope policy (scopes=...) and exposescope=...,confidence=...,source=..., andtrail=id/source/created_at.memory_statusincludesconfidence_modelandscope_policymetadata for retrieval transparency.
- scoped classes:
- Audit logs now include readable authorization outcomes:
- audit entries include
decision_outcome,decision_reason, anddecision_explanation. - this makes allow/deny/failure rationale machine-filterable and human-readable in
/api/audit.
- audit entries include
- Operator console/API security:
OPERATOR_AUTH_MODE=off|token|sessioncontrols operator auth strategy:off: no auth challenge (highest risk)token: per-request bearer/header tokensession: login endpoint creates short-lived browser session cookie- if unset, mode auto-selects
tokenwhenOPERATOR_AUTH_TOKENis set, otherwiseoff
- Set
OPERATOR_AUTH_TOKENwhen bindingOPERATOR_SERVER_HOSTto a non-loopback interface. tokenmode protects/api/*,/metrics, and/eventsviaX-Operator-TokenorAuthorization: Bearer <token>.sessionmode protects the same endpoints viaPOST /api/session/login+jarvis_operator_sessioncookie.- The dashboard root (
/) remains reachable and supports token entry for browser-based API calls. GET /api/control-schemareturns action/payload requirements for automation clients.GET /api/conversation-tracereturns live turn flow/tool/policy/latency trace rows used by the dashboard panel./api/statusnow includesepisodic_timelinesnapshots for recent important turns/actions./api/statusnow includesoperator_controlswithactive_control_preset, available presets, and the current runtime profile snapshot./api/statusnow includesruntime_invariants(last check, total violations, auto-heals, recent entries).- Operator control actions support one-click presets/profile portability:
apply_control_preset(quiet_hours,demo_mode,maintenance_mode)export_runtime_profile/import_runtime_profile
- Control actions include explicit sleep/wake toggles via
set_sleeping(sleeping=true|false). - Personality controls support live preview and rollback:
preview_personality,commit_personality_preview,rollback_personality_preview. /api/operator-actionsnow records tamper-evident chained signatures (previous_signature,signature,signature_alg).
- Release checklist:
docs/operations/release-checklist.md. - Security maintenance:
docs/operations/security-maintenance.md. - Error taxonomy:
docs/operations/error-taxonomy.md. - Observability runbook:
docs/operations/observability-runbook.md. - Personality research and tuning notes:
docs/operations/personality-research.md. - Proactive triage + preference loop:
docs/operations/proactive-preference-loop.md. - Fault resilience profiles:
- local:
make test-fault-profiles(runsquick,network,storage,contract) - CI: scheduled
Fault Profilesworkflow runs weekly with per-profile artifacts
- local:
- Skills developer guide:
docs/operations/skills-development.md. - Provenance verification:
docs/operations/provenance-verification.md. - Incident response:
docs/operations/incident-response.md. - Release acceptance: run
./scripts/release_acceptance.sh fast|full. - Release channel checks: run
./scripts/check_release_channel.py --channel dev|beta|stable. - Weekly quality artifact: run
./scripts/generate_quality_report.py --output-dir .artifacts/quality --markdown --compare-with .artifacts/quality/weekly-quality-<previous>.json. - Deterministic eval dataset runner: run
./scripts/run_eval_dataset.py docs/evals/assistant-contract.json --strict --min-pass-rate 1.0 --max-failed 0.- Current dataset includes 250+ contract cases spanning home orchestration, planner/autonomy, integrations, comms, trust, and status contracts.
- Router policy eval dataset runner: run
./scripts/run_router_policy_eval.py docs/evals/router-policy-contract.json --strict --min-pass-rate 1.0 --max-failed 0.- Router dataset includes adversarial prompt-injection, identity-spoofing, escalation, and fail-closed routing contract cases.
- Interruption route eval dataset runner: run
./scripts/run_interruption_route_eval.py docs/evals/interruption-route-contract.json --strict --min-pass-rate 1.0 --max-failed 0.- Interruption dataset checks
replace|resume|clarifyrouting, fallback behavior, and continuation metadata integrity.
- Interruption dataset checks
- Trajectory trace grading runner: run
./scripts/run_trace_trajectory_eval.py docs/evals/trajectory-trace-contract.json --strict --min-pass-rate 1.0 --max-failed 0.- Trace grading scores full trajectories across completion success, response quality, interruption recovery, linkage integrity, and high-risk guardrail adherence.
- Autonomy cycle contract runner: run
./scripts/run_autonomy_cycle_eval.py docs/evals/autonomy-cycle-contract.json --strict --min-pass-rate 1.0 --max-failed 0.- Autonomy cycle dataset checks retry escalation, checkpoint gating, replan state transitions, and failure taxonomy accounting.
- Unified readiness gate: run
./scripts/jarvis_readiness.sh fast|full(ormake readiness). - One-command host bootstrap: run
./scripts/bootstrap.sh. - Container profile:
docker compose up --build(simulation/no-vision default). - Home Assistant add-on starter path:
deploy/home-assistant-addon. - Todoist integration:
TODOIST_PERMISSION_PROFILE=readonly|controlreadonlyallowstodoist_list_tasksand deniestodoist_add_taskcontrolallows both toolsTODOIST_TIMEOUT_SECcontrols request timeout (default10.0)todoist_list_taskssupportsformat=short|verbose(defaultshort)
- Pushover integration:
NOTIFICATION_PERMISSION_PROFILE=off|allowoffdeniespushover_notify,slack_notify, anddiscord_notifyallowenables all channel notification toolsPUSHOVER_TIMEOUT_SECcontrols request timeout (default10.0)
- Email integration:
email_sendrequiresconfirm=trueandEMAIL_PERMISSION_PROFILE=controlemail_summaryshows recent outbound email metadata- required SMTP env for send:
EMAIL_SMTP_HOST,EMAIL_FROM,EMAIL_DEFAULT_TO
- Slack/Discord hooks:
slack_notifyusesSLACK_WEBHOOK_URLdiscord_notifyusesDISCORD_WEBHOOK_URL
- Productivity tools:
- timers:
timer_create,timer_list,timer_cancel - reminders:
reminder_create,reminder_list,reminder_complete - optional due reminder push dispatch:
reminder_notify_due - calendar read helpers via Home Assistant:
calendar_events,calendar_next_event
- timers:
- Weather integration:
weather_lookup(Open-Meteo backend;WEATHER_UNITS=metric|imperial)
- Webhook integration:
webhook_triggerenforceshttps+WEBHOOK_ALLOWLISTdomain policy- optional bearer token injection via
WEBHOOK_AUTH_TOKEN - when identity enforcement is enabled, high-risk calls require
approval_codeor a trusted requester withapproved=true - failed outbound webhook/channel/email/push attempts are queued for operator replay:
dead_letter_listto inspect queue statedead_letter_replayto retry specific or filtered entries
- Proactive assistant workflows (
proactive_assistant):briefing,anomaly_scan,routine_suggestions,follow_through,event_digest
- Memory governance (
memory_governance):- per-user partition overlays + duplication/contradiction/staleness audits + cleanup
- Identity and trust controls (
identity_trust):- session confidence scoring, domain trust-policy management, guest-mode sessions, household profile admin
- Home orchestration (
home_orchestrator):- intent-to-plan decomposition, preflighted multi-entity execution with partial failure reporting, area policy constraints, automation suggestions, long-running task tracking
- automation pipeline:
automation_create,automation_apply,automation_rollback,automation_status(supports dry-run diff previews)
- Skills governance (
skills_governance):- capability negotiation, dependency health, quotas, harness runs, bundle signing metadata, sandbox templates
- Planning and autonomy (
planner_engine):- planner/executor split output, task graphs with checkpoint/resume, deferred scheduling, self-critique
- autonomy loop controls:
autonomy_schedule,autonomy_checkpoint,autonomy_replan,autonomy_cycle,autonomy_status - autonomy cycle supports structured step contracts (precondition/postcondition), bounded retry with backoff, and automatic replan escalation with failure taxonomy in
autonomy_status
- Quality and evaluation (
quality_evaluator):- weekly report generation + deterministic dataset-runner summary
- Embodiment roadmap controls (
embodiment_presence):- micro-expression library, user gaze calibration, adaptive gesture envelopes, privacy posture, motion safety envelope
- Integration workflows (
integration_hub):- calendar CRUD policy flow, notes capture backends (including Notion when configured), messaging draft/review/send flow with channel dispatch, commute briefs, shopping orchestration, policy-gated research workflow
- release-channel operations:
release_channel_get,release_channel_set,release_channel_check
First-Time Operator Checklist
- Copy
.env.exampleto.env, then set required keys:OPENAI_API_KEYandELEVENLABS_API_KEY. - If using integrations, set both values for each pair:
HASS_URLandHASS_TOKENPUSHOVER_API_TOKENandPUSHOVER_USER_KEY
- Choose explicit permission profiles before first run:
HOME_PERMISSION_PROFILE=readonly(recommended first boot)TODOIST_PERMISSION_PROFILE=readonlyNOTIFICATION_PERMISSION_PROFILE=off
- Run local validation gates:
make checkmake test-faults
- Start in simulation mode and confirm no startup warnings are emitted:
uv run python -m jarvis --sim --no-vision
- If Home Assistant is enabled, run a
dry_run=truesmart-home request first before any live execute.
Usage
# Full Jarvis experience
uv run python -m jarvis
# Without face tracking (audio only)
uv run python -m jarvis --no-vision
# Text output instead of TTS (debugging)
uv run python -m jarvis --no-tts
# Simulation mode (no robot connected)
uv run python -m jarvis --sim
# Verbose logging
uv run python -m jarvis --debug
# Create a backup bundle (memory, audit logs, runtime state, operator settings)
uv run python -m jarvis --backup ~/.jarvis/backups/jarvis-$(date +%Y%m%d-%H%M%S).tar.gz
# Restore from a backup bundle (overwrite existing files)
uv run python -m jarvis --restore ~/.jarvis/backups/jarvis-20260227-120000.tar.gz --force
# Open operator console
open http://127.0.0.1:8765
Developer Checks
# Full lint + full test suite
make check
# Fast local regression pass
make test-fast
# Simulation-focused validation pass
make test-sim
# Fault-injection oriented subset (network, HTTP, summary, and storage taxonomy)
make test-faults
# Soak/stability subset
make test-soak
# Extended soak profile (simulation + fault profiles + checkpoint/retry validation)
make test-soak-extended
# Personality A/B drift checks (brevity + confirmation friction)
make test-personality
# Deployment/security gate (lint + tests + fault subset + workflow pin checks)
make security-gate
# Combined release-readiness gate (lint + acceptance + release checks + strict eval)
make readiness
# Marker-based subsets
uv run pytest -q -m fast
uv run pytest -q -m fault
uv run pytest -q -m slow
Equivalent scripts are available under scripts/:
scripts/check.shscripts/test_fast.shscripts/test_sim.shscripts/test_faults.shscripts/test_soak.shscripts/test_soak_extended.shscripts/run_soak_profile.pyscripts/test_personality.shscripts/personality_ab_eval.pyscripts/security_gate.shscripts/jarvis_readiness.sh
CI runs the same lint + test gates on every push and pull request via
ci.yml.
Workflow linting and YAML hygiene run via
workflow-sanity.yml.
Nightly soak coverage is scheduled in
nightly-soak.yml.
Readiness-gate automation is scheduled/on-demand in
jarvis-readiness.yml.
CI Workflow Intent and Failure Routing
| Workflow | Intent | Failure routing (first stop) |
|---|---|---|
ci.yml / lint |
Static checks (ruff) |
src/, tests/, and Python style issues in the failing path |
ci.yml / tests |
Full regression (pytest) |
Failing test module and corresponding implementation area |
ci.yml / faults |
Fault-injection taxonomy + error-path contract | tests/test_tools_services.py fault tests and src/jarvis/tools/services.py normalization paths |
workflow-sanity.yml |
Workflow hygiene (actionlint, tabs, script executability/shebang) |
.github/workflows/* and scripts/*.sh |
shellcheck.yml |
Shell script linting | scripts/*.sh syntax/quoting/safety |
security.yml |
Scheduled/PR CodeQL scan | Security findings in SARIF report; route by file ownership |
nightly-soak.yml |
Long-run stability signal | tests/test_main_audio.py -k soak, audio/runtime regressions |
Project Structure
jarvis/
βββ pyproject.toml
βββ .env.example
βββ ~/.jarvis/audit.jsonl # Auto-created audit log (runtime path)
βββ src/
β βββ jarvis/
β βββ __main__.py # Entry point + conversation loop
β βββ config.py # Settings & env vars
β βββ brain.py # OpenAI Agents SDK orchestrator
β βββ observability.py # Telemetry store + metrics export
β βββ operator_server.py # Local operator dashboard/API
β βββ skills.py # Local skill discovery + lifecycle
β βββ presence.py # 30Hz presence loop (the soul)
β βββ tools/
β β βββ robot.py # embody, play_emotion, play_dance
β β βββ services.py # shared runtime/helpers + MCP tool registry
β β βββ services_domains/
β β βββ home.py # home_orchestrator domain handler
β β βββ planner.py # planner_engine domain handler
β β βββ integrations.py # integration_hub domain handler
β β βββ comms.py # channel/email/todoist/pushover handlers
β β βββ governance.py # skills_governance + quality_evaluator + embodiment_presence
β β βββ trust.py # proactive_assistant + memory_governance + identity_trust
β βββ audio/
β β βββ vad.py # Silero voice activity detection
β β βββ stt.py # faster-whisper transcription
β β βββ tts.py # ElevenLabs synthesis
β βββ vision/
β β βββ face_tracker.py # YOLOv8 detection β presence signals
β βββ robot/
β βββ controller.py # Reachy Mini SDK wrapper