Inside the project
Prepared with the project’s development agent from source and retained evidence. This is a project-owner assessment, not an independent customer review. Dated checks were not rerun for this website.
ghops is a small command-line tool the studio wrote for its own GitHub housekeeping. One Python script, with no extra packages, checks that the Mac is signed in to GitHub correctly. It audits the organisation's security and Copilot settings, and lists every local git project, flagging work that has never been backed up, committed or pushed. Its main strength is caution: commands only report, and anything that would change GitHub or delete files first prints a preview and acts only when explicitly told to with --apply. It is built for one account and one organisation, has no automated tests and isn't released, so it is shown here as an example of how the studio works, not as a product to download.
What stands out
- Read-only by default; every command that changes something shows a dry run unless --apply is given
- Never handles GitHub tokens itself: all access goes through the official gh CLI
- Finds local projects that aren't backed up anywhere, plus uncommitted and unpushed work, across several folders
- Clean-up of abandoned git temp files fails closed: if it can't tell which files are open, it deletes nothing
- No dependencies: Python 3 standard library only; account names and policy baseline live in a JSON config
Current limits
- Built for one owner, one organisation and macOS
- No automated tests, CI, packaging or release
- The Copilot checks rely on an undocumented GitHub endpoint and on the Copilot app's log format
- Spotting disconnected copies relies on matching folder names only
- Nothing a visitor can try: it needs the owner's GitHub sign-in
Features & evidence
doctor
sourceUser runs it to check gh login, token scopes, git identity and signing, the Copilot CLI and app, and the Copilot entitlement and seat
Recorded evidence
bin/ghops cmd_doctor, commits 2026-10-02 and 2026-10-03 (sign-in check fix); no tests; no recorded run output kept
org
installed-testedUser runs it to audit org settings, 2FA, teams, Copilot policies, Actions, rulesets and code-security configs into a dated report
Recorded evidence
dated private report from 2026-10-02 shows it ran in the owner's environment; no tests
local
installed-testedUser runs it to list every git checkout under the configured folders and flag work with no remote, uncommitted or unpushed
Recorded evidence
private report and JSON from 2026-10-02 show it ran; no tests
remote
installed-testedUser runs it to list GitHub repos and cross-reference local clones and disconnected copies
Recorded evidence
private report from 2026-10-02 shows it ran; no tests
baseline
sourceUser previews, then with --apply enforces, org settings and per-visibility code-security configuration
Recorded evidence
commit 2026-10-02; the README describes the resulting configuration, but no run log is kept
copilot seat-add / seat-remove
sourceUser assigns or removes Copilot seats, dry run by default
Recorded evidence
code from 2026-10-02; whether a seat was actually assigned is unknown
transfer
unknownUser moves personal repos into the org and repoints local remotes
Recorded evidence
commit 2026-10-02; the README records repos moved, but not that this command moved them
cleanup
sourceUser finds abandoned git temp packs older than a day and deletes them with --apply, skipping open files
Recorded evidence
commits 2026-10-03, including the fail-closed fix; no recorded run
Review updates & corrections
- No source or doc changes: HEAD is still a5efb9c (2026-10-03)
- Correction for the site: the published page includes material the biography marked internal (org name, trial and payment state, Copilot seat status, private report filenames, admin roadmap, a 'Keep it internal' note). Replace it with the review above.
- Text corruption on the site: 'the the project archive config' and '
defaults, the project archive' came from replacing [local evidence archive] paths; rewrite or drop - Scratch entry 2026-10-02-d9102b: still missing and unchanged; no content to review
Workflow walkthrough
A guide to the native workflow. These steps describe the app; only the recordings and images embedded on this page are available as website demonstrations.
- Run
bin/ghops doctor: one line per check, each with a ✓, ! or ✗ and a suggested fix - Run
bin/ghops local: counts of checkouts with no remote, uncommitted work, unpushed commits; a Markdown report is written - Run
bin/ghops remote: GitHub repos cross-referenced with local clones, with likely disconnected copies listed - Run
bin/ghops baseline: a dry-run diff of org settings against the config; nothing changes without --apply - Status: no capture of any of this exists. It would have to be a proposed, redacted terminal capture made on a test account.
Planned captures · not yet available
- Proposed: redacted terminal capture of ghops doctor and a baseline dry run
Development biography · earlier archive
Development profile compiled from project source and retained records in October 2026. Dates and test results describe those records; they do not imply a new build, live acceptance test or public release.
Biography
GitHub-Ops started on 2 October 2026, while the owner was setting up a GitHub Enterprise Cloud trial and a new organisation, entertrainmentuk, to hold the studio's company repositories. Doing that by hand meant jumping between GitHub's web settings, the gh command line, git config and the Copilot apps. It was also easy to lose track of which local folders were actually backed up. The repo's README records the machine setup, token scopes and account state for that day. The tool grew out of the same work: whenever a check was done by hand, it was written down as code.
The result is bin/ghops, a single Python 3 script that uses only the standard library. A short instructions file in the repo sets the rules for any AI agent working on it. No third-party dependencies are allowed. All GitHub access goes through the gh CLI, so the tool never reads or prints a token. Anything that changes GitHub must sit behind an explicit --apply flag and show a dry run otherwise. Account names and policy baselines live in config/ghops.json, not in the code. Every check prints the same one-line format (a tick, warning or cross, then a label and a detail), and longer findings go to dated Markdown reports.
The most distinctive idea is how cautious it is. Most commands only read. The few that write show exactly what they would do first. The last commit (2026-10-03) changed two things. API mutations are now judged by whether GitHub returned an error, not by what the response body contains. And the clean-up command now fails closed: if it can't get a reliable list of open files from lsof, it deletes nothing.
Who it is for. For the owner first: one developer with a personal account, one enterprise org and a large number of local projects spread across Documents, Downloads, Desktop and developer folders. Because the account names are in config, anyone with a similar setup could reuse it. Nothing shows anyone else has.
What it does. There are eight subcommands:
doctorchecks theghversion and login, token scopes against a required list (and prints the exactgh auth refreshfix), the git credential helper, git identity and commit signing. It then checks the Copilot CLI, the GitHub Copilot desktop app and whether it is signed in (it reads the app's latest log, and only the most recent auth event counts), the Copilot entitlement, and whether the user has a seat in the org.orgaudits the enterprise and organisation: plan, 2FA requirement, default permissions, members without 2FA, teams, Copilot billing and policy settings, seat activity, Actions permissions, rulesets and code-security configurations. It writes a dated report.localwalks the configured folders up to a depth limit, skipping build and dependency folders, and lists every git checkout. It flags checkouts with no remote at all (not backed up anywhere), uncommitted changes, unpushed commits or no upstream branch.remotelists every repo on the user account and the org, cross-references them with the local scan, and finds local folders with no remote that share a name with a GitHub repo, which are likely disconnected copies of the same project.baselinecompares the org's settings with the baseline in config. With--applyit enforces it: a free supply-chain configuration (dependency graph, Dependabot alerts and security updates) for private repos, and GitHub's recommended configuration for public repos, where secret scanning and code scanning are free.copilot seat-add / seat-removeassigns or removes Copilot Business seats, dry run by default.transfermoves named personal repos, or all private non-fork ones, into the org and repoints localoriginremotes.cleanupfinds abandonedtmp_pack_*files left by interrupted git fetches. It only counts files older than a day and skips any thatlsofshows are still open.
A typical session. The owner runs bin/ghops doctor to confirm the machine is signed in with the right scopes. Next comes bin/ghops local, which shows, say, which project folders have never been pushed anywhere. Then bin/ghops remote shows which GitHub repos have no local clone, and which local folders look like disconnected copies. For any project worth keeping, the README suggests a gh repo create … --push command. Before changing the org, bin/ghops baseline prints the differences, and only --apply makes them.
What it isn't. It isn't a hosted service, a GUI, or a general-purpose GitHub manager. It has no tests and no release. It is a personal operations notebook that runs.
Features: what a visitor could see or try
| Feature | Authored or dependency | Visible to a visitor? |
|---|---|---|
| Coloured one-line check output (✓ ! ✗) | Authored (line(), bin/ghops:72) | Only if someone captures a terminal screenshot. None exists. |
| Dated Markdown reports | Authored (write_report(), bin/ghops:76) | No. The real reports contain private repo names and paths. |
| GitHub API access | Dependency: gh CLI | n/a |
| Copilot CLI and desktop app checks | Dependencies: Copilot CLI and GitHub Copilot app 1.1.26 | n/a |
| Org security baseline | Authored config, enforced through GitHub REST endpoints | n/a |
There is nothing a visitor can try; it needs the studio’s credentials.
Technical foundations
- Language: Python 3, standard library only (
argparse,json,subprocess,pathlib,re,shutil,datetime). A__pycache__/ghops.cpython-314.pycfile suggests it has been run on Python 3.14; this is inferred from a retained artifact. - GitHub access:
api()wrapsgh apiwith an explicit API-version header,--paginate --slurpand JSON bodies on stdin.graphql()wrapsgh api graphql. Token scopes are read from theX-Oauth-Scopesresponse header. - Config:
config/ghops.jsonholds the user, org, required scopes, scan folders, maximum depth, skipped folders, org baseline and the code-security baseline. - Local packages: none. It doesn't import any of the studio's own packages.
- Integrations documented in the README (not part of the tool's code): the the project archive config, which wires the Copilot CLI and app to Xcode's
xcrun mcpbridgeand the semanticcompute, mac-resilience, md-tags, global-memory and ccx MCP servers, plussourcekit-lspandpyright.
Maturity by feature
Times from .git/logs/HEAD (Unix timestamps 1790949291–1791018429, +0100); all fall on 2026-10-02 and 2026-10-03.
| Feature | Source written | Tests | Built | Seen working at runtime | Released |
|---|---|---|---|---|---|
| doctor, org, local, remote, copilot seats | Initial commit 148e1ad, 2026-10-02 | None in repo | n/a (script) | Partly: reports/org-audit-2026-10-02.md, local-repos-2026-10-02.md and remote-repos-2026-10-02.md exist, so org, local and remote ran on 2026-10-02. The underlying administrative reports remain private. | No |
| transfer | 1666a21, 2026-10-02 | None | n/a | README says repos were moved into the org, which suggests it worked (or a manual transfer did); not verified | No |
| baseline split by visibility | 91ebb9e, 2026-10-02 | None | n/a | README says private repos → ghops-baseline and public → GitHub recommended | No |
| Copilot app sign-in fix | 561f206, 2026-10-03 | None | n/a | Unknown | No |
| cleanup | 42a5e8d, 2026-10-03; fail-closed fix a5efb9c, 2026-10-03 | None | n/a | Unknown | No |
| Copilot seat actually assigned | Code exists | — | — | Unknown. The 2026-10-04 scheduled doctor run was interrupted before it returned. The README says seats need identity verification and a payment method first. | — |
The README's own status block says "Complete · Improvable, 80%", self-assessed on 2026-10-02.
Limitations, roadmap, FAQs
Limitations
- Built for one user and one org; macOS-specific checks (
/Applications/GitHub Copilot.app,defaults, the project archive). - No tests or CI; no packaging.
doctorrelies on the undocumentedcopilot_internal/userendpoint and on the Copilot app's log format, so either can break without warning.remotematches disconnected copies by folder name only, which is a guess, as the report says.- There's a
reports/documents-junk-2026-10-03.mdfile that no current subcommand produces. It probably came from a separate one-off session.
Roadmap : back up repos that have no remote, reconnect disconnected checkouts, move company repos into the org, turn on SSH commit signing, require 2FA in the org. The pending Copilot Business activation (payment method, then seat, then CLI policy) is account admin, not product roadmap. Keep it internal.
FAQs
- Does it change anything on its own? No. Every command that writes to GitHub or disk prints a dry run unless you pass
--apply. - Does it handle my GitHub token? No. It calls the
ghCLI, which keeps the credential; the tool never reads or prints it. - What do I need to install? Python 3 and the
ghCLI, signed in. There are no pip packages. - Can I point it at my own account? Yes: edit
config/ghops.json(user, org, scan folders, baselines). It hasn't been tested outside the author's setup. - Why are the reports not in the repo? They list private repository names and local paths, so
reports/is git-ignored.