# T3 Code
> How an ivar session opens in T3 Code, what it shares with Claude Code, and the write guard's limit there.
Source: https://ivar.run/docs/providers/t3

import { Callout } from 'fumadocs-ui/components/callout';

T3 Code is a desktop app that runs agents. The `t3` provider opens an ivar
session's view directory as a T3 Code project, so the agent you start there
works inside the session instead of at the hall root. Setup is
harness-agnostic — see the [quickstart](/docs/quickstart). This page covers what
is specific to T3 Code.

## It hosts Claude Code

`t3` owns no config of its own. The agent in a T3 Code thread is Claude Code, so a
`t3` session reads the same `.claude/`, `CLAUDE.md` and `.mcp.json` as a
`claude-code` session, and the write guard hook is the same one. For that reason
`t3` requires `claude-code` in the hall's provider list. The memory hooks are
Claude Code's too: `.claude/settings.json` runs `ivar memory capture --provider
claude-code` on each event and `ivar memory brief --provider claude-code` on
`SessionStart`. T3 Code records the session end when you archive the thread,
not when a turn finishes. See [Hall memory](/docs/guide/memory).

```sh
ivar provider add t3
```

`ivar provider remove claude-code` is refused while `t3` is listed.

## Start a session

```sh
ivar session start --provider t3
ivar session start checkout --provider t3
```

The first opens a discovery session, the second a session on the `checkout` feature.

This runs the usual session setup, then `t3 app <view dir>`, which registers the
directory as a T3 Code project and opens it. It does not need a terminal, takes
no `--prompt` and cannot `--resume`: start a thread in the project and talk to it
there. If the T3 Code desktop app is not running, the session is still created and
`ivar` warns; open it later with `ivar session connect <session>`.

`ivar session stop` removes the project without `--force`. T3 Code refuses to
remove a project that holds threads, so it stays and `ivar` names it in a warning;
`--force` would delete those threads, so `ivar` never passes it.

`ivar` runs the `t3` named by `T3CODE_CLI_PATH`, which T3 Code sets for its agents, or
else the first `t3` on `PATH`. It needs t3 0.1.0 or newer: an older `t3` is refused
with `t3.version_unsupported`, and `ivar doctor` reports it.

<Callout type="warn" title="No kernel sandbox">
  A `claude-code` session runs under a Landlock sandbox that `ivar` applies when it launches the agent. A T3 Code
  agent is a child of the T3 Code server, so a `t3` session has no kernel sandbox: the guard hook is the only enforcement,
  and a shell command can write outside the session's writable set. T3 Code's own git buttons also act on the hall
  repository, not on the feature's worktrees.
</Callout>

## Check it

```sh
ivar doctor
```

reports a missing `t3` binary, a `t3` older than 0.1.0 (`t3.version_unsupported`) and a T3 Code server that does not answer.
