Open pull requests
Cyborg branches from latest main, commits its work to cyborg/<ticket-id>, opens PR with autogenerated title + body + linked issue. Always ≤ 400 LOC where possible.
contents:write · pull_requests:write
Install the A'nil Cyborg GitHub App on your org in 90 seconds. Your engineering Cyborg gets a bot identity (@cyborg-eng[bot]) that opens PRs, reviews diffs with line-level comments, runs CI + security scans, manages labels + milestones, triages issues, and posts status checks. Never pushes directly to protected branches. All commits signed + verified. Full audit log streamed to your S3 / Datadog.
— CAPABILITIES
Every action is bot-attributed (cyborg-eng[bot]), every commit is GPG-signed and verifiable, every push lands on a cyborg/* branch. Cyborg cannot push to main, cannot delete branches, cannot bypass required reviews. All by design, enforced by branch protection rules we ship by default.
Cyborg branches from latest main, commits its work to cyborg/<ticket-id>, opens PR with autogenerated title + body + linked issue. Always ≤ 400 LOC where possible.
contents:write · pull_requests:writeReviews incoming human PRs against your style guide + security checklist + test coverage rules. Posts inline review comments + summary. Never auto-merges human PRs.
perm:pull_requests:writePosts a cyborg-eng/review status check that gates merge. Triggers Actions workflows on its own PRs. Reads check run results. Cannot disable other checks.
checks:write · actions:readAuto-labels new issues (bug, feature, docs, p0/p1/p2), assigns to milestone, suggests owner from CODEOWNERS. Asks for missing info on incomplete reports.
issues:writeReviews Dependabot alerts. For low-risk dep bumps, opens PR with changelog summary + risk note. For high-risk, files issue with mitigation plan + escalates in Slack.
perm:security_events:read · vulnerability_alerts:readReads code + docs + git history of repos it's installed on, for context. Embeds + indexes locally (encrypted, per-customer key). Re-indexed on push.
perm:contents:read · metadata:readComments on direct commits to flag missing tests / convention drift. Joins Discussions to answer architectural questions with citations to your codebase.
perm:discussions:write · contents:readMoves cards between columns (To-do → In-progress → In-review → Done) as PR state changes. Syncs with Linear / Jira if you use both.
projects:writeCreates + pushes to cyborg/* branches only. Cannot push to main, release/*, prod, or any branch matched by your protection rules. Cannot force-push. Cannot delete branches outside its own namespace.
contents:write (namespace-scoped)— REAL PR · ANONYMISED · TUESDAY 11:02 IST
Engineer Dharmesh opened PR #4218 to refactor a caching layer. Cyborg reviewed it in 47 seconds: 3 inline comments, 1 security flag, 1 test-coverage note, 1 approval after fix. This is what your engineers see in their reviews tab every day.
8585 public String build(String prefix, Object[] parts) {8686 var sb = new StringBuilder(prefix);87− for (var p : parts) sb.append(':').append(p.toString());87+ for (var p : parts) sb.append(':').append(p);8888 return sb.toString();8989 }
Removed the explicit p.toString() — StringBuilder.append(Object) calls String.valueOf(), which renders null as the literal string "null". With cluster reroutes, parts can briefly contain null entries during a slot migration. Suggest:
for (var p : parts) {
if (p == null) throw new IllegalArgumentException("null cache-key part");
sb.append(':').append(p);
}
Or accept the "null" literal but document the contract. Either is fine — "silently emits 'null'" is the surprising option.
140140 client := redis.NewClusterClient(&redis.ClusterOptions{141141 Addrs: cfg.Addrs,142+ TLSConfig: &tls.Config{InsecureSkipVerify: true},142143 })
Disables TLS certificate verification on the Redis cluster client. This is a man-in-the-middle vulnerability — anything between this service and the Redis nodes (load balancer, sidecar, ingress) can present a forged cert and we won't notice. Recommend: load the cluster CA bundle and set RootCAs instead. If this is a temporary debug flag, please revert before merge and add a TODO with an issue link.
Coverage on touched files dropped from 87% → 81% (project floor: 80%, so still passing). Missing tests for the new cluster-reroute path: shouldRetryOnSlotMigration(), shouldNotRetryOnAuthError(), shouldFailoverToReplicaWhenPrimaryDown(). Happy to draft these — they're standard Redis cluster cases and your existing test scaffold supports them.
ANONYMISED FROM A LIVE CUSTOMER REPO · CONFIG STRINGS + FILE NAMES SCRUBBED · ALL CYBORG REVIEW LANGUAGE VERBATIM
— GITHUB APP · NOT OAUTH USER TOKEN
admin:org. No repo:delete. Ever.Installed as a GitHub App (org-level), not an OAuth user app. No human's personal token. Repo selection is per-installation: pick exactly which repos the Cyborg can see (default: explicit allowlist, not "all"). Org admin can revoke per-repo or org-wide in 1 click.
| Permission | What it allows | Why we need it | Risk | Default |
|---|---|---|---|---|
contents:read |
Read repository code, tags, branches | Index your codebase for context-aware reviews + suggestions. | Low | ON |
contents:write |
Push commits to non-protected branches only | Push to cyborg/* branches to open PRs. Branch-protection rules block main, release/*, prod. |
Medium | ON |
pull_requests:write |
Open / comment / approve PRs | Open PRs from cyborg/* branches; review human PRs with line-level comments + summary. |
Low | ON |
checks:write |
Post check runs (status checks) | Post the cyborg-eng/review status check that gates merge. |
Low | ON |
actions:read |
Read workflow runs + logs (own repo) | Inspect failing CI logs to suggest fixes. Cannot trigger arbitrary workflows. | Low | ON |
issues:write |
Open / label / comment issues | Triage incoming issues, file follow-ups for security alerts, link issues to PRs. | Low | ON |
security_events:read |
Read CodeQL + secret-scan alerts | Triage security alerts, draft mitigation PRs for low-risk dep bumps. | Low | ON |
vulnerability_alerts:read |
Read Dependabot vulnerability alerts | Auto-PR low-risk dep bumps; escalate high-risk to humans via Slack. | Low | ON |
discussions:write |
Comment in repo Discussions | Answer architectural / "how-do-I" questions with citations to your code. | Low | OPT-IN |
NEVER REQUESTED: admin:org · admin:repo_hook · delete_repo · repo (classic full scope) · workflow:write · packages:write · members:write · user OAuth tokens (only GitHub App installation tokens, scoped + short-lived). |
||||
— SHIPPED AS PART OF INSTALL · YOU CAN OVERRIDE
During install, Cyborg offers to apply these branch-protection rules to main + release/* in each selected repo. You can accept the bundle, customise per-repo, or skip and apply your own. Cyborg's own permissions are calibrated to be blocked by these rules. If you skip, Cyborg still cannot force-push or delete — those are GitHub-side hard caps for Apps.
No direct push to main — even from org admins. Cyborg's contents:write respects this.
Cyborg's review counts as a second opinion, not a first. A human must approve before merge.
DEFAULT · ONci/* + security/* + cyborg-eng/review must all pass before merge can fire.
Any new commit invalidates prior approvals. No "approve at v1, sneak in v6" attacks.
DEFAULT · ONCyborg signs all its commits with a per-customer GPG key. Humans should too — we'll prompt.
DEFAULT · ONSquash- or rebase-merge only. No merge commits soup. Easier audit, easier revert.
DEFAULT · ONMust rebase on latest main before merge fires. No skew between PR view and prod.
Hard-blocked at GitHub side — for everyone, including org admins, including Cyborg.
DEFAULT · ON— 90 SECONDS · ORG ADMIN APPROVAL REQUIRED
From any Engineering Cyborg's hire flow or from this page. Opens GitHub App install screen.
Default: "Only select repositories". Pick exactly which repos Cyborg may see. "All repositories" is allowed but not recommended.
GitHub shows the exact permission list. Org admin approves (most teams in 30 seconds). Single-click revoke anytime from org settings.
Cyborg offers to apply our 8-rule defaults to main + release/* in selected repos. Accept all, customise, or skip.
Cyborg opens a "hello, this is what I'll do" PR (small, no-op style guide doc). You review, merge or close. From here on, every action streams to your Cyborg audit log + optional S3 / Datadog / Splunk webhook.
— 4 OF 12
Software Engineer is the heaviest user. Designer pushes design tokens + Storybook updates. PM links issues to deliveries. Data Analyst commits dbt models + dashboard configs. Each role has a separate bot identity.
— BOTH SIDES OF THE WIRE
cyborg-eng[bot] shows up on every commit, comment, PR, and check.No per-PR charge. No per-repo charge. No "GitHub Enterprise tier" upsell — we support github.com Cloud, GitHub Enterprise Cloud, and GitHub Enterprise Server (self-hosted) at the same price. Even unlimited PR reviews on your busiest monorepo are included.
— ENGINEERING LEAD + SECURITY QUESTIONS
main or force-push anywhere?No, on both. (1) Cyborg only pushes to cyborg/* branches; the contents:write permission is respected by branch-protection rules, which block writes to main / release/* / prod. (2) GitHub Apps fundamentally cannot force-push or delete branches that have protection enabled — this is a GitHub-side guarantee, not a Cyborg promise. We've never had a force-push or branch deletion incident across 2,847 orgs.
No. GitHub's review-required rule, when set to "Require review from Code Owners" or "Require approval from someone other than the author", treats cyborg-eng[bot] as the author of its own PRs — so it can never self-approve. Cyborg can review human PRs (and post a non-blocking suggestion-only review), but the merge gate still requires a human approver. This is the design.
No, never. Your code is indexed (encrypted embeddings) for context retrieval at review time — that's a per-customer index, not a shared training set. We have a contractual no-train clause (your DPA + MSA both spell it out), and architecturally there is no pipeline from your tenant's embeddings to any model fine-tuning. Embeddings are deleted within 30 days of repo removal.
Fully supported. We install the GitHub App on your GHES instance the same way (org admin approves), and Cyborg connects via your GHES API URL. If your GHES is air-gapped, we offer a Cyborg satellite container that runs inside your network (talks only to your GHES + your cyborg-control-plane). Same pricing.
No — workflow:write is in our NEVER-REQUEST list. Cyborg can read workflow runs (actions:read) to understand failures and suggest fixes, but it cannot create / modify / delete .github/workflows/*.yml. If a PR from Cyborg touches a workflow file, GitHub itself blocks the push and the PR gets rejected. Workflow changes are always human-authored.
If a secret is committed in plaintext, yes — same as any human reviewer. That's a problem for both of us, and Cyborg flags it as a P0 security issue immediately. We integrate with GitHub Secret Scanning so leaked tokens get rotated automatically (where supported) and Cyborg never includes detected secret content in its embedding index. Best practice: use GitHub Encrypted Secrets / your secret manager — Cyborg never asks for, sees, or stores those.
Your repo history is yours — we never owned it. On uninstall: the GitHub App is removed in < 5 seconds, all installation tokens are revoked, our 30-day rolling embeddings index is purged within 7 days. Every commit Cyborg authored stays in your repo forever (signed, attributable, auditable). Optional: we provide a CSV export of every PR + review + comment Cyborg made for your records.
Refactor LGTM in shape — Redis cluster mode is the right move and the abstraction is clean. 3 things to address before merge: a missing null-guard in
CacheKeyBuilder.build()(potential NPE under cluster reroute), a security flag onRedisClusterClientinstantiation (cert verification disabled incluster.go:142), and test coverage dropped from 87% → 81% on the touched files. I can fix all 3 in a follow-up PR if helpful, just@-cyborg-eng fix-itand I'll branch off this one.