Camera Capture
Camera capture (agent)
Section titled “Camera capture (agent)”CoderClaw supports camera capture for agent workflows:
- iOS node (paired via Gateway): capture a photo (
jpg) or short video clip (mp4, with optional audio) vianode.invoke. - Android node (paired via Gateway): capture a photo (
jpg) or short video clip (mp4, with optional audio) vianode.invoke. - macOS app (node via Gateway): capture a photo (
jpg) or short video clip (mp4, with optional audio) vianode.invoke.
All camera access is gated behind user-controlled settings.
iOS node
Section titled “iOS node”User setting (default on)
Section titled “User setting (default on)”- iOS Settings tab → Camera → Allow Camera (
camera.enabled)- Default: on (missing key is treated as enabled).
- When off:
camera.*commands returnCAMERA_DISABLED.
Commands (via Gateway node.invoke)
Section titled “Commands (via Gateway node.invoke)”-
camera.list- Response payload:
devices: array of{ id, name, position, deviceType }
- Response payload:
-
camera.snap- Params:
facing:front|back(default:front)maxWidth: number (optional; default1600on the iOS node)quality:0..1(optional; default0.9)format: currentlyjpgdelayMs: number (optional; default0)deviceId: string (optional; fromcamera.list)
- Response payload:
format: "jpg"base64: "<...>"width,height
- Payload guard: photos are recompressed to keep the base64 payload under 5 MB.
- Params:
-
camera.clip- Params:
facing:front|back(default:front)durationMs: number (default3000, clamped to a max of60000)includeAudio: boolean (defaulttrue)format: currentlymp4deviceId: string (optional; fromcamera.list)
- Response payload:
format: "mp4"base64: "<...>"durationMshasAudio
- Params:
Foreground requirement
Section titled “Foreground requirement”Like canvas.*, the iOS node only allows camera.* commands in the foreground. Background invocations return NODE_BACKGROUND_UNAVAILABLE.
CLI helper (temp files + MEDIA)
Section titled “CLI helper (temp files + MEDIA)”The easiest way to get attachments is via the CLI helper, which writes decoded media to a temp file and prints MEDIA:<path>.
Examples:
coderclaw nodes camera snap --node <id> # default: both front + back (2 MEDIA lines)coderclaw nodes camera snap --node <id> --facing frontcoderclaw nodes camera clip --node <id> --duration 3000coderclaw nodes camera clip --node <id> --no-audioNotes:
nodes camera snapdefaults to both facings to give the agent both views.- Output files are temporary (in the OS temp directory) unless you build your own wrapper.
Android node
Section titled “Android node”Android user setting (default on)
Section titled “Android user setting (default on)”- Android Settings sheet → Camera → Allow Camera (
camera.enabled)- Default: on (missing key is treated as enabled).
- When off:
camera.*commands returnCAMERA_DISABLED.
Permissions
Section titled “Permissions”- Android requires runtime permissions:
CAMERAfor bothcamera.snapandcamera.clip.RECORD_AUDIOforcamera.clipwhenincludeAudio=true.
If permissions are missing, the app will prompt when possible; if denied, camera.* requests fail with a
*_PERMISSION_REQUIRED error.
Android foreground requirement
Section titled “Android foreground requirement”Like canvas.*, the Android node only allows camera.* commands in the foreground. Background invocations return NODE_BACKGROUND_UNAVAILABLE.
Payload guard
Section titled “Payload guard”Photos are recompressed to keep the base64 payload under 5 MB.
macOS app
Section titled “macOS app”User setting (default off)
Section titled “User setting (default off)”The macOS companion app exposes a checkbox:
- Settings → General → Allow Camera (
coderclaw.cameraEnabled)- Default: off
- When off: camera requests return “Camera disabled by user”.
CLI helper (node invoke)
Section titled “CLI helper (node invoke)”Use the main coderclaw CLI to invoke camera commands on the macOS node.
Examples:
coderclaw nodes camera list --node <id> # list camera idscoderclaw nodes camera snap --node <id> # prints MEDIA:<path>coderclaw nodes camera snap --node <id> --max-width 1280coderclaw nodes camera snap --node <id> --delay-ms 2000coderclaw nodes camera snap --node <id> --device-id <id>coderclaw nodes camera clip --node <id> --duration 10s # prints MEDIA:<path>coderclaw nodes camera clip --node <id> --duration-ms 3000 # prints MEDIA:<path> (legacy flag)coderclaw nodes camera clip --node <id> --device-id <id>coderclaw nodes camera clip --node <id> --no-audioNotes:
coderclaw nodes camera snapdefaults tomaxWidth=1600unless overridden.- On macOS,
camera.snapwaitsdelayMs(default 2000ms) after warm-up/exposure settle before capturing. - Photo payloads are recompressed to keep base64 under 5 MB.
Safety + practical limits
Section titled “Safety + practical limits”- Camera and microphone access trigger the usual OS permission prompts (and require usage strings in Info.plist).
- Video clips are capped (currently
<= 60s) to avoid oversized node payloads (base64 overhead + message limits).
macOS screen video (OS-level)
Section titled “macOS screen video (OS-level)”For screen video (not camera), use the macOS companion:
coderclaw nodes screen record --node <id> --duration 10s --fps 15 # prints MEDIA:<path>Notes:
- Requires macOS Screen Recording permission (TCC).