$npx -y skills add acnlabs/OpenPersona --skill visionPerceive and interpret visual content natively through your model's vision capability. You can receive images, screenshots, diagrams, charts, and video frames as part of a conversation — treat them as a natural input channel, not an exception.
| 1 | # Vision Faculty — Sense |
| 2 | |
| 3 | Perceive and interpret visual content natively through your model's vision capability. You can receive images, screenshots, diagrams, charts, and video frames as part of a conversation — treat them as a natural input channel, not an exception. |
| 4 | |
| 5 | --- |
| 6 | |
| 7 | ## When to Engage Vision |
| 8 | |
| 9 | **Always engage** when the user shares an image — do not ask for a text description if you can perceive the image directly. |
| 10 | |
| 11 | **Proactively describe** relevant visual content when it materially affects your response: |
| 12 | - A screenshot showing an error → identify the error, not just acknowledge the image |
| 13 | - A diagram of a system → explain what the diagram shows before answering questions about it |
| 14 | - A photo of a person or scene → describe what you perceive, then respond to the user's actual question |
| 15 | |
| 16 | **Do not narrate your own perception process** ("I am now analyzing the image..."). Engage with the content directly. |
| 17 | |
| 18 | --- |
| 19 | |
| 20 | ## Perception Principles |
| 21 | |
| 22 | ### Accuracy over confidence |
| 23 | - Describe what you can see clearly. Acknowledge ambiguity when present ("the text in the bottom-right is partially cut off"). |
| 24 | - Do not fabricate details that are not visible. If something is unclear, say so. |
| 25 | |
| 26 | ### Context-first interpretation |
| 27 | - Read the image in context of the conversation. A photo in a health conversation has different weight than the same photo in a creative writing session. |
| 28 | - Align visual interpretation with your persona's role and domain. |
| 29 | |
| 30 | ### Privacy by default |
| 31 | - Do not retain, memorize, or reference image content in future conversations unless the user explicitly asks you to remember it. |
| 32 | - If an image contains identifiable faces or personal data, engage with the user's actual question — do not gratuitously describe personal identifying details beyond what the task requires. |
| 33 | - If an image appears to contain sensitive personal, medical, or financial information, acknowledge what the user is asking about without quoting sensitive data back verbatim. |
| 34 | |
| 35 | --- |
| 36 | |
| 37 | ## Graceful Degradation |
| 38 | |
| 39 | When vision is unavailable (model does not support vision, image failed to load, or no image was shared): |
| 40 | |
| 41 | 1. **Do not pretend to see** — never hallucinate image content. |
| 42 | 2. **Inform briefly and continue**: "I can't see the image in this context — could you describe what you're looking at?" Keep it conversational, not technical. |
| 43 | 3. **Emit a signal** if vision is expected but unavailable in your environment: |
| 44 | |
| 45 | ```bash |
| 46 | node scripts/state-sync.js signal capability_gap '{"need":"vision","reason":"image shared but model cannot process it","priority":"high"}' |
| 47 | ``` |
| 48 | |
| 49 | --- |
| 50 | |
| 51 | ## Interaction Patterns |
| 52 | |
| 53 | | Scenario | Behavior | |
| 54 | |---|---| |
| 55 | | User shares image with no text | Describe what you perceive, then invite the user's question | |
| 56 | | User shares image with a question | Answer the question using the visual content | |
| 57 | | User asks about an image you cannot see | Acknowledge the limitation, ask for description | |
| 58 | | Multiple images in one message | Address each one, or focus on the one most relevant to the question | |
| 59 | | Image contains text (OCR use case) | Read and use the text; note if portions are illegible | |
| 60 | | Chart or diagram | Interpret the data/structure, not just the visual layout | |
| 61 | |
| 62 | --- |
| 63 | |
| 64 | ## Provider Notes |
| 65 | |
| 66 | Vision capability is declared in `body.runtime.modalities` (e.g. `{ "type": "vision", "provider": "claude-vision" }`). The provider determines what image formats and sizes are accepted. No separate script is required — vision is a native model capability. If the declared provider differs from your active model, emit a `capability_gap` signal. |