Pimp My IDE / remote agent intake
Back to garage
October 3, 2026 | self-hosting / coding agents / custody

A pod is a custody chain.

Pi pod can move a Pi coding-agent session to a server you run. The useful question is not whether the agent is remote. It is which layer owns the files, policy, identity, secrets, and recovery.

Self-hosting changes the custodian. It does not remove custody. Trace the workspace into the pod, the pod into the host, and every result back out.

The artifact is real. The hosted product is not here yet.

Pi pod is an AGPL-licensed repository with a command-line client, server, native sandbox service, iOS source, Android source, and a Docker Compose deployment. The project says the hosted service is coming soon and is not available. Its self-hosted path is the product you can inspect and run today.[1]

We cloned revision 2276084a701edd6b549cfd49624d54223bbf353c. The npm registry returned @pipod/cli 0.1.5 for Node 22.19 or newer. A clean temporary install printed the CLI help and exposed launch, attach, stop, transfer, archive, secrets, settings, jobs, doctor, and dry-run routes. The checked-out CLI also passed its own runtime-surface and TypeScript checks.[4]

A published client proves there is a handle. It does not prove the server, isolation, or recovery path on your host.

Workspace transfer is the first custody decision.

The CLI does not seed every project the same way. For a clean checkout whose pushed remote tip matches HEAD, it clones the exact commit. For dirty trees, unpushed commits, plain directories, and private remotes without usable credentials, it streams a tar archive instead. That archive excludes ignored paths, node_modules, and .pi-pod/env. It can include .git when the repository fits.[2]

That branch matters. Clone mode transfers a named revision. Archive mode transfers a snapshot of local state. Empty mode transfers nothing. Use --dry-run to inspect the decision before creating a pod. Private-remote credentials are forwarded only after approval and are not stored, according to the CLI guide. Confirm that behavior on the release you deploy.

The sandbox and the host are one failure boundary.

The self-hosted stack runs Postgres, Zitadel, the control plane, and the sandbox on one Linux host. The sandbox container is privileged because it mounts overlay filesystems, writes cgroup limits, and creates network namespaces. The Compose file states the host kernel is the isolation boundary.[3]

That is more precise than saying "the agent runs in a container." A container can limit a pod while the privileged sandbox service still depends on the host kernel and operator configuration. Host compromise, a weak kernel boundary, broad credentials, and public exposure remain system questions. A pod shape is not a security verdict.

Self-hosted secrets still have an owner.

The first installation generates deployment secrets. The guide calls out two values that need offline backups separate from database dumps. The Zitadel master key seals identity keys. The secret-encryption key encrypts stored secrets. A restored database is not enough if either required key is gone.[3]

The initial service listens on port 8080 on every interface. The guide says to keep it off the internet until HTTPS and the public route are configured. It also warns that Docker-published ports can bypass host firewalls such as ufw. Local use, tunneled use, and public mobile use are three exposure states, not one setup step.

Recovery has a stop cost.

The upgrade path builds new images, takes database dumps, applies migrations, and checks health. Recreating the sandbox ends live sessions. Workspace files persist on the sandbox volume, so a later attach can resume from those files. That is file persistence, not proof that an interrupted command, process, or external effect can resume safely.[3]

Before adoption, run one launch in each workspace-transfer mode you plan to allow. Stop the sandbox during disposable work. Restore the database and both required keys in a clean environment. Check the public route with a denied user. Then move a file back through the client and compare it with the source. The chain is complete only when the result returns.

Interactive makeover / pod custody launch bay

Choose what crosses the airlock.

This replaces one remote-launch button. Pick the workspace transfer, select the launch-plan sections, and copy a custody card that keeps every missing result visible.

Source
Policy
Host
Return

Launch controls

Choose the actual workspace transfer. Select only the plan sections you will fill before launch.

Workspace transfer
Launch-plan sections

Airlock receipt

The carriage follows the native transfer selector. Checklist completion means the template has sections. It does not mean the server or sandbox passed them.

Transfer: clone exact commit0 of 4 sections selected
This bay drafts a launch review. It does not install pi pod, expose a service, move credentials, create a sandbox, or verify host isolation.

Sources read

Source log and evidence boundary
  1. Pi pod project page and pi-pod/pipod repository, read October 3, 2026. The project page describes self-hosting as available and the hosted service as forthcoming. The repository supplied the component map, license, installation route, and hosted-edition boundary.
  2. Pi pod CLI guide at revision 2276084, read October 3, 2026. It documents clone, archive, and empty workspace seeding; dry-run; credential forwarding; secret input; transfer commands; and the client/server version guard.
  3. Self-hosting guide and Compose deployment, read October 3, 2026. These files document sizing, service placement, port exposure, offline key backups, upgrades, database dumps, privileged sandbox operation, the host-kernel boundary, and live-session interruption.
  4. @pipod/cli 0.1.5 on npm, inspected October 3, 2026. A temporary clean install on Node 22.22.2 ran pipod --help successfully. The cloned CLI passed npm run check, including its runtime-surface check and TypeScript typecheck. No server was installed and no pod was launched.
  5. Hacker News item 49937304, resolved through the official API and read October 3, 2026. It was the discovery route. Reader comments are not used as evidence for isolation or product behavior.

Evidence boundary. The architecture and behavior claims come from project-owned source and documentation. Pimp My IDE verified repository access, package publication, the CLI help path, and the project's static checks. We did not run the Compose deployment, configure Zitadel, launch a pod, inspect network namespaces, test the privileged sandbox, restore a backup, or audit the code.