GitHub provider connection (hosted TypeScript service)
Keycli supports a narrow but real GitHub Actions live slice in the hosted control plane. Use this after the preview-only Vercel demo if you want to show the flagship mixed-provider wedge.What is live now
- ✅ store a GitHub ProviderConnection
- ✅ test/validate that connection from the hosted API
- ✅ upsert/rotate a repository Actions secret through the GitHub API
- ✅ surface workspace-scoped GitHub readiness through authenticated
GET /v1/capabilities - ✅ participate in mixed-provider execution when every provider in the plan is connected and supported
- ✅ post a plan summary comment into the linked GitHub issue/PR when a
github-commentapproval request is created and a connected GitHub ProviderConnection exists - ✅ capture approval from a signed GitHub
issue_commentwebhook when a comment contains an explicit/keycli approve <plan-id>command and matches the plan’s repo/issue-or-PR context + allowlist
What is not built yet
- ❌ GitHub App installation flow
- ❌ broad GitHub automation beyond the secret-rotation + approval wedge
Token expectations
Use a GitHub token that can:- read the current user
- read repository metadata for the target repo
- write Actions secrets for the target repo
- Actions: read/write
- Metadata: read
- Issues: write (or equivalent issue/PR comment permission for the repos where Keycli should post approval requests)
Configure a GitHub connection
Start the hosted API:scope.
Test the connection
This validates the token and, if you passrepository, confirms repository access for the live path.
reason: "github_scope_mismatch" and keeps live execution unavailable for that target.
Inspect workspace readiness
Narrow GitHub-native approval capture
This is intentionally small and honest:- you create an approval-gated plan with
requestChannel: "github-comment" - you attach the GitHub repo + issue/PR context where approval should happen
- you allowlist the GitHub usernames that may approve
- if a GitHub ProviderConnection is connected, Keycli posts a summary comment back into that same thread with the exact approval command
- GitHub sends an
issue_commentwebhook to Keycli - Keycli approves the existing plan only if the comment body contains the exact command shape
/keycli approve <plan-id>and the repo/context/approver all match
requestComment.status: "failed" so the missing posting step is explicit in plan metadata and audit logs.
Configure a GitHub webhook for that repo to point at:
KEYCLI_GITHUB_WEBHOOK_SECRET value as the GitHub webhook secret.
Only the Issue comments event is needed.
What this slice does not do yet:
- it does not install a GitHub App for you
- it does not retry or reconcile GitHub comment delivery beyond the single post attempt recorded in plan metadata
- it does not infer approvers from repo membership; the allowlist on the plan is the source of truth tonight
Flagship live wedge: Vercel + GitHub Actions
This is the strongest live story today, but it is not the safest first demo. Prereqs:- Vercel connection is connected
- GitHub connection is connected
- you know the Vercel project and GitHub repo you want to target
plan.execution.mode: "provider-api"plan.execution.reason: "all_provider_connections_ready"plan.risk.level: "high"- response
nextAction: "wait_for_approval"
- rotate the Vercel env var via Vercel API
- rotate the GitHub Actions secret via GitHub API
- trigger the Vercel deploy step
- persist audit + run events without leaking the secret value