Cell - Ta Harness
Ta's runtime component on pi: the ta command and ta serve share this code. Code here doesn't depend on the Cell container, so ta doesn't load Cell.
| Export | Purpose |
|---|---|
TaCli.run(argv, options) | The ta command: serve starts the server; other arguments are passed to pi's main() |
TaBrand | Renames pi to Ta before loading (PI_PACKAGE_DIR points to the directory with piConfig); agentDir() computes ~/.ta/agent without loading pi |
SessionLock / SessionLockExtension(ta:session-lock) | Lock file beside the session file (draft first, then hard link, atomic create); the lock is no longer valid when the process exits. /resume on a locked session is canceled, and opening a locked session on startup shows a prompt and exits |
BrandExtension(ta:brand) | The startup header of the terminal interface: a pixel dinosaur DinoLogo, version, key bindings. It wraps by terminal width, doesn't show the dinosaur on narrow terminals or Apple Terminal, and changes the pi self-reference in the system prompt to Ta's |
ExecExtension(ta:exec) | When the execution environment is not local, replaces read / bash / edit / write / ls / find tools and takes over the ! command. pi's grep always runs ripgrep locally, so it's disabled (models call rg through bash) |
ExecOperations | Adapts ExecEnvironment to pi tool *Operations |
ExecMcpTransport | Starts a stdio MCP server in the execution environment, passes it to pi's createMcpExtension({ createTransport }) |
TaPackages | Ta's built-in pi packages (@celljs/ta-workspace, @celljs/ta-channels, @celljs/ta-extensions, @celljs/ta-computer-use, @celljs/ta-changes, @celljs/ta-cron, @celljs/ta-agents): on release they are in dist/pi/packages/<name>, in the repo they're resolved from the workspace. Enabled by default; disabled ones are recorded in ta.json in the agent directory. The ta command loads pi extensions, skills and prompt templates of enabled packages with --extension (except package management commands and --no-extensions); ta serve uses pi ResourceLoader's additionalExtensionPaths + extensionsOverride / skillsOverride / promptsOverride, and on reload selects by the current switches |
TaExtension / TaExtensionUtil | The shape of Ta's built-in extension: a plain object; bundle() combines built-in extensions into one, shown in pi's loaded extension list as ta |