PiG README

The project's README from github.com/MichaelKinsy/PiG. As one markdown file: README.md.

PiG project banner: There are many agent harnesses, but this one is yours. Meet Pi-in-Go.

PiG

CI CodeQL OpenSSF Scorecard OpenSSF Best Practices REUSE status Go Reference Minimum Go version License: MIT Latest release Pi pin 1.0.3 Pi port progress Follow PiG on X Join r/PiGCodingAgent

PiG is Pi, the minimal and extensible coding agent for the terminal, rebuilt in Go as one native binary. It starts quickly, needs no Node.js, and runs Pi's TypeScript extensions unchanged. You can also write extensions in Go, Rust, or Python, and bundle extensions, skills, and prompts into a Piglet: one named agent you can share or build into its own executable.

PiG is a pre-stable 0.x release. Core paths are ported and checked against Pi 1.0.3 with paired parity scenarios; edge cases are still hardening. See the port status and file map for current scope and evidence.

If PiG behaves differently from Pi, that is either a bug or a documented divergence. Windows support is a preview.

Install

On macOS, Linux, or Android with Termux (arm64):

curl -fsSL https://pi-in-go.dev/install.sh | sh

On Windows, in PowerShell:

irm https://pi-in-go.dev/install.ps1 | iex

With npm, on any supported platform:

npm install -g @pi-in-go/pig

With Go:

go install github.com/MichaelKinsy/PiG/cmd/pig@latest

You can also download an archive from GitHub Releases or build from source. pi-in-go.dev/install covers every method, including updates and uninstalling.

Quick start

Start PiG in the directory where you want it to work, run /login to connect a subscription or set your provider's API key (for example OPENAI_API_KEY), then ask it something:

cd /path/to/project
pig

Interactive /login masks secret input by default. Turn off Mask secret input in /settings to restore Pi's plain-text typing and submitted input (D80). See login privacy.

The documentation covers everything else, starting with the quickstart. You can also ask PiG to explain itself.

Upstream Pi

Pi is the reference implementation. PiG follows Pi's behavior and design unless a Go constraint or an approved product-neutral requirement makes a difference necessary.

Use the upstream project for Pi itself:

PiG is not an official Pi release. The Pi maintainers do not endorse PiG.

Origins

Michael Kinsy created PiG working at Hewlett Packard Enterprise.

PiG is maintained as an independent open-source project. Project decisions, issues, and contributions belong in this repository. See docs/project/GOVERNANCE.md and docs/project/MAINTAINERS.md.

Compatibility philosophy

PiG adds a Go implementation to the Pi ecosystem and follows the Pi reference implementation.

The pinned Pi release is 0.99.1 at commit d86654abb8862e201933517d6f1fce9f88dd117f. The pin names the behavior oracle. It does not claim that every upstream change is already ported: test/parity/coverage.md reports verified behavior, and the upgrade ledgers under test/parity/upstream-sync/ list each upstream change and its disposition.

PiG's current package scope covers Pi's agent, AI, coding-agent, and TUI packages. It does not implement Pi's experimental remote Session packages or its standalone telemetry and evaluation packages. See docs/parity/PORT_MAP.md for the exact boundary.

Project facts

pig --version prints PiG's version as <PiG release>+<Pi release>, for example 0.3.0+0.99.1 (D63): the Pi release is semver build metadata, so the version sorts as the PiG release. pig version prints the PiG release and the pinned Pi release as separate fields. Neither command reads user configuration.

Repository map

Path Responsibility
agent/ Pi-compatible Agent loop, messages, and harness Session state.
ai/ Pi-compatible providers, model catalog, authentication, and streaming types.
coding/ Public coding-agent SDK, extension contracts, Package support, and Piglet support.
tui/ Public terminal components, rendering, input, and terminal lifecycle.
cmd/pig/ Stock PiG command-line application and RPC process surface.
internal/ Private implementation used by Stock PiG. External modules cannot import it.
extensions/ Go, Rust, Python, and declaration-only TypeScript extension SDKs.
piglets/ Explicit agent compositions such as PiG Standard and Pig Porter.
test/parity/ Pinned Pi correspondence, scenarios, inventories, and generated evidence.
test/ Integration, extension-conformance, clean-repository, and upstream-contract tests.
docs/ Maintainer references and the static public documentation site.
examples/ Small extension and embedding examples.
automation/ Build, generation, CI, release, layout, and maintainer tooling.

PiG aligns public package boundaries with Pi's agent, ai, coding-agent, and tui packages. Go files within a package follow cohesive implementation responsibilities instead of mirroring TypeScript file mechanics. docs/parity/PORT_MAP.md records every source correspondence.

Stock PiG and compositions

Stock PiG is the product-neutral binary built from this repository. It does not activate PiG Standard Resources, product authentication, product APIs, or deployment-specific behavior.

A Piglet explicitly selects Resources, tools, discovery, defaults, and environment requirements for one agent. A Package distributes Resources. A Package never owns or activates a Piglet. A Piglet Binary is a direct executable build output for one pinned Piglet composition.

PiG Standard is the explicit Piglet at piglets/standard/pig-standard.yaml. It currently selects the extension-provided PiG login, sprite catalogue, and PiG Runner. Run it from source with:

pig --piglet piglets/standard/pig-standard.yaml

Stock PiG never selects this composition implicitly. A Package can distribute its Resources, but a Package cannot own or activate the Piglet.

See CONTEXT.md and docs/README.md for the project terms and documentation map.

Security boundary

PiG runs with the permissions of the user who starts it. PiG does not provide a security sandbox for model output, tools, extensions, skills, hooks, or shell commands.

