Skip to content

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.

ExportPurpose
TaCli.run(argv, options)The ta command: serve starts the server; other arguments are passed to pi's main()
TaBrandRenames 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)
ExecOperationsAdapts ExecEnvironment to pi tool *Operations
ExecMcpTransportStarts a stdio MCP server in the execution environment, passes it to pi's createMcpExtension({ createTransport })
TaPackagesTa'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 / TaExtensionUtilThe 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