Summary
Create and document the public "Fro Bot Agent" GitHub App that the gateway uses for /fro-bot add-project. The runtime code already shipped in v0.45.0/v0.46.x — this issue covers the App's identity and documentation, not its code.
Why this app exists
/fro-bot add-project owner/repo authenticates as a GitHub App, discovers the installation for owner, mints an installation access token, and clones the repo into the workspace before creating its Discord channel. Because installation tokens are scoped per-installation, onboarding repos across different accounts requires the App to be installed on each of those accounts — which means the App must be public ("any account"). It needs only the contents: read repository permission.
Ownership and visibility
- Owner: the
fro-bot account (brand-coherent with this repo and the existing gatewayGitHubAppInstallUrl default).
- Visibility: public. An external installation is inert on its own — it grants the App read access to that installer's repos only, and nothing happens unless a Fro Bot gateway operator runs
/fro-bot add-project for them. The private key lives only on the operator's gateway host.
- Permissions:
contents: read only. No webhook.
Deliverables (in this repo)
- Creation runbook —
docs/github-app-setup.md: step-by-step to register the App (name "Fro Bot Agent", contents: read, public, no webhook), generate the private key, and where the credentials go (the operator's gateway environment — never committed here). Make clear the App ID + PEM are consumed by the deployment, not stored in this repo.
- Logo asset — committed under
assets/ (SVG preferred, 512×512 PNG export). Uploaded to the App settings by the operator.
- Minimal docs page —
docs/github-app.md (GitHub-Pages-friendly): what the App does, exact permissions, privacy posture, install/uninstall instructions, link to the runbook for self-hosters.
- Default install URL constant — confirm/update
gatewayGitHubAppInstallUrl's default to the real App slug once the App exists, so the "App not installed" message in /add-project points operators at the correct install page.
Out of scope
- Registering the App itself — that's a manual step in the GitHub UI under the
fro-bot account (produces the App ID + private key). A human does this; it can't be automated.
- Provisioning the credentials — the operator seeds
GITHUB_APP_ID + GITHUB_APP_PRIVATE_KEY into their own deployment environment. Not this repo's concern.
- Runtime code — already shipped.
Note on the install-URL slug
The current default is https://github.com/apps/fro-bot/installations/new. If the registered App's slug differs (e.g. fro-bot-agent because the fro-bot slug is taken), update the default constant to match the real slug as part of deliverable #4, so operators aren't sent to the wrong App.
For the logo + docs page (the same agent roster is available in this repo's OpenCode session):
Design the minimal public identity for the "Fro Bot Agent" GitHub App.
Context: Public GitHub App granting a self-hosted Discord gateway read-only repo access for the /fro-bot add-project owner/repo command. Permission: contents: read only. Owner: fro-bot. Audience: the GitHub App listing page + a minimal docs page.
Deliverables:
- Logo — SVG (+ 512×512 PNG export). Flat, geometric, legible as a 64px circle avatar, no text, works on light AND dark backgrounds, no Discord/GitHub-brand mimicry. Boring, trustworthy, developer-tooling aesthetic. Provide 2–3 concepts with one-line rationale each.
- Docs page — single markdown file (
docs/github-app.md): what the app does, exact permissions (contents: read), privacy posture ("inert unless paired with a Fro Bot gateway in your Discord server"), install link, how to uninstall, link to the creation runbook.
- Listing copy — ~150-char description + a short tagline for the App page.
Constraints: plain markdown / static assets only — no frontend frameworks or build tools. Low-effort to maintain, easy to delete later.
Summary
Create and document the public "Fro Bot Agent" GitHub App that the gateway uses for
/fro-bot add-project. The runtime code already shipped in v0.45.0/v0.46.x — this issue covers the App's identity and documentation, not its code.Why this app exists
/fro-bot add-project owner/repoauthenticates as a GitHub App, discovers the installation forowner, mints an installation access token, and clones the repo into the workspace before creating its Discord channel. Because installation tokens are scoped per-installation, onboarding repos across different accounts requires the App to be installed on each of those accounts — which means the App must be public ("any account"). It needs only thecontents: readrepository permission.Ownership and visibility
fro-botaccount (brand-coherent with this repo and the existinggatewayGitHubAppInstallUrldefault)./fro-bot add-projectfor them. The private key lives only on the operator's gateway host.contents: readonly. No webhook.Deliverables (in this repo)
docs/github-app-setup.md: step-by-step to register the App (name "Fro Bot Agent",contents: read, public, no webhook), generate the private key, and where the credentials go (the operator's gateway environment — never committed here). Make clear the App ID + PEM are consumed by the deployment, not stored in this repo.assets/(SVG preferred, 512×512 PNG export). Uploaded to the App settings by the operator.docs/github-app.md(GitHub-Pages-friendly): what the App does, exact permissions, privacy posture, install/uninstall instructions, link to the runbook for self-hosters.gatewayGitHubAppInstallUrl's default to the real App slug once the App exists, so the "App not installed" message in/add-projectpoints operators at the correct install page.Out of scope
fro-botaccount (produces the App ID + private key). A human does this; it can't be automated.GITHUB_APP_ID+GITHUB_APP_PRIVATE_KEYinto their own deployment environment. Not this repo's concern.Note on the install-URL slug
The current default is
https://github.com/apps/fro-bot/installations/new. If the registered App's slug differs (e.g.fro-bot-agentbecause thefro-botslug is taken), update the default constant to match the real slug as part of deliverable #4, so operators aren't sent to the wrong App.Suggested @designer brief
For the logo + docs page (the same agent roster is available in this repo's OpenCode session):