Skip to content

feat(paw): wire genesis_token so Paw agents can push to Genesis - #400

Open
rita-aga wants to merge 1 commit into
mainfrom
codex/paw-genesis-token
Open

feat(paw): wire genesis_token so Paw agents can push to Genesis#400
rita-aga wants to merge 1 commit into
mainfrom
codex/paw-genesis-token

Conversation

@rita-aga

Copy link
Copy Markdown
Collaborator

What this does

Wires the Paw agents' Genesis push credential so they can publish/update app bundles to the Genesis registry.

Why

Genesis (ADR-0025) requires auth on git push — an anonymous push fails with could not read Username, which is exactly what blocked a Paw agent from publishing to Genesis. Agents had no Genesis credential: the only documented git pattern was the GitHub one (temper.get_secret("github_token") embedded in the URL), with no Genesis equivalent and no genesis_token secret.

A broad, revocable fleet GitToken (gt-paw-agent, scopes repo:read,repo:write,pr:write,pr:merge,admin:repos — push/edit any repo and create new apps; no force/admin:tokens) is already minted on Genesis and verified with a real push. Its secret is stored as the openpaw env var GENESIS_TOKEN. This PR makes openpaw seed that into the secret vault and teaches agents to use it.

Changes

  • config.rs — new genesis_token field, loaded from GENESIS_TOKEN env (mirrors github_token / GITHUB_TOKEN).
  • startup.rsseed_secret!(… "genesis_token" …) so temper.get_secret("genesis_token") resolves the seeded value.
  • setup_api.rsgenesis_token added to the allowed-secret-keys set and the setup secrets schema (Integrations).
  • paw-agent skill (temperpaw-agent/SKILL.md) — adds the "Pushing app bundles to Genesis" pattern: supply the token as the Basic-auth username (git push https://{genesis_token}@<genesis-host>/<owner>/<repo>.git).
  • Regression test: genesis_token_is_a_known_integration_secret asserts it's in both the allowed keys and the schema.

Verification

  • cargo test -p temperpaw genesis_token_is_a_known_integration_secret — green.
  • The gt-paw-agent token was verified end-to-end against prod Genesis (receive-pack 401→200; real push to a throwaway repo succeeded, then archived).
  • After openpaw redeploys with this change (env GENESIS_TOKEN already set), a Paw agent can publish/update a Genesis app end-to-end.

Companion

Genesis bundle-serving fix that unblocked installs: nerdsane/temper#307 + arni-labs/genesis#29 (already deployed + verified).

Genesis (ADR-0025) requires auth on git push; Paw agents had no Genesis
credential (only a github_token pattern), so publishes failed with
"could not read Username". Load GENESIS_TOKEN env into the secret vault
as genesis_token (mirrors github_token), expose it in the setup secrets
schema, and document the Genesis push pattern in the paw-agent skill
(token supplied as the Basic-auth username).

The broad fleet GitToken (gt-paw-agent) is already minted + verified on
Genesis; its secret is the GENESIS_TOKEN env on openpaw.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant