Skip to content

docs: run a minimal agent on the pi runtime locally (no fleet repo); verify on Linux and macOS #6485

Description

@waynesun09

Problem

Running agents locally assumes the fleet: clone fullsend-ai/agents, run triage/review/code on Claude Code. With runtime: pi landing in #6467 (#6464) developers want to build on the pi runtime now — but the fleet side (fullsend-ai/agents#935: **/pi policies, .pi/ protected paths, harness image-digest bumps) is not done, so a full fleet agent run on pi is not possible yet.

A basic local run on pi is already possible without the fleet repo, because fullsend run --fullsend-dir <dir> resolves a config-registered agent to a local harness and runtime: pi in that directory's config.yaml selects the backend (internal/cli/run.go resolveAgentSource / backendFromConfigFile). Nothing documents that path, and it has not been verified on both supported platforms.

What to document

A new section in docs/guides/user/running-agents-locally.md (and a pointer from docs/runtimes.md "Pi-specific known constraints"): "Run a minimal agent on the pi runtime" — no fullsend-ai/agents clone required.

Minimal --fullsend-dir layout to describe and ship as a copy-pasteable example (e.g. docs/examples/pi-hello/ or an eval/-style fixture):

pi-hello/
├── config.yaml          # version: "1", runtime: pi, agents: [{name: hello, source: harness/hello.yaml}]
├── harness/hello.yaml   # agent: agents/hello.md, role: triage, image: <sandbox image with PI_VERSION>,
│                        # policy: policies/local.yaml (Vertex egress), model: haiku
├── agents/hello.md      # Claude-style agent file: frontmatter tools: Bash(ls), Write + a deterministic task
└── policies/local.yaml  # minimal OpenShell policy: *.googleapis.com, binaries **/node (and **/pi)

Run shape:

fullsend run hello \
  --fullsend-dir ./pi-hello --target-repo /tmp/target-repo \
  --env-file fullsend-gcp.env --no-post-script --keep-sandbox --output-dir /tmp/fullsend
# expect: runtime: selected "pi" from ./pi-hello/config.yaml

Cover: what the run prints (runtime: selected "pi", pi --version preflight), the artifacts (output.jsonl session header, transcripts/<agent>-<timestamp>_<id>.jsonl, metrics.json with "runtime": "pi", pi-debug.log with --debug), skills/analyze-transcript on the session file, the knobs (FULLSEND_PI_MODEL, FULLSEND_PI_PROVIDER, FULLSEND_PI_BASH_ALLOWLIST=enforce), credentials (a service-account key or WIF config in GOOGLE_APPLICATION_CREDENTIALS; the local-run guide's existing GCP section applies — the pi Vertex provider reads the same variables), and the security hooks (on by default; the run refuses to start without the adapter, exit 97).

Image and CLI until the release ships

  • Until a release publishes sandbox images built from feat(#6464): add the pi runtime (stream parser, Bootstrap/Run, Vertex provider, enablement) #6467, build images/sandbox/Containerfile locally (podman build -t localhost/fullsend-sandbox:pi images/sandbox) and point the run at it with FULLSEND_SANDBOX_IMAGE=localhost/fullsend-sandbox:pi (or set image: in the local harness). Document that this goes away once the published fullsend-sandbox image carries PI_VERSION.
  • Build the CLI from the branch/tag (make build); on macOS note --fullsend-binary for the Linux binary copied into the sandbox and FULLSEND_SANDBOX_ARCH (see the guide's Platform notes).

Verification

  • Fedora + rootless Podman (the existing Linux notes): the minimal run completes, metrics.json says runtime: pi, a toolCall appears in the session transcript, analyze-transcript summary works
  • macOS (Apple silicon, Podman machine; an internal Mac host is available for this): same run, plus the arch/--fullsend-binary notes verified
  • A planted .pi/extensions/evil.js in the target repo is not loaded (the --no-approve / defaultProjectTrust: never guarantee) — cheap to include as a "what the sandbox protects you from" step
  • After the release: replace the local-image step with the published image and re-run once on each platform

Acceptance criteria

  • Guide section + example directory merged; docs/runtimes.md links to it
  • Both platform checklists above ticked with the CLI/image versions used
  • No dependency on fullsend-ai/agents for the minimal run (fleet agents on pi remain tracked in Enable fleet agents on the pi runtime agents#935)

Related

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions