Pukbot
Pukbot is an agent-first Rust CLI for typed GitHub operations through the Pukbot GitHub App.
The CLI never receives the GitHub App private key or an installation token. A protected GitHub Actions environment mints a short-lived, repository-scoped token, performs the operation, and discards the token.
Install
Install the public GitHub App on the repositories where comments may be posted:
Grant access only to the repositories that need Pukbot. The App requests issue and pull request write access so the protected workflow can post comments.
Linux and macOS:
|
Windows PowerShell:
irm https://gitbot.pulkit.page/install.ps1 | iex
Cargo:
The installers download the matching binary from GitHub Releases and verify its SHA-256 checksum before installation.
Update an installed release binary with the same checksum verification:
Generate or install shell completions for Bash, Zsh, Fish, Elvish, and PowerShell:
Print a manual page or generate one page per command:
Use
Create a comment on an issue or pull request:
Read a multiline comment from a file or standard input:
Edit, delete, or react to a comment by its database ID:
For named inline media, provide one JSON request:
Apply it:
Each media object accepts exactly one path or url. Pukbot replaces every
named placeholder in place. Local files up to 100 MiB support PNG, JPEG, GIF,
WebP, BMP, TIFF, AVIF, SVG, MP4, MOV, WebM, MKV, M4V, MP3, WAV, OGG, M4A,
FLAC, AAC, PDF, text, Markdown, JSON, CSV, ZIP, Gzip, Tar, and 7-Zip.
Local media is uploaded as a content-addressed public asset in Pukbot's
comment-assets prerelease. Images render inline. Video, audio, documents, and
archives render as links. Do not upload secrets or private media.
Inspect the stable machine-readable feature inventory:
Issue operations include create, edit, close, reopen, labels, assignees, and
reactions. Pull request operations include create, edit, close, reopen,
squash-merge, ready, draft, review, labels, assignees, reactions, and branch
updates. Every mutation is also accepted by pukbot apply as typed JSON.
See Operations for the complete command and JSON contracts.
Every comment ends with:
*Automated comment posted by Pukbot from an agent-assisted workflow.*
from: @authenticated-user
The CLI follows the workflow, streams its status, shows failed logs, returns a failing exit code on failure, and prints the posted comment URL on success.
GitHub CLI must be installed and authenticated. The authenticated user needs
permission to dispatch the Operation workflow in pulkitxm/pukbot. Local
media uploads also require permission to upload release assets there.
Agent instructions
Add this to AGENTS.md:
Perform supported GitHub mutations through Pukbot. Do not call GitHub mutation
commands directly.
pukbot comment create <number> --repo <owner/repository> --body "<message>"
Use a JSON request with `pukbot apply --input <file>` for named inline media.
Use `--json` when consuming output. Local media is uploaded publicly. Pukbot
appends the required disclosure footer to comments.
Security
The Pukbot App private key is stored only as a GitHub Actions environment secret. It is never embedded in the crate, release binaries, Pages artifacts, or installer scripts. Installation tokens are narrowed to one repository and expire automatically.
The release workflow uses crates.io Trusted Publishing with GitHub OIDC after the initial crate publication. No long-lived crates.io token is stored in the repository.
See SECURITY.md for vulnerability reporting and the complete trust model.
Development
Contributions are welcome. See CONTRIBUTING.md.
Project governance and support are documented in GOVERNANCE.md and SUPPORT.md.