Description
When plannotator review is executed via a Claude Code skill (slash command /plannotator-review), the server starts and listens on a port correctly, but the browser does not automatically open.
Running the same command directly in the terminal works fine — the browser opens and navigates to the correct URL.
Steps to Reproduce
- Install plannotator as a Claude Code plugin
- Run
/plannotator-review in Claude Code (which triggers the skill defined in plannotator-review.md)
- The server starts and listens on a port (confirmed via
lsof)
- The browser never opens
Expected Behavior
The browser should open and navigate to the plannotator review UI, just like when running plannotator review directly in a terminal.
Actual Behavior
- The server starts and listens on the port successfully
- The browser does not open
- Manually running
open http://localhost:<port> works as a workaround
Root Cause Analysis
When Claude Code executes a skill command, it runs the process with:
- stdin redirected from
/dev/null (< /dev/null)
- No TTY attached (non-interactive shell)
The actual shell invocation looks like:
/bin/zsh -c 'source ... && eval "plannotator review" < /dev/null'
It appears that plannotator's browser-opening logic is either:
- Checking for a TTY and skipping
open when none is detected, or
- Failing silently when attempting to open the browser in this environment
Suggested Fix
Consider always attempting to open the browser regardless of TTY status, or provide a fallback that prints the URL to stdout so the calling agent can open it. For example:
Server running at http://localhost:51119
This would allow Claude Code (or any non-TTY caller) to detect the URL and open it.
Environment
- macOS (Darwin 24.5.0, arm64)
- plannotator v0.8.0
- Claude Code CLI
Description
When
plannotator reviewis executed via a Claude Code skill (slash command/plannotator-review), the server starts and listens on a port correctly, but the browser does not automatically open.Running the same command directly in the terminal works fine — the browser opens and navigates to the correct URL.
Steps to Reproduce
/plannotator-reviewin Claude Code (which triggers the skill defined inplannotator-review.md)lsof)Expected Behavior
The browser should open and navigate to the plannotator review UI, just like when running
plannotator reviewdirectly in a terminal.Actual Behavior
open http://localhost:<port>works as a workaroundRoot Cause Analysis
When Claude Code executes a skill command, it runs the process with:
/dev/null(< /dev/null)The actual shell invocation looks like:
It appears that
plannotator's browser-opening logic is either:openwhen none is detected, orSuggested Fix
Consider always attempting to open the browser regardless of TTY status, or provide a fallback that prints the URL to stdout so the calling agent can open it. For example:
This would allow Claude Code (or any non-TTY caller) to detect the URL and open it.
Environment