Ship onto gluecron in five minutes.
Everything an owner migrating a product onto gluecron needs in one page. If something's unclear, open an issue — link at the bottom.
Getting started
Register, verify, and create your first repo.
Git over HTTPS
HTTPS works out of the box. Authenticate with your account password or, better, a personal access token.
git clone https://<your-host>/<owner>/<repo>.git
git push origin main
git pull origin main
Git over SSH
SSH avoids typing credentials and is recommended for day-to-day work.
~/.ssh/id_ed25519.pub) and paste it into /settings/keys. Keys take effect immediately.git clone git@<your-host>:<owner>/<repo>.git
Importing from GitHub
One-time mirror with full history, branches, and tags.
Webhooks
Per-repo webhooks live at /:owner/:repo/settings/webhooks. Register a URL, pick events (push, issue, pr, star), and set a secret.
X-Gluecron-Signature: sha256=<hex>. Compute HMAC-SHA256 over the raw request body using your secret and compare in constant time.{
"event": "push",
"repo": { "owner": "acme", "name": "api" },
"ref": "refs/heads/main",
"before": "<sha>",
"after": "<sha>",
"commits": [ /* ... */ ],
"sender": { "username": "kit" }
}Slack & Discord
Install the Gluecron bot from /settings/integrations to drive your repos from chat. PR opens, merges, and AI review summaries also push back into the channel.
/gluecron pr list owner/repo /gluecron pr open owner/repo "Add dark mode" /gluecron issue list owner/repo /gluecron issue create owner/repo "Bug in foo()" /gluecron spec ship "rewrite the cron scheduler" /gluecron chat "How do I run the tests?" /gluecron help
v0:<timestamp>:<body>). Discord interactions are verified against your Application Public Key with Ed25519. Bad signatures get a 401.Personal access tokens
Tokens authenticate CLI clients, CI jobs, and scripts. Create them at /settings/tokens; the value is shown once, so copy it immediately. Tokens start with glc_.
curl -H "Authorization: Bearer glc_your_token_here" \ https://<your-host>/api/v2/repos
git over HTTPS — use the token as the password in place of your account password.Gates & AI review
Push-time scanning + an AI pair reviewer on every PR.
main) triggers a gate run: GateTest scans the diff for secrets, dependency advisories, and policy violations, while the AI reviewer reads the patch and comments on any PRs that touch the same files. Failing gates block the push by default; results appear on the commit page and in the repo's Gate runs tab. Configure gate policy per-repo in Settings → Gates.AI-native flow
Surfaces that ride on ANTHROPIC_API_KEY, with deterministic fallbacks when it's missing.
Closes #N footer; Claude drafts the diff, opens a draft PR, and the merge auto-closes the originating issue. generatePrSummary against git diff base...head and fills the description with a structured summary (Why · Key changes · Test plan · Risks).ANTHROPIC_API_KEY; without it the surfaces degrade gracefully to deterministic fallbacks.on: schedule: [{cron: "0 * * * *"}] into any .gluecron/workflows/*.yml. The autopilot ticker fires the cron from the same node that handles your pushes — no external scheduler needed.New AI surfaces
Seven cross-repo dashboards that ship with Gluecron — find them under the AI dropdown in the top nav, plus the always-on Pulls, Issues, Activity, and Inbox tabs.
/pulls for issues. Combine the ai:build filter with assigned to me to scan everything Claude is queued to build for you.filter=mentions, filter=review, filter=ci, filter=ai. The badge count next to Inbox in the nav is unread items.cents field to amountMinor across every API repo." Claude walks each repo, generates a patch, and opens a draft PR per repo. Tracking dashboard shows per-repo status (drafted / pushed / merged / failed)..gluecron/specs/*.md file across your repos shows up here. Add a spec, push it, then either run the spec-to-PR generator from the page or label the file and let autopilot do it overnight.Chat with a repo
Rubber-duck a question against any single repo. Powered by the semantic code index — Claude pulls the relevant files on every turn so answers stay grounded in your actual code.
/:owner/:repo/chat on any repo you can read (the dashboard Quick actions panel has a one-click link). Ask "where does auth happen?", "what does this Drizzle migration do?", "draft a test for <file>". The chat scrolls forever and the context is freshly retrieved on every message — so file moves and recent pushes are immediately visible to Claude./:owner/:repo/semantic-search?q=… is the underlying retrieval. Chunks are embedded with voyage-code-3 when VOYAGE_API_KEY is set; otherwise a lexical fallback (still useful — same chunking and ranking, just no embeddings).Branch previews
Every non-default branch with a Dockerfile or a .gluecron/preview.yml gets an ephemeral preview URL. Spin up, share, tear down — automatically on push.
/:owner/:repo/previews to see the list of live previews for the repo. Each row shows the branch, the last commit, the preview URL, and the most recent build log. Previews self-destruct when the branch is deleted or merged.Runnable PR sandboxes
Every PR can spin up a live, executable sandbox at pr-N-owner-repo.sandbox.gluecron.com. Reviewers click "Try this PR live" and poke the change in a real browser before merging. Auto-destroys after 4h.
auto_pr_sandbox on in repo settings to make every newly opened PR provision one automatically..gluecron/playground.yml. Commit this file at the repo root to control what the sandbox runs. If it's missing, Claude drafts one from your repo on first provision.# .gluecron/playground.yml runtime: docker image: node:20-alpine ports: [3000] seed: - "npm install" - "node scripts/seed-demo.js" command: "npm start" env: NODE_ENV: development
GET /:owner/:repo/pulls/:n/sandbox for the status JSON. POST .../sandbox/provision and POST .../sandbox/destroy drive the lifecycle. Sandboxes are deterministic by PR number, so the URL is stable across re-provisions.Cloud dev environments
Hit /:owner/:repo/dev to get a hosted VS Code IDE in your browser, backed by a cold-start container. One env per (repo, user); idle envs stop themselves after 30 minutes so we don't leak compute. Customise per-repo via .gluecron/dev.yml.
Settings → Dev environments to surface the route on your repo..gluecron/dev.yml. Commit this file at the repo root to control what your dev env runs. If it's missing, Claude drafts one from your repo on first start.# .gluecron/dev.yml — Node example image: node:20-alpine ports: [3000] install: - npm install postCreate: - npm run db:seed command: npm run dev recommendedExtensions: - dbaeumer.vscode-eslint - esbenp.prettier-vscode
# .gluecron/dev.yml — Python example image: python:3.12-slim ports: [8000] install: - pip install -r requirements.txt postCreate: - python manage.py migrate command: python manage.py runserver 0.0.0.0:8000 recommendedExtensions: - ms-python.python - ms-python.vscode-pylance
# .gluecron/dev.yml — Rust example image: rust:1.78 ports: [8080] install: - cargo fetch postCreate: [] command: cargo run recommendedExtensions: - rust-lang.rust-analyzer - vadimcn.vscode-lldb
POST /api/v2/repos/:owner/:repo/dev/start provisions (or warms-up) an env; POST /api/v2/repos/:owner/:repo/dev/stop gracefully stops one; and GET /api/v2/repos/:owner/:repo/dev/status returns the JSON shape used by the in-page poller.dev-env-idle-sweep autopilot task runs every 5 minutes and stops any env whose last_active_at + idle_minutes has passed. Each page hit bumps last_active_at so an open IDE tab keeps the env warm.Migration assistant
When you touch a Drizzle schema, Claude proposes the corresponding migration SQL and a one-line rollback plan. No more "did I forget the migration?" PRs.
/:owner/:repo/migrations/propose and point the assistant at a recent schema change. It returns the SQL diff, an up/down script, and a checklist of edge cases (NULL→NOT NULL, type widening, default backfill). Save the suggestion straight into drizzle/NNNN_*.sql when you're happy with it.Settings → Integrations on the repo, and auto-pinged when a push modifies src/db/schema.ts without a sibling migration file.PR slash commands
Type / at the start of a PR comment to invoke Claude inline. The composer hint shows the list as you type.
/review Re-run the AI reviewer on the latest diff /summarise Drop a fresh PR summary into the description /test-plan Generate a test plan from the diff /explain-this Plain-English summary of one file or hunk /risk Score the diff for breaking-change risk /migrate Propose a Drizzle migration for schema changes /release-notes Draft release notes covering this PR only /help List every command
ANTHROPIC_API_KEY is missing (fallbacks summarise file lists; no model output). They also work from the CLI: gluecron pr cmd /review.AI release notes
The release form has a Generate notes button that drafts a polished changelog from every PR merged since the previous tag.
/:owner/:repo/releases/new, type a new tag name and click Generate notes. Claude calls POST /api/v2/repos/:owner/:repo/releases/notes with the from/to tags and returns markdown grouped by Features, Fixes, Internal. Edit before publishing or accept as-is.Agent multiplayer
Mint scoped tokens for AI agents, give each its own branch namespace + daily budget, and let them coordinate through the lease API so two Claudes never touch the same file.
refs/heads/<namespace>*), and a daily spend cap. Tokens are shown once on creation — copy them immediately. The same page lists the most recent leases (work-in-progress markers) per agent.POST /api/v2/agents/leases acquires a lease on an issue, PR, or file path. Agents see currently-held leases via GET /api/v2/agents/leases and back off when a conflict is hit. Full protocol is in docs/multiplayer.md on the gluecron source repo.Semantic search API
The same index that powers Chat with a repo is available as a JSON endpoint.
curl -H "Authorization: Bearer glc_…" \ "https://<your-host>/api/v2/repos/<owner>/<repo>/semantic-search?q=password+hashing&limit=10"Returns a JSON array of
{ path, startLine, endLine, snippet, score } objects sorted by relevance. When VOYAGE_API_KEY is unset on the server the endpoint falls back to lexical ranking — useful for offline / air-gapped installs.Setup AI commits
Let Claude write your commit messages. Two ways in: an explicit gluecron commit wrapper, or a git hook that fires whenever git commit runs without -m.
bun build --compile --outfile gluecron cli/gluecron.ts sudo mv gluecron /usr/local/bin/ gluecron login # paste the token
gluecron commit. Stage your changes the usual way, then:gluecron commit # AI drafts → [y]es / [e]dit / [n]o gluecron commit -a # same, but stages tracked changes first gluecron commit -m "..." # plain pass-through, no AIThe draft is a Conventional Commit by default (
feat(scope): subject + body explaining why). Pass --plain for a plain-English subject.git commit (no -m) gets a draft pre-filled into the editor.cd /path/to/your/repo gluecron hook install commit-msg # undo: gluecron hook uninstall commit-msgThe hook only fires when the message is empty — explicit
-m, --amend, and merge commits are left untouched.POST /api/v2/ai/commit-message, rate-limited to 60 requests/minute per token. If ANTHROPIC_API_KEY is unset on the server, the endpoint falls back to a deterministic heuristic so the CLI keeps working.Keyboard shortcuts
Press ? on any page to pop the overlay.
? on any page to pop the overlay.API
REST + GraphQL surfaces, both documented inline.
Build-agent integration
Public spec for AI build-agent vendors (Holden Mercer, Cursor, Claude Code, etc.) who want to read issues, open PRs, and post review comments via the Gluecron API.
ai:build label convention.POST /mcp.Single-binary self-host
GitHub Enterprise Server is a 50 GB blob and a week of professional services. Gluecron self-host is a ~200 MB binary and 60 seconds. One curl, you own the whole stack.
curl -fsSL https://gluecron.com/install-server | bashThe script detects your OS + arch, downloads the right binary from /dist/, verifies SHA-256 against /dist/SHA256SUMS, installs to /opt/gluecron/bin/gluecron-server (or~/.gluecron/bin with no sudo), provisions Postgres, writes /etc/gluecron.env, runs migrations, and starts the systemd unit (linux) or launchd plist (darwin).- 4 GB RAM (8 GB for teams > 20)
- 20 GB disk for repos + Postgres data
- Postgres 14+ (auto-installed via docker if missing)
- Linux (x64 / arm64) or macOS (x64 / arm64)
/etc/gluecron.env seeded from .env.example. At minimum, set:DATABASE_URL— Postgres connection stringAPP_BASE_URL— public URL of the instancePORT— listen port (default 3010)GIT_REPOS_PATH— bare-repo directory
/admin/integrations.- Backup.
pg_dump $DATABASE_URL | gzip > gluecron-$(date +%F).sql.gzplustar -czf repos-$(date +%F).tgz /opt/gluecron/repos. - Restore. Stop systemd, restore the SQL dump with
gunzip -c < dump.sql.gz | psql $DATABASE_URL, untar the repos, and start the unit. - Upgrade. Re-run the installer — it overwrites the binary in place and restarts the service. The migrations runner is idempotent.
- Logs.
journalctl -u gluecron -f(linux) ortail -f ~/.gluecron/data/gluecron.err.log(darwin).
Something missing? Open an issue on gluecron's source repo.