By ZviBaratz
Prepare GNOME Shell extensions for extensions.gnome.org submission: scaffold projects with compliant structure, run automated linting and compliance checks, simulate EGO reviewer audits with rejection scoring, perform code reviews and field tests, and generate readiness reports.
Run automated EGO compliance checks on a GNOME Shell extension
Perform a manual EGO code review of a GNOME Shell extension
Create a new GNOME Shell extension with EGO-compliant structure
Simulate an EGO review submission with pass/fail verdict
Complete pre-submission validation for extensions.gnome.org
Run automated field tests across all registered GNOME extensions, diff against baselines, classify findings, and produce regression reports.
Run automated EGO (extensions.gnome.org) compliance checks on a GNOME Shell extension. Validates metadata.json, GSettings schema, import segregation, console.log usage, deprecated modules, web APIs, binary files, CSS scoping, ESLint with gnome config, and package contents. Use when checking extension code quality, preparing for EGO submission, or when linting, validation, or GNOME extension compliance is mentioned.
Perform a manual code review of a GNOME Shell extension simulating what an EGO reviewer checks. Analyzes lifecycle correctness, signal disconnection, resource cleanup, async safety, security patterns, and code quality. Use before EGO submission, when reviewing GNOME extension code, or for pre-submission review.
Create a new GNOME Shell extension project with correct structure, lifecycle boilerplate, eslint-config-gnome, and EGO-compliant metadata. Generates extension.js, prefs.js, metadata.json, schema, stylesheet, and tooling. Use when creating a new extension, scaffolding a project, or starting fresh.
Simulate an EGO review submission — produces a readiness report based on published review criteria. Triages the extension in reviewer order, applies a 23-reason rejection taxonomy with weighted scoring, and generates a structured report with a pass/fail verdict. Use before EGO submission to assess review readiness.
Own this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimOwn this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimBased on adoption, maintenance, documentation, and repository signals. Not a security audit or endorsement.
Automated pre-submission checks for GNOME Shell extensions, built from analysis of real EGO review decisions. ego-lint catches the mechanical issues that cause the most common rejections — so extensions arrive cleaner and reviewers spend less time on round-trips.
Fully deterministic: bash + python + YAML rules. No AI at runtime, no network access, no dependencies beyond coreutils.
git clone https://github.com/ZviBaratz/gnome-extension-reviewer.git
cd gnome-extension-reviewer
./ego-lint /path/to/your-extension@username
Exit code 0 = no blocking issues. Exit code 1 = blocking issues that will likely cause rejection.
Run ./ego-lint --help for the full check list and options.
unzip extension.zip -d /tmp/some-extension@author
./ego-lint /tmp/some-extension@author --show all
Try it on a bundled test fixture:
./ego-lint tests/fixtures/lifecycle-imbalance@test --show all
Runs in ~2 seconds on typical extensions, ~4 seconds on large ones (11 modules). No network access.
================================================================
ego-lint — GNOME Shell Extension Compliance Checker
================================================================
Extension: /path/to/my-extension@username
[PASS] file-structure/extension.js extension.js exists
[PASS] file-structure/metadata.json metadata.json exists
[PASS] license License file found (appears GPL-compatible)
[FAIL] R-DEPR-04 extension.js:4: Legacy imports.* syntax; use ESM imports for GNOME 45+
[FAIL] R-DEPR-05 extension.js:2: ExtensionUtils removed in GNOME 45+; use Extension base class
[WARN] R-SEC-17 lib/controller.js:10: Writing to /tmp is insecure; use GLib.get_tmp_dir()
[PASS] metadata/required-fields All required fields present
[FAIL] metadata/session-modes session-modes ["user"] is redundant and MUST be dropped
[WARN] metadata/shell-version-current shell-version does not include GNOME 49
[PASS] lifecycle/enable-disable enable() and disable() both defined
[WARN] lifecycle/file-monitor-cleanup File monitor created but no .cancel() found
[WARN] resource-tracking/orphan-signal lib/manager.js:9 — this._handlerId not cleaned up in destroy()
[PASS] quality/code-provenance provenance-score=1; signals=[consistent-naming-style]
...
----------------------------------------------------------------
Results: 196 checks — 167 passed, 3 failed, 4 warnings, 22 skipped
----------------------------------------------------------------
200+ checks across 14 categories — 64 blocking rules (FAIL) and 60 advisory rules (WARN), plus structural checks.
| Category | Checks |
|---|---|
| Metadata | UUID format/match, required fields, shell-version format, session-modes, GNOME trademark, donations |
| Imports | GTK/Gdk/Adw banned in extension.js; Clutter/Meta/St/Shell banned in prefs.js; transitive dependency analysis |
| Schema | Schema ID matches metadata, path format, glib-compile-schemas dry-run |
| Lifecycle | enable/disable symmetry, signal cleanup, timeout removal, InjectionManager, D-Bus unexport, widget destroy, settings null, subprocess cancellation |
| Async | _destroyed guards, cancellable usage, per-call cancellable verification |
| GObject | GObject.registerClass patterns, GTypeName validation |
| Resources | Cross-file resource graph (signals, timeouts, widgets, D-Bus, file monitors, GSettings), orphan detection |
| Security | Subprocess validation, pkexec targets, clipboard/network disclosure, /tmp writes, telemetry, curl/gsettings spawn |
| Deprecated | Mainloop, Lang, ByteArray, ExtensionUtils, Tweener, legacy imports.* syntax |
| Web APIs | setTimeout, setInterval, fetch, XMLHttpRequest, WebSocket, localStorage |
| Version Compat | GNOME 44–50 migration rules (version-gated, only fire for declared shell-versions) |
| CSS | Unscoped class names, !important usage, GNOME Shell theme class overrides |
| Code Quality | AI slop detection (try-catch density, impossible states, empty catches, obfuscation, code provenance scoring) |
| Package | Forbidden files in zip, required files, compiled schemas for GNOME 45+ |
| Preferences | ExtensionPreferences base class, GTK4/Adwaita patterns, memory leak detection |
npx claudepluginhub zvibaratz/gnome-extension-reviewerReliable automation, in-depth debugging, and performance analysis in Chrome using Chrome DevTools and Puppeteer
Comprehensive feature development workflow with specialized agents for codebase exploration, architecture design, and quality review
Harness-native ECC operator layer - 67 agents, 271 skills, 92 legacy command shims, reusable hooks, rules, selective install profiles, and production-ready workflows for Claude Code, Codex, OpenCode, Cursor, and related agent harnesses
Comprehensive skill pack with 66 specialized skills for full-stack developers: 12 language experts (Python, TypeScript, Go, Rust, C++, Swift, Kotlin, C#, PHP, Java, SQL, JavaScript), 10 backend frameworks, 6 frontend/mobile, plus infrastructure, DevOps, security, and testing. Features progressive disclosure architecture for 50% faster loading.
Tools to maintain and improve CLAUDE.md files - audit quality, capture session learnings, and keep project memory current.
Access thousands of AI prompts and skills directly in your AI coding assistant. Search prompts, discover skills, save your own, and improve prompts with AI.