Use a container, virtual machine, or another operating-system boundary when you need isolation. Load extensions and project instructions only from sources you trust. See .github/SECURITY.md.

Install with npm

Install the command with npm (Node.js 18 or newer):

npm install -g @pi-in-go/pig
pig --version

Or run it once without installing:

npx @pi-in-go/pig --version

pig itself is the native binary: npm installs the matching platform package (@pi-in-go/pig-<os>-<cpu>, for macOS, Linux and Windows on x64 and arm64, and Android on arm64 for Termux) as an optional dependency, and Node.js runs only a small launcher. Do not install with --omit=optional or --no-optional, which leaves the binary out. Update with npm update -g @pi-in-go/pig and uninstall with npm uninstall -g @pi-in-go/pig. pig update does not replace an npm-installed binary; update through npm.

Install with Go

Install the command without a source checkout with Go 1.26 or newer:

go install github.com/MichaelKinsy/PiG/cmd/pig@latest

Go writes the pig executable to GOBIN, or to the bin directory of the first GOPATH entry when GOBIN is unset: $(go env GOPATH)/bin, which is ~/go/bin by default (%USERPROFILE%\go\bin on Windows). Add that directory to PATH. With an older Go 1.21 or later and the default GOTOOLCHAIN=auto, Go downloads a new enough toolchain automatically. Release binaries are built with Go 1.27.2.

Use an exact release such as @v0.2.0 when reproducibility matters. Update a Go installation by running go install again. Each release tags the root module (v0.2.0) and the Go extension SDK module (extensions/sdk/v0.2.0) on the same commit; go install needs both.

Build from source

PiG currently supports source builds on Linux, macOS, and Windows. Do not treat a platform as release-supported until its native release verification passes.

Requirements:

Build the binary:

go build -o bin/pig ./cmd/pig
./bin/pig --version

Prepare the exact Pi comparator and source mirror:

make upstream-mirror

Run the main local gate:

make check

The upstream-mirror target installs the lockfile-pinned Pi package. It retrieves the exact tagged Pi source and verifies its commit against internal/coding/pigversion/pigversion.go.

Contract model

A ported row means that code exists. It does not prove behavioral compatibility. A non-deferred scenario must exercise and assert the mapped behavior.

Extensions

PiG supports Go, Rust, Python, and Node extension factories through its public extension host. Extensions can register tools, commands, event handlers, flags, shortcuts, providers, and user-interface contributions.

Node extensions use Pi's TypeScript extension API. PiG supplies compatible runtime modules. The declaration-only package in extensions/sdk-ts adds types for PiG-only extension capabilities without replacing Pi's TypeScript runtime.

Start with:

Use pig extension init <directory> to scaffold an extension. Use pig install <path> --validate-only --json to validate it.

Supply-chain evidence

PiG treats scanner output as evidence input, not as proof by itself. Release preparation builds a validated dependency inventory and artifact-specific SPDX SBOMs. Reviewers reconcile scanner findings with Go modules, npm locks, Python metadata, Rust locks, embedded assets, generated data, and release contents.

See docs/supply-chain.md for the inventory, SBOM, vulnerability, license, signing, and provenance requirements.

Project policies

Acknowledgements

PiG would not exist without Pi and the work of its maintainers and contributors. Their design and open-source work provide the reference that PiG follows.

Thank you to everyone who contributes to Pi and PiG. Maintainers are listed in docs/project/MAINTAINERS.md, every contributor appears on GitHub's contributors page, and the changelog credits each fix to the person who reported or contributed it.

Star History

Star History Chart

PiG (MichaelKinsy/PiG)

Searching Database…

615 ·GitHub
What is this?PiG is a Go port of Pi, the minimal terminal coding agent originally written in TypeScript, rebuilt as a single native binary that starts quickly and needs no Node.js.
Is PiG a rewrite of Pi or something else?It is a parity-bound translation rather than a rewrite: upstream Pi's TypeScript behavior is the contract and Go is just the implementation language, so PiG still runs Pi's existing TypeScript extensions unchanged.
How do I install PiG?Install it with npm (npm install -g @pi-in-go/pig), with go install, by downloading a prebuilt archive from GitHub Releases, or by building from source; pi-in-go.dev/install covers every method including updates and uninstalling.
Do I need Node.js or an API key to use it?The native binary itself needs no Node.js (npm install just runs a small launcher around it); to actually use PiG you run /login to connect a subscription or set a provider API key such as OPENAI_API_KEY.
Is PiG stable enough to rely on right now?Not fully — it's a pre-stable 0.x release where core paths are ported and checked against Pi 1.0.0 via parity scenarios, but edge cases are still hardening, and Windows support is only a preview.
Which platforms does PiG run on?macOS, Linux, Windows (preview), and Android via Termux, with npm packages built for x64 and arm64.
Does PiG sandbox the agent's shell commands or model output?No — PiG runs with the permissions of the user who starts it and provides no security sandbox for model output, tools, extensions, skills, hooks, or shell commands; use a container or VM if you need isolation.
Can I write PiG extensions in languages other than TypeScript?Yes — alongside running Pi's existing TypeScript extensions unchanged, PiG ships extension SDKs for Go, Rust, and Python.
What is a Piglet?A Piglet is one named agent composition that bundles extensions, skills, and prompts together, which you can share or build into its own standalone executable.
Which upstream Pi version does this build track?PiG is pinned to Pi release 0.99.1, and files under test/parity/coverage.md and upstream-sync ledgers track exactly which behaviors are verified against that pin.
Size
186.6 MB
Stars
615
Age
1mo
Commits · 90 Days