---
title: "Panels · intentic sandbox API"
description: "Each repository's dev server: what it is and whether it is running. Every route in the panels group of the intentic sandbox API, with its input, its answer and a playground."
url: "https://intentic.dev/api/panels/"
---

The workspace

# Panels

Each repository's dev server: what it is and whether it is running

**On this page (3 sections)**

- [Repos you can run and preview](#panels-list)
- [Start a repo's dev server](#panels-start)
- [Stop a repo's dev server](#panels-stop)

One entry per repo, with whether its preview server is up and what the app worked out about its contents. Starting and stopping are here; watching the output is the terminal's job.

**GET`/panels` Repos you can run and preview**

Every repo with whether its dev server is up and what the sandbox worked out about its contents.

### What you send

Nothing. Call it as it is.

### What comes back

| Field | Type |
| --- | --- |
| `panels` One entry per repository, worked out… | object[] |
| `repo` Which repository | string |
| `hasPanel` Whether it has anything runnable at… | boolean |
| `running` Whether the sandbox has it running | boolean |
| `healthy` Whether anything it owns is actually… | boolean |
| `port` The port the sandbox told it… | number |
| `servers` Every server this repository is really… | object[] |
| `url` Where it answers, with the right… | string |
| `dir` Which part of the repository it… | string |
| `session` The terminal it runs in: the… | string |
| `previewUrl` Where to open it from outside | string |
| `role` Which of the workspace's three fixed… | "intent" | "desired-state" | "app" |
| `deployConfig` It declares infrastructure | boolean |
| `desiredState` That declaration has been resolved at… | boolean |
| `directoryUi` It carries a small interface of… | boolean |
| `monorepo` It holds several packages | boolean |
| `vitest` It has tests that can be… | boolean |
| `userStories` It carries stories an agent could… | boolean |
| `docs` It carries generated architecture documentation | boolean |

Try it answered in this tab

curl

```bash
curl "$SANDBOX/panels" \
 -H "x-intentic-control: $INTENTIC_TOKEN"
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.panels.list();
```

**POST`/panels/{repo}/start` Start a repo's dev server**

Brings the repo's own runnable app up in a terminal you can attach to, so its preview address starts answering.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `repo` required Which repository | string | address |

### What comes back

| Field | Type |
| --- | --- |
| `ok` Always true | true |

Try it answered in this tab

curl

```bash
curl -X POST "$SANDBOX/panels/root/start" \
 -H "x-intentic-control: $INTENTIC_TOKEN"
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.panels.start({
 "repo": "root"
});
```

**POST`/panels/{repo}/stop` Stop a repo's dev server**

Shuts it down and frees the port.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `repo` required Which repository | string | address |

### What comes back

| Field | Type |
| --- | --- |
| `ok` Always true | true |

Try it answered in this tab

curl

```bash
curl -X POST "$SANDBOX/panels/root/stop" \
 -H "x-intentic-control: $INTENTIC_TOKEN"
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.panels.stop({
 "repo": "root"
});
```

More in The workspace

[Previous ← Chores](https://intentic.dev/api/chores/)[Next Ports →](https://intentic.dev/api/ports/)
