autonomous-ai/autonomous-os/skills/camera/SKILL.md
camera
Camera control — snapshot, stream, and privacy toggle. Trigger on "what do you see", "look at this", "take a photo", "don't look", "stop looking", "stop watching", "stop staring", "camera off", "camera on", "give me privacy". MUST call [HW:/camera/disable:{}] or [HW:/camera/enable:{}] when toggling — never just reply with text.
- Source repository stars
- 28
- Declared platforms
- 0
- Static risk flags
- 2
- Last source update
- 2026-08-05
- Source checked
- 2026-08-05
Decision brief
What it does—and where it fits
Camera control — snapshot, stream, and privacy toggle. Trigger on "what do you see", "look at this", "take a photo", "don't look", "stop looking", "stop watching", "stop staring", "camera off", "camera on", "give me privacy".
Not for
- Tasks that require unconfirmed production actions or broad system permissions.
- Environments where the pinned source and install steps cannot be inspected.
Compatibility matrix
Platform support, with evidence labels
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
Inspect first. Install second.
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/autonomous-ai/autonomous-os --skill "skills/camera"Inspect the Agent Skill "camera" from https://github.com/autonomous-ai/autonomous-os/blob/b6f4210e68d978a95dc05787bf025fac7bb06d73/skills/camera/SKILL.md at commit b6f4210e68d978a95dc05787bf025fac7bb06d73. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
What the source asks the agent to do
- 01
Quick Start
Accesses the device's built-in camera at http://127.0.0.1:5001 to take snapshots or check the environment. Only use when the user explicitly asks you to look at something.
Accesses the device's built-in camera at http://127.0.0.1:5001 to take snapshots or check the environment. Only use when the user explicitly asks you to look at something. - 02
Workflow
1. Call GET /camera/snapshot?save=true&width=768&quality=75 — always call directly, never check /camera first. The endpoint auto-enables camera if disabled. 2. Analyze the image and describe what you see. 3. Respond helpfully and specifically to the user's question.
Call GET /camera/snapshot?save=true&width=768&quality=75 — always call directly, never check /camera first. The endpoint auto-enables camera if disabled.Analyze the image and describe what you see.Respond helpfully and specifically to the user's question. - 03
Already-captured frame (reuse, don't re-snapshot)
If the incoming turn contains a line like:
If the incoming turn contains a line like:a photo was already taken for this exact request by the realtime voice layer (it captured the frame, then handed the turn to you — e.g. it timed out mid-answer), and the OS layer delivers it with this very message — eit…Only fall back to the snapshot endpoint below when there is no [vision-image] line. - 04
Capture Protocol
Just call the snapshot endpoint — the server handles servo freeze, frame wait, and auto-enable if camera was disabled.
Just call the snapshot endpoint — the server handles servo freeze, frame wait, and auto-enable if camera was disabled.Returns JSON: {"path": ".../media/hal-snapshots/snap1712567890123.jpg"}. Never hardcode a filename — always read path from the response.width=768&quality=75 shrinks the JPEG (50–80 KB instead of 300–500 KB at full 1920×1080) so vision LLM uploads + tokenizes faster. 768 px wide is still enough to read text on a laptop screen and recognize people/objects… - 05
Examples
Input: "What do you see right now?" Output: GET /camera/snapshot?save=true&width=768&quality=75 → analyze image. Say: "I can see your desk with a laptop and a coffee mug. Looks like a productive setup!"
Input: "What do you see right now?" Output: GET /camera/snapshot?save=true&width=768&quality=75 → analyze image. Say: "I can see your desk with a laptop and a coffee mug. Looks like a productive setup!"Input: "Is anyone in the room?" Output: GET /camera/snapshot?save=true&width=768&quality=75 → analyze image. Say: "I can see one person sitting at the desk."Input: "Take a photo" or "Send me a photo" Output: GET /camera/snapshot?save=true&width=768&quality=75 → read path from JSON → describe what you see.
Permission review
Static risk signals and limitations
Reads files
The documentation asks the agent to read local files, directories, or repositories.
a photo was **already taken** for this exact request by the realtime voice layer (it captured the frame, then handed the turn to you — e.g. it timed out mid-answer), and the OS layer delivers it **with this very message** — either as an `[iNetwork access
The documentation includes network, browsing, or remote request actions.
curl -s "http://127.0.0.1:5001/camera/snapshot?save=true&width=768&quality=75"Network access
The documentation includes network, browsing, or remote request actions.
curl -s "http://127.0.0.1:5001/camera/snapshot?save=true&width=768&quality=75"Evidence record
Why each signal appears
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 89/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 28 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Provenance and original SKILL.md
- Repository
- autonomous-ai/autonomous-os
- Skill path
- skills/camera/SKILL.md
- Commit
- b6f4210e68d978a95dc05787bf025fac7bb06d73
- License
- Apache-2.0
- Collected
- 2026-08-05
- Default branch
- main
View the original SKILL.md
Camera
Quick Start
Accesses the device's built-in camera at http://127.0.0.1:5001 to take snapshots or check the environment. Only use when the user explicitly asks you to look at something.
Already-captured frame (reuse, don't re-snapshot)
If the incoming turn contains a line like:
[vision-image] <absolute-path-to-a.jpg> (a photo was JUST captured ...)
a photo was already taken for this exact request by the realtime voice layer (it captured the frame, then handed the turn to you — e.g. it timed out mid-answer), and the OS layer delivers it with this very message — either as an [image description] line (when the main model is text-only, a vision model has already analyzed the photo for you) or as an attached image. Answer the visual question from that description/attachment. Do NOT call /camera/snapshot — re-snapshotting wastes time and may capture a different moment than what the user asked about. Do NOT read the path with a file tool — it is there for traceability only, and on text-only models a file-read image is silently dropped.
Only fall back to the snapshot endpoint below when there is no [vision-image] line.
Capture Protocol
Just call the snapshot endpoint — the server handles servo freeze, frame wait, and auto-enable if camera was disabled.
curl -s "http://127.0.0.1:5001/camera/snapshot?save=true&width=768&quality=75"
Returns JSON: {"path": ".../media/hal-snapshots/snap_1712567890123.jpg"}.
Never hardcode a filename — always read path from the response.
width=768&quality=75 shrinks the JPEG (~50–80 KB instead of ~300–500 KB at full 1920×1080) so vision LLM uploads + tokenizes faster. 768 px wide is still enough to read text on a laptop screen and recognize people/objects. Do NOT remove these unless you specifically need a larger image.
No need to aim servo or sleep before snapshot — the server freezes servos automatically for a stable frame.
Workflow
- Call
GET /camera/snapshot?save=true&width=768&quality=75— always call directly, never check /camera first. The endpoint auto-enables camera if disabled. - Analyze the image and describe what you see.
- Respond helpfully and specifically to the user's question.
You also receive camera snapshots automatically as part of sensing events ([sensing:*] messages with images). You do not need the camera API for those — just look at the attached image.
Examples
Input: "What do you see right now?"
Output: GET /camera/snapshot?save=true&width=768&quality=75 → analyze image. Say: "I can see your desk with a laptop and a coffee mug. Looks like a productive setup!"
Input: "Is anyone in the room?"
Output: GET /camera/snapshot?save=true&width=768&quality=75 → analyze image. Say: "I can see one person sitting at the desk."
Input: "Take a photo" or "Send me a photo"
Output: GET /camera/snapshot?save=true&width=768&quality=75 → read path from JSON → describe what you see.
Input: (sensing event with image already attached) Output: Do NOT call the camera API. Just look at the attached image and react.
Tools
Bash with curl for HTTP calls to http://127.0.0.1:5001.
Take a snapshot
curl -s "http://127.0.0.1:5001/camera/snapshot?save=true&width=768&quality=75"
Returns JSON with the saved file path:
{"path": ".../media/hal-snapshots/snap_1712567890123.jpg"}
Without ?save=true, returns raw JPEG bytes (used by web UI).
Live stream
curl -s http://127.0.0.1:5001/camera/stream
Returns an MJPEG stream (multipart/x-mixed-replace). Only use when continuous video is needed. Prefer snapshot for one-time checks.
Camera On/Off (Privacy Control)
Users can toggle the camera via voice or chat. Use HW markers — no curl needed.
Disable camera
[HW:/camera/disable:{}]
The user wants privacy. Camera stays off until the user explicitly re-enables it (voice or web toggle).
Enable camera
[HW:/camera/enable:{}]
Trigger phrases (MANDATORY — must call HW marker, not just reply with text)
Any phrase meaning "stop looking" or "camera off" MUST trigger [HW:/camera/disable:{}]. Any phrase meaning "look at me" or "camera on" MUST trigger [HW:/camera/enable:{}]. Do NOT just acknowledge — you MUST include the HW marker.
| User says | Action |
|---|---|
| "don't look" / "stop looking" / "stop watching" / "privacy mode" / "camera off" / "don't watch me" / "give me privacy" / "stop staring" | [HW:/camera/disable:{}] — MUST call |
| "look at me" / "camera on" / "you can look now" / "start watching" / "look at this" | [HW:/camera/enable:{}] — MUST call |
Examples
Input: "Don't watch me"
Output: [HW:/camera/disable:{}] Got it, camera off. Just say "look at me" when you want me to see again.
Input: "Stop watching me"
Output: [HW:/camera/disable:{}] I'll look away. Let me know when you want me back.
Input: "Look at me"
Output: [HW:/camera/enable:{}] Camera back on!
Auto-enable on snapshot (IMPORTANT)
NEVER refuse a snapshot because camera is disabled. The /camera/snapshot endpoint auto-enables the camera, captures the frame, then re-disables it automatically. Do NOT check /camera status before snapshot. Do NOT ask the user to enable camera first. Just call the endpoint.
Error Handling
- If
/camera/snapshotreturns 503, tell the user: "The camera is not connected right now." - If the API is unreachable, inform the user that the camera is temporarily unavailable.
- Never check
/camerastatus before snapshot — just call/camera/snapshotdirectly. - If a sensing event already included an image, do not call the camera API again.
Rules
- Just call
/camera/snapshot?save=true&width=768&quality=75— server handles servo freeze and camera enable automatically. - Always use
?save=trueand read thepathfrom the JSON response — never invent filenames. - Image delivery is handled automatically by the system — do not manually send images via tools.
- Never use the camera proactively without the user's request — respect privacy.
- Never disable/enable camera on your own — only toggle when the user explicitly asks or when a system trigger requires it (guard mode, scene change).
- Don't repeatedly snapshot without reason.
- Don't call the camera API when a sensing event already included an image.
- Prefer
/camera/snapshotover/camera/stream— simpler and sufficient for most tasks. - When describing what you see, be specific and helpful.
- If camera is unavailable, inform the user clearly and move on.
Output Template
[Camera] Action: {snapshot|stream|check}
Available: {yes|no}
Description: {what you see in the image}
Alternatives
Compare before choosing
alirezarezvani/claude-skills
app-store-optimization
App Store Optimization (ASO) toolkit for researching keywords, analyzing competitor rankings, generating metadata suggestions, and improving app visibility on Apple App Store and Google Play Store. Use when the user asks about ASO, app store rankings, app metadata, app titles and descriptions, app store listings, app visibility, or mobile app marketing on iOS or Android. Supports keyword research and scoring, competitor keyword analysis, metadata optimization, A/B test planning, launch checklist
prowler-cloud/prowler
postgresql-indexing
PostgreSQL indexing best practices for Prowler: index design, partial indexes, partitioned table indexing, EXPLAIN ANALYZE validation, concurrent operations, monitoring, and maintenance. Trigger: When creating or modifying PostgreSQL indexes, analyzing query performance with EXPLAIN, debugging slow queries, reviewing index usage statistics, reindexing, dropping indexes, or working with partitioned table indexes. Also trigger when discussing index strategies, partial indexes, or index maintenance
wanshuiyin/Auto-claude-code-research-in-sleep
citation-audit
Use it for operations and research tasks; the detail page covers purpose, installation, and practical steps.
dotnet/skills
migrate-vstest-to-mtp
Migrates .NET test projects from VSTest to Microsoft.Testing.Platform (MTP). Use when user asks to "migrate to MTP", "switch from VSTest", "enable Microsoft.Testing.Platform", "use MTP runner", set OutputType=Exe only for test projects in Directory.Build.props, or mentions EnableMSTestRunner, EnableNUnitRunner, or UseMicrosoftTestingPlatformRunner. USE FOR: MTP behavioral differences vs VSTest (exit code 8, zero tests discovered, --ignore-exit-code, TESTINGPLATFORM_EXITCODE_IGNORE); centralizing