One-line install & tarballsΒΆ
What the script doesΒΆ
install.sh is a single POSIX shell file, wrapped in main() { β¦ }; main "$@" so a truncated download can't run half a script. It has two modes:
Checkout mode. If a pet.json sits next to the script (you cloned the repo), it just runs packaging/bin/clippy-pet install from the checkout, offline.
Remote mode. Otherwise it:
- Resolves the latest release by reading the
Location:header ofhttps://github.com/adammatthewsteinberger/clippy-pet/releases/latest(no API calls, no rate limits). SetCLIPPY_PET_VERSION=v1.1.0to pin. - Downloads
clippy-pet-<version>.tar.gzandSHA256SUMSfrom that GitHub Release into a temporary directory. - Verifies the tarball's SHA-256 against
SHA256SUMSusingsha256sumorshasum -a 256, and aborts on mismatch. - Extracts it and runs
bin/clippy-pet install "$@", forwarding any flags you passed after--. - Cleans up the temporary directory.
It never uses sudo, never writes outside the temp dir and ${CODEX_HOME:-$HOME/.codex}/pets/clippy-pet/, and needs only curl, tar, and a checksum tool.
Read scripts/install.sh on GitHub
Flags you can forward
curl -fsSL β¦/install.sh | sh -s -- --link # symlink the pet dir to the extracted payload
curl -fsSL β¦/install.sh | sh -s -- --force # overwrite even if identical/edited
curl -fsSL β¦/install.sh | sh -s -- --migrate # also remove a legacy ~/.codex/pets/clipster
curl -fsSL β¦/install.sh | sh -s -- --codex-home DIR # explicit Codex home
curl -fsSL β¦/install.sh | sh -s -- --quiet
Note that --link points the pet directory at the extracted temp copy in remote mode, which is removed at the end; use --link from a checkout or an extracted tarball you intend to keep.
The tarballsΒΆ
Every release attaches the same tree in five compressions: .tar.gz, .tgz (identical bytes, different suffix for the tools that insist), .tar.bz2, .tar.xz, and .zip.
clippy-pet-<version>/
βββ bin/clippy-pet POSIX sh CLI, version and data dir baked in
βββ share/clippy-pet/pet.json
βββ share/clippy-pet/spritesheet.webp
βββ share/man/man1/clippy-pet.1.gz
βββ share/applications/io.github.adammatthewsteinberger.clippy_pet.desktop
βββ share/metainfo/io.github.adammatthewsteinberger.clippy_pet.metainfo.xml
βββ share/icons/hicolor/256x256/apps/io.github.adammatthewsteinberger.clippy_pet.png
βββ install.sh
βββ LICENSE
βββ NOTICE.md
They're built by packaging/dist/make-tarballs.sh with sorted entries, zeroed ownership, and SOURCE_DATE_EPOCH from the tagged commit, so rebuilding the same tag yields the same bytes. Source-based package recipes (Homebrew, AUR, Nix, and friends) fetch the .tar.gz, not GitHub's auto-generated source archive, because the repository also carries ~19 MB of source frames and QA evidence that end users don't need.
Using a tarball directly:
The CLI that does the workΒΆ
clippy-pet [install] [--codex-home DIR] [--link] [--force] [--if-missing] [--migrate] [--quiet] [--gui]
clippy-pet uninstall
clippy-pet status exit 0 current Β· 1 not installed Β· 2 outdated
clippy-pet sync install --if-missing (what autostart runs)
clippy-pet path
clippy-pet autostart enable|disable|status
clippy-pet version
man clippy-pet has the long version. It's shellcheck-clean POSIX sh, tested under dash, bash, BusyBox ash, and macOS /bin/sh, and it finds its payload by looking (in order) at $CLIPPY_PET_DATA, the baked-in data dir, paths relative to itself, and the usual /usr/share, /usr/local/share, /opt/homebrew/share locations.