Skip to content
Back to skills

Codevisor Clients

ASecurity

See and drive the Codevisor apps the user has open (macOS and iOS) — which windows exist, what each is showing, which one sent the current message — and navigate them, open pages, arrange panes and tabs, or control the window. Use when the user asks to show, open, focus, or lay out something in Codevisor, or when you want to put an agent's workspace or result in front of them.

  • 16 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 26, 2026
development

Works with

  • cli

Security analysis

A100/100

Scanned September 26, 2026

npx -y skills add 851-labs/codevisor --skill codevisor-clients --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Codevisor Clients?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Codevisor Clients
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/851-labs-codevisor-clients/badge)](https://www.skillsdirectory.com/skills/851-labs-codevisor-clients)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: codevisor-clients
description: See and drive the Codevisor apps the user has open (macOS and iOS) — which windows exist, what each is showing, which one sent the current message — and navigate them, open pages, arrange panes and tabs, or control the window. Use when the user asks to show, open, focus, or lay out something in Codevisor, or when you want to put an agent's workspace or result in front of them.
---

# Codevisor clients

A **client** is one open Codevisor window: a macOS window or the iOS app. The user may have several open at once, on different devices.

```js
;async () => clients.list()
// [{ id, name, platform: "macos" | "ios", machine, online, isOrigin, lastActiveAt?,
//    viewing: { workspaceId?, sessionId?, page?, panes? }, capabilities? }]
```

- `isOrigin` marks the window that sent the message you're handling now. Automations and agents started by other agents have **no** origin, so don't assume one exists.
- `viewing` is what the window currently shows.
- `capabilities` says what the window supports. iOS has no free window geometry, for example.

You decide which client to act on. Usually it's the origin, or the most recently active window on the device the user is using. Avoid acting on every client at once: panes appearing on the user's phone are rarely wanted.

## Acting on a client

```js
;async () => {
  const all = await clients.list()
  const target =
    all.find((c) => c.isOrigin) ??
    all.sort((a, b) => (b.lastActiveAt ?? "").localeCompare(a.lastActiveAt ?? ""))[0]
  if (!target) return "No Codevisor window is open"
  await target.navigate({ workspaceId, destination: { kind: "chat", id: sessionId } }) // show a chat
  return target.context() // tabs, panes, and supported actions
}
```

- `c.context()`: full layout, ids, and supported actions. Read it before calling `layout`.
- `c.navigate({ workspaceId, destination?: { kind: "chat" | "tab" | "pane" | "leaf", id } })`: open or select.
- `c.openPage({ page, … })`: home, a new chat, or settings.
- `c.layout({ action, … })`: new_tab, split, move, detach, resize, reorder_tabs, rename_tab. Panes are created in the background unless you pass `focus: true`.
- `c.window({ action, … })`: focus, minimize, fullscreen, frame, sidebar.

These wrap `tools.codevisor.clients.*`; use `tools.describe.tool` for full schemas. Clients on another machine: `(await machines.get("macbook")).clients.list()`.

## Disconnects

A window can close at any moment. Calls on a closed window throw `ClientUnavailableError` with `{ clientId, clientName, phase }`. Re-list the clients and choose again rather than retrying the same id.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.