# see — Vision proxy extension for pi

Routes image+prompt requests through a configurable vision-capable model so that **any** model in pi can handle visual content, even text-only ones.

## How it works

The extension registers a `see` tool that the LLM can call autonomously. When called, it:

1. Resolves which model to use for vision (see priority below)
2. Finds the image — either from a given file path, by locating the latest screenshot, or from images attached to the input
3. Sends the image and prompt to the vision model
4. Returns the description as text

**Model resolution priority:**
1. If an explicit vision model was set via `/seemodel` — use that
2. If the current conversation model has native vision — use it directly
3. Otherwise — prompt the user to configure a proxy model

## Installation

Place the extension in an auto-discovered location and reload:

```bash
cp see.ts ~/.pi/agent/extensions/see.ts    # global
# or
cp see.ts .pi/extensions/see.ts            # project-local
```

Then `/reload` inside pi.

## Usage

### Via the LLM tool

The LLM automatically has access to the `see` tool. When the conversation involves visual content, the model calls it with a prompt describing what to look for:

- `see(prompt="read all the text in this screenshot")`
- `see(prompt="describe the chart axes and values", imagePaths=["~/Desktop/chart.png"])`
- `see(prompt="compare these two designs", imagePaths=["~/mockup-v1.png", "~/mockup-v2.png"])`
- `see(prompt="what error message is shown?")` — finds latest screenshot automatically

### Via user commands

| Command | Description |
|---|---|
| `/see describe the latest screenshot` | Finds the newest image in `~/Pictures/Screenshots` and analyzes it |
| `/see read the text from ~/Desktop/photo.jpg` | Analyzes a specific image file |
| `/see what's in ~/Pictures/diagram.png` | Another example of explicit file path |
| `/see model` | Opens a model selector to choose the vision proxy model |
| `/seemodel` | Same as above (visible in `/commands`) |

You can also paste or drag-drop images into pi's input, then type `/see <prompt>`.

## Configuration

Set the default vision proxy model:

```
/seemodel
```

The status bar shows the current state:
- `👁 google/gemini-2.5-flash` — explicit proxy configured
- `👁 anthropic/claude-sonnet-4 (native)` — using current model's native vision
- _(nothing)_ — no vision available, run `/seemodel`

---

Built by **muswawir** with **DeepSeek V4 Pro**.
