# Memory Index

## Feedback
- [Code lives on lab — clone on phe, read via sshfs](feedback_code_lives_on_lab.md) — All fleet code AND all computation live on lab (phe108); VPS = agent hosting + memory only; reads via sshfs; big git ops + all jobs ssh-exec on lab
- [Fork agent by session clone](feedback_fork_agent_pattern.md) — Split off a specialty domain from an existing agent by `cp <src>.jsonl <new>.jsonl` + `claude --resume` in a new tmux window. Preserves full inherited context; scope diverges going forward. Helper: `agents_stuff/fork_agent.sh`. Precedent: yams → yam_sim 2026-07-02.
- [Commit without asking when appropriate](feedback_commit_authority.md) — User granted durable authority to commit in-scope changes without per-commit confirmation
- [Always pull latest.pth for inference, never best.pth](feedback_inference_checkpoint.md) — Val loss isn't a reliable quality signal for the smith300/UMI PARA models
- [Dataset uploads always include overlay bake + viewer registration](feedback_dataset_upload_workflow.md) — When pulling a new dataset to the server, also bake rgb_overlay/ with future-keypoints + gripper sparkline and register both raw + _overlay entries in datasets.json under mac_teleop
- [Check intended recipient before dispatching](feedback_check_intended_recipient.md) — If a message reads like it was meant for a specialist (backbones, mac, etc.), ask "did you mean to ask X?" instead of silently dispatching as manager
- [Reference the vault in every dispatch](feedback_vault_references.md) — Vault at /data/cameron/vault/ — point dispatches at the right slice + require updates back before "done"
- [Voice dispatch style + monitor loop + default routing](feedback_voice_dispatch_style.md) — voice_interface prefixes every send with the audio-note wrapper, watches the agent on a ~12s loop, and DEFAULT-routes personal/life remarks to life_manager (concise); agent questions handled by the agent/itself
- [Blender direction protocol: measure, don't guess](feedback_blender_direction_protocol.md) — Cameron's "up/right" = his orbited viewport, not model axes. Best: he moves the part in Blender + re-exports; agent measures the node delta and replicates it in the generator. 1 Blender/GLB unit = 100mm

## Project
- [feetech_calib agent bootstrap](project_feetech_calib_bootstrap.md) — Forked from cad 2026-07-11; owns STS3215 calibration/ID/comm software; controller repo at VPS /data/cameron/our_feetech_controller; delivered servo_zero_fixture jig
- [Mac iPhone Continuity Camera index is 0](project_mac_camera_default.md) — Default --camera to 0 (not 1) for any cv2.VideoCapture on Cameron's Mac
- [russet abandoned, yukon is the live YAM rig](project_russet_abandoned.md) — As of 2026-06-08; don't dispatch to russet, route YAM/TRI work to yukon
- [Wandb self-host attempt paused](project_wandb_selfhost_attempt_2026_06_09.md) — gorilla crash-loops on phe108, infra scaffolding kept for retry; ports 8080-8082 on phe108 owned by another user
- [Migrate fleet state off the lab box](project_migrate_offlab_pending.md) — memory has zero git backup, vault has local repo with no remote; Cameron asked 2026-06-13 to plan an external mirror + host. Surface proactively if lab-box downtime is mentioned.
- [Dual-host architecture (omidhub VPS + lab)](project_dual_host_architecture.md) — 2026-06-21: VPS provisioned, migration scripts staged at `agents_stuff/migration/`. Agents stay on lab until cutover; new fleet work lands on omidhub. Don't `pip install torch` on omidhub.
- [Finance agent planned, deferred to post-migration](project_finance_agent_planned.md) — US Bank via Plaid, keyless-display pattern (Mac holds creds, omidhub displays). Full design in `vault/fleet/agents/finance/overview.md`. Don't start until cutover done.
- [Persian agent shipped 2026-06-22 as `persian`](project_persian_agent_shipped.md) — web-first at omidlab.net/persian (Flask + Claude + ElevenLabs); supersedes the planned glasses-first design. Canonical vault slice: `vault/fleet/agents/persian/`.
- [Fleet Dashboard shipped 2026-06-27](project_fleet_dashboard_shipped.md) — omidlab.net/dashboard groups agents by needs-you/working/done/idle. Two-tier polling: tmux window_activity sweep + Haiku-4.5 classifier only on changed panes. Lives in serve.py, NOT yet in any git repo.
- [Glasses speech stack](project_glasses_speech_stack.md) — keep Whisper for transcription (now multilingual en+fa, fixed on omid-fleet); move synthesis to ElevenLabs eventually; Piper English-TTS currently broken on omid-fleet

- [Smith300-faithful rebuild + servo-STL learning](project_smith300_rebuild.md) — 2026-06-24: our st3215.stl != smith300's sts3215_03a_v1.stl (different CAD models); align by KINEMATICS (output axis -> joint axis) not mesh registration; use our model
- [Locked base parts: wrap_holder + yoke_exact](project_locked_base_parts.md) — 2026-06-24 Cameron locked these as the canonical servo-to-servo base; clearance (SERVO_CLEAR/CLEAR) stays tunable; next = parametric smith300 rebuild + fidex holders
- [Blender↔procedural-connector interface (WORKING N-servo)](project_blender_connector_interface.md) — Cameron poses servos in Blender GLB (ALWAYS parent-chain hierarchy so downstream follows), agent regenerates perpendicular-block connectors + base union + Z-up URDF. `gen_two_servo.py` + `apply_glb_layout.py`
- [PARA arm beauty variant + detachable fiducial mount](project_para_arm_beauty_detach.md) — Current design (2026-07-02): curvy connectors + filleted holders/yokes (5mm stubs) = two_servo_beauty.urdf; tool-free drop-on detachable fiducial mount (lap above plane, flat bottom) = two_servo_detach.urdf. Cameron test-prints ~week of 07-07; STLs not yet in arm_stls/
- [phe108 outage + CAD recovery on VPS/puget](project_phe108_outage_recovery.md) — 2026-07-06: lab down (cooling); scripts reconstructed to VPS /data/cameron/cad_recovery; puget mounts it + ~/cad_venv computes; meshes only on Cameron's Mac (he must scp the GLBs); git remote ASAP when lab returns
- [feetech_calib sibling owns servo-calibration software](project_feetech_calib_split.md) — mechanical/URDF = cad; servo ticks/registers/comm = feetech_calib; handoff via inboxes (2026-07-11)
- [Robot program roadmap + docs + autonomous cron](project_robot_program_roadmap.md) — 2026-07-02: arm (print now) → 3-axis gantry (gen_gantry/gen_nema) → mobile home robot. Docs at smith300_para_stuff/docs/ (CHECKLIST, DESIGN_INDEX, per-design); code stays flat. Cron 3cb4f187 (every 30min, ~12h) flushing out gantry+mobile; frozen arm print files. Camera=Arducam B0332; gravity-comp parked

## Operations gotchas
- [Cloudflared restart pitfalls](feedback_cloudflared_restart_gotchas.md) — SIGHUP kills it; `exec` in tmux launch makes the window die when process dies
- [Pane "stuck" = check tmux copy mode first](feedback_pane_stuck_copy_mode.md) — `pane_in_mode=1` eats all keystrokes; `q` fixes it. Always check before deeper diagnostics.
- [FUSE wedge recovery: kill the sshfs daemon, never touch the mount](feedback_fuse_wedge_recovery.md) — agents wedge when find/ls walk a broken sshfs chain-mount; diagnose via `wchan=request_wait_answer` + D state; fix by `kill -9 $(pgrep -f sshfs.<mount>)` then `umount -l`. NEVER stat/ls/cd the broken path yourself.
- [Tailscale SSH 12h re-auth](feedback_tailscale_ssh_reauth.md) — the recurring "additional check" is the ACL `check` action (not key expiry); make infinite via admin-console ACL check→accept; no TS API token in fleet
