Skip to content
Obedience-CorpPublic

About

Give your agents eyes. Native PTZ. No vendor app.

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Repository files navigation

gaze

Insta360 Link 2 PTZ webcam and Insta360 Link 2C

Give your agents eyes.

Native PTZ. No vendor app.

USB Video Class on the wire. JPEG from the same vid:pid that pans. Gimbal optional. Zoom optional.

gaze status, center, and zoom on an Insta360 Link 2

g q=v turns the sensor on and returns a JPEG. That is the eyes.

Cameras

Gaze talks USB Video Class 1.1. The picture and the gimbal are the same USB device (UVC Camera VendorID_… ProductID_… on AVFoundation, not the localized name). gaze list is the source of truth. Zoom / pan / tilt only if that Camera Terminal has the control. Vendor AI tracking is a separate XU.

Insta360 Link 2 PTZ 4K webcam
Insta360
Link · Link 2 · Link 2 Pro · Link 2C
OBSBOT Tiny 3 PTZ 4K webcam
OBSBOT
Tiny · Tiny 2 · Tiny 3 · Tiny SE
Logitech Rally PTZ conference camera
Logitech
Rally · Rally Bar · Meetup · PTZ Pro
Logitech Brio 4K webcam
Logitech
Brio · MX Brio · C920 · StreamCam
Elgato Facecam Pro webcam
Elgato
Facecam · Facecam Pro · Facecam 4K
Yealink UVC86 PTZ conference camera
Yealink
UVC30 · UVC34 · UVC84 · UVC86
Brand Models Status
Insta360 Link 2 Proven see + zoom + pan/tilt (2e1a:4c04)
Apple Studio Display Proven see + zoom + pan/tilt (05ac:1114)
Insta360 Link, Link 2 Pro, Link 2C UVC, untested here
OBSBOT Tiny, Tiny SE, Tiny 2, Tiny 3 UVC PTZ, untested here
Logitech Rally, Rally Bar, Meetup, PTZ Pro 2 UVC PTZ if the Camera Terminal has pan/tilt
Logitech Brio, MX Brio, C920, StreamCam UVC zoom if present. No gimbal.
Elgato Facecam, Facecam Pro, Facecam 4K UVC. No gimbal.
Yealink UVC30, UVC84, UVC86 UVC PTZ, untested here
AVer CAM520, CAM550, CAM570 UVC PTZ, untested here
PTZOptics, HuddleCamHD, Tenveo, NexiGo USB UVC SKUs if the terminal has the control

Quit the vendor controller first. Insta360 Webcam, OBSBOT Center, Logitech Tune, Elgato Camera Hub, Yealink USB Connect, AVer PTZApp.

Install

macOS (Homebrew):

brew tap Obedience-Corp/tap
brew install gaze
gaze list

Linux (Homebrew on Linux):

brew tap Obedience-Corp/tap
brew install gaze
gaze list

Linux (from source, no Homebrew). Compiler, just, and libjpeg:

just build
just install          # ~/.local/bin/gaze  (PREFIX=/usr/local just install)
gaze list

The operator must be in the video group (/dev/video*). Same CLI as macOS: gaze see, gaze mcp, optional PTZ when the UVC Camera Terminal exposes it (V4L2 ZOOM/PAN/TILT absolute).

From source on either OS: just build. Protocol tests (no camera): just test-protocol. Hardware matrix: just test-hw.

Release binaries: v0.3.0 — gaze-linux-x86_64 on Linux; Apple Silicon still just build / brew install gaze from source.

Plugins

The binary is the MCP server (gaze mcp). Plugins do not wrap it in npm.

Claude Code
/plugin marketplace add Obedience-Corp/gaze
/plugin install gaze@gaze
Grok
grok plugin marketplace add Obedience-Corp/gaze
grok plugin install gaze --trust
Codex
codex plugin marketplace add Obedience-Corp/gaze
Gemini CLI
gemini extensions install https://github.com/Obedience-Corp/gaze

Optional pin: gemini extensions config gaze GAZE_DEV

Cursor

Agent Plugin (plugin.json + mcp.json). Local:

ln -s "$(pwd)" ~/.cursor/plugins/local/gaze

Or paste clients/cursor.json into ~/.cursor/mcp.json.

Add to Cursor

Add to VS Code · Claude Desktop → clients/claude-desktop.json · Windsurf → clients/windsurf.json · Cline → clients/cline.json

Pin a camera with GAZE_DEV=vid:pid or gaze -d vid:pid mcp. Two cameras on the bus: do not use the default.

MCP

The camera is the tool. q=v is the frame (JPEG). Moves stay one line so they do not burn tokens. After a move you already have state — do not call s again. Call v when you need to look.

{
  "mcpServers": {
    "gaze": {
      "command": "gaze",
      "args": ["-d", "2e1a:4c04", "mcp"]
    }
  }
}
q
v JPEG from the sensor (turns the camera on)
s status (text only)
c center
z 200 / z +20 zoom
p N / t N pan / tilt

Reply: 2e1a:4c04 z=200 p=0 t=0

Commands

gaze status name, zoom, pan, tilt, mode
gaze see [file] JPEG from the sensor (default see.jpg)
gaze center pan 0, tilt 0, default zoom
gaze zoom 200 absolute, or +20 / -20
gaze pan / gaze tilt same, native UVC units
gaze track on|off writes Insta360 mode XU (Link 2 GET_CUR is stale)
gaze deskview / overhead / whiteboard same
gaze normal mode XU off

FaceTime can keep the stream. Gaze uses IOKit DeviceRequest on the device node, no exclusive interface grab.

License

Apache 2.0.

PTZ uses USB Video Class 1.1 Camera Terminal controls. Insta360 mode bytes on XU unit 9 selector 2 are the community-documented map (normal / track / whiteboard / overhead / deskview), confirmed on a Link 2.

Product photos: Insta360 Link 2 / Link 2C, OBSBOT Tiny 3, Logitech Rally and Brio, Elgato Facecam Pro, Yealink UVC86.


Built with Festival

About

Give your agents eyes. Native PTZ. No vendor app.

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages