Review of "ClaudeWatch for GNOME" version 1

Details Page Preview

Live Claude Code activity in the top panel.

Extension Homepage
https://github.com/yevhen-chernenko/claudewatch

No comments.

FAQ

Files

Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.

Shexli (experimental) error 1 warning 1

Shexli found 2 issues that may need reviewer attention.

EGO-P-003 error

GSettings schema XML must be present in package

Extension appears to use GSettings but no `.gschema.xml` file is included in the package.

GSettings Schemas

EGO-L-005 warning

owned object references should be released in disable()

Owned references that are cleaned up in `disable()` should also be released with `null` or `undefined`.

Destroy all objects

  • lib/indicator.js:249
            this.actor = new St.Label({
                y_align: Clutter.ActorAlign.CENTER,
                style: RUNNING_STYLE,
                text: "",
            })

All Versions

Version Status
2 Active
1 Rejected

Previous Reviews on this Version

JustPerfection waiting for author
Is this code generated by AI? If so, we have a rule for that: [EGO Review Guidelines: AI](https://gjs.guide/extensions/review-guidelines/review-guidelines.html#extensions-must-not-be-ai-generated)
ltcodename posted a review
Hey JustPerfection, Well, I'd be lying if I said I did not use it at all. I did. It's kind of a default thing right now. I used Claude Code, but only for reviews and keeping the documentation consistent. Otherwise, I am a programmer with 10+ years of experience, so I don't need it to hold my hand. The motivation behind this extension was to learn what APIs GNOME exposes for development and make a neat tool that can help someone. So yeah, the LLM footprint is present, but in the role of a supporting tool only.
ltcodename posted a review
Hey JustPerfection, Well, I'd be lying if I said I did not use it at all. I did. It's kind of a default thing right now. I used Claude Code, but only for reviews and keeping the documentation consistent. Otherwise, I am a programmer with 10+ years of experience, so I don't need it to hold my hand. The motivation behind this extension was to learn what APIs GNOME exposes for development and make a neat tool that can help someone. So yeah, the LLM footprint is present, but in the role of a supporting tool only.
ltcodename posted a review
No idea why it posted twice. Sorry about that.
JustPerfection rejected
No worries. Please follow [Extensions Best Practices Guidelines](https://gjs.guide/extensions/review-guidelines/best-practices.html). and use empty lines between functions and classes. Also that `detailed-usage.py` should be a dependency of this extension and shipped as pip: https://gjs.guide/extensions/review-guidelines/review-guidelines.html#scripts-and-binaries
ltcodename posted a review
Hi JustPerfection, Thanks for the feedback and the review. I forgot to thank you the first time, sorry. I uploaded a new version that addresses your points. 1. detailed-usage.py is now a separate pip package The script is no longer in the extension zip. It is published on PyPI as `claudewatch-usage` (https://pypi.org/project/claudewatch-usage/, source in the `usage/` directory of https://github.com/yevhen-chernenko/claudewatch). It is stdlib-only Python with no third-party dependencies and is GPL-2.0-or-later, the same as the extension. The extension never installs it. The "Show usage" menu item looks for the `claudewatch-usage` command on `PATH` (and in `~/.local/bin`, where pip and pipx put it). If it is not found, the menu label shows `pipx install claudewatch-usage`, so installing is always an explicit user action. It is the only thing the extension ever spawns, it only runs on a click, and it is launched in a terminal window with a fixed argv. Nothing runs on startup or on a timer. The extension zip now contains only `extension.js`, `metadata.json` and `lib/*.js`. 2. Empty lines between functions and classes The extension is written in TypeScript, and `tsc` drops blank lines from its JS output, which is what you review. The build now runs ESLint (`@stylistic/padding-line-between-statements` and `lines-between-class-members`) over the compiled output, so the JS in the zip has blank lines between functions, classes, exports and class methods. 3. Best practices guidelines I went through the page again and changed the following: - `enable()` and `disable()` are now adjacent in the extension class. - `lib/indicator.ts` was over 1000 lines. I split it into `agentLabel.js`, `staleness.js`, `agentNames.js` and a smaller `indicator.js`, with no behaviour change. - I removed an unused field. The remaining `try/catch` blocks wrap real failure paths (file reads, JSON parsing, process launch), not `destroy()`, `disconnect()` or `GLib.Source.remove()`. Every timeout and file monitor is removed in its owner's `destroy()`. One note in case you run Shexli: it reports `EGO-P-003` (GSettings schema not shipped). That is a false positive. The extension only opens the system `org.gnome.shell` schema, for the Exit menu item, and has no schema of its own. If anything else needs changing, let me know. Thanks, Yevhen