Scan Report
18 /100
gstack
Fast headless browser for QA testing and site dogfooding. Navigate URLs, interact with elements, verify page state, diff before/after actions, take annotated screenshots, test forms and uploads.
This is a legitimate headless browser QA testing tool with no malicious behavior. All flagged IOCs are either documented user-facing instructions (bun installer, uninstall script) or test fixtures. No hidden credential theft, data exfiltration, or covert execution was found.
Safe to install
No action needed. The skill is safe for use. Minor documentation gaps around filesystem WRITE and cookie-import-browser capability should be addressed in allowed-tools.
Findings 4 items
| Severity | Finding | Location |
|---|---|---|
| Low | allowed-tools metadata is incomplete | SKILL.md:7 |
| Low | Subprocess commands not documented in skill preamble | browse/src/config.ts:30 |
| Info | Hardcoded test credentials are test fixtures only | browse/test/cookie-import-browser.test.ts:8 |
| Info | IP address strings are version metadata, not network indicators | retro/SKILL.md:399 |
| Resource | Declared | Inferred | Status | Evidence |
|---|---|---|---|---|
| Shell | WRITE | WRITE | ✓ Aligned | SKILL.md:allowed-tools includes 'Bash' |
| Filesystem | READ | WRITE | ✓ Aligned | Creates ~/.gstack/sessions/ files and manages state dirs. Declared as 'Read' but… |
| Network | NONE | READ | ✓ Aligned | Subprocess calls (git, security) resolve to local operations. Uses HTTPS for Pla… |
| Browser | NONE | WRITE | ✓ Aligned | cookie-import-browser command imports cookies from Chromium-based browsers. Decl… |
2 Critical 4 High 39 findings
Critical Dangerous Command 危险 Shell 命令
curl -fsSL https://bun.sh/install | bash README.md:629 Critical Dangerous Command 危险 Shell 命令
rm -rf ~ README.md:641 High API Key 疑似硬编码凭证
password = "test-keychain-password" browse/test/cookie-import-browser.test.ts:8 High API Key 疑似硬编码凭证
PASSWORD = 'test-keychain-password' browse/test/cookie-import-browser.test.ts:25 High IP Address 硬编码 IP 地址
1.16.0.0 retro/SKILL.md:399 High IP Address 硬编码 IP 地址
1.16.1.0 retro/SKILL.md:399 Medium External URL 外部 URL
https://playwright.dev/ BROWSER.md:25 Medium External URL 外部 URL
https://staging.myapp.com BROWSER.md:31 Medium External URL 外部 URL
https://conductor.build CONTRIBUTING.md:228 Medium External URL 外部 URL
https://docs.anthropic.com/en/docs/claude-code README.md:5 Medium External URL 外部 URL
https://git-scm.com/ README.md:102 Medium External URL 外部 URL
https://x.com/garrytan README.md:147 Medium External URL 外部 URL
https://www.ycombinator.com/ README.md:147 Medium External URL 外部 URL
https://greptile.com README.md:345 Medium External URL 外部 URL
https://staging.myapp.com/signup README.md:427 Medium External URL 外部 URL
https://staging.myapp.com/dashboard README.md:437 Medium External URL 外部 URL
https://staging.myapp.com/settings/billing README.md:444 Medium External URL 外部 URL
https://staging.myapp.com/api/health README.md:451 Medium External URL 外部 URL
https://bun.sh/install README.md:629 Medium External URL 外部 URL
https://app.example.com/login SKILL.md:121 Medium External URL 外部 URL
https://yourapp.com SKILL.md:140 Medium External URL 外部 URL
https://app.example.com/new-feature SKILL.md:153 Medium External URL 外部 URL
https://app.example.com/upload SKILL.md:203 Medium External URL 外部 URL
https://app.example.com/form SKILL.md:213 Medium External URL 外部 URL
https://staging.app.com SKILL.md:259 Medium External URL 外部 URL
https://prod.app.com SKILL.md:259 Medium External URL 外部 URL
https://app.example.com SKILL.md:266 Medium External URL 外部 URL
https://app.com/login browse/SKILL.md:121 Medium External URL 外部 URL
http://127.0.0.1:9470 browse/test/cookie-picker-routes.test.ts:40 Medium External URL 外部 URL
http://127.0.0.1:9450 browse/test/cookie-picker-routes.test.ts:62 Medium External URL 外部 URL
https://external.com/link browse/test/fixtures/basic.html:18 Medium External URL 外部 URL
https://external.com browse/test/fixtures/snapshot.html:21 Medium External URL 外部 URL
https://myapp.com qa/SKILL.md:117 Medium External URL 外部 URL
https://claude.com/claude-code ship/SKILL.md:477 Info Email 邮箱地址
[email protected] SKILL.md:268 Info Email 邮箱地址
[email protected] browse/SKILL.md:123 Info Email 邮箱地址
[email protected] browse/src/config.ts:128 Info Email 邮箱地址
[email protected] browse/test/fixtures/forms.html:19 Info Email 邮箱地址
[email protected] browse/test/fixtures/qa-eval-spa.html:75 File Tree
88 files · 921.6 KB · 23226 lines TypeScript 42f · 14629L
Markdown 24f · 7784L
HTML 13f · 554L
JSON 6f · 188L
Ruby 3f · 71L
├─
▾
browse
│ ├─
▾
src
│ │ ├─
browser-manager.ts
TypeScript
│ │ ├─
buffers.ts
TypeScript
│ │ ├─
cli.ts
TypeScript
│ │ ├─
commands.ts
TypeScript
│ │ ├─
config.ts
TypeScript
│ │ ├─
cookie-import-browser.ts
TypeScript
│ │ ├─
cookie-picker-routes.ts
TypeScript
│ │ ├─
cookie-picker-ui.ts
TypeScript
│ │ ├─
find-browse.ts
TypeScript
│ │ ├─
meta-commands.ts
TypeScript
│ │ ├─
read-commands.ts
TypeScript
│ │ ├─
server.ts
TypeScript
│ │ ├─
snapshot.ts
TypeScript
│ │ └─
write-commands.ts
TypeScript
│ ├─
▾
test
│ │ ├─
▾
fixtures
│ │ │ ├─
basic.html
HTML
│ │ │ ├─
cursor-interactive.html
HTML
│ │ │ ├─
dialog.html
HTML
│ │ │ ├─
empty.html
HTML
│ │ │ ├─
forms.html
HTML
│ │ │ ├─
qa-eval-checkout.html
HTML
│ │ │ ├─
qa-eval-spa.html
HTML
│ │ │ ├─
qa-eval.html
HTML
│ │ │ ├─
responsive.html
HTML
│ │ │ ├─
snapshot.html
HTML
│ │ │ ├─
spa.html
HTML
│ │ │ ├─
states.html
HTML
│ │ │ └─
upload.html
HTML
│ │ ├─
commands.test.ts
TypeScript
│ │ ├─
config.test.ts
TypeScript
│ │ ├─
cookie-import-browser.test.ts
TypeScript
│ │ ├─
cookie-picker-routes.test.ts
TypeScript
│ │ ├─
find-browse.test.ts
TypeScript
│ │ ├─
gstack-config.test.ts
TypeScript
│ │ ├─
gstack-update-check.test.ts
TypeScript
│ │ ├─
snapshot.test.ts
TypeScript
│ │ └─
test-server.ts
TypeScript
│ └─
SKILL.md
Markdown
├─
▾
document-release
│ └─
SKILL.md
Markdown
├─
▾
gstack-upgrade
│ └─
SKILL.md
Markdown
├─
▾
plan-ceo-review
│ └─
SKILL.md
Markdown
├─
▾
plan-eng-review
│ └─
SKILL.md
Markdown
├─
▾
qa
│ ├─
▾
references
│ │ └─
issue-taxonomy.md
Markdown
│ ├─
▾
templates
│ │ └─
qa-report-template.md
Markdown
│ └─
SKILL.md
Markdown
├─
▾
qa-only
│ └─
SKILL.md
Markdown
├─
▾
retro
│ └─
SKILL.md
Markdown
├─
▾
review
│ ├─
checklist.md
Markdown
│ ├─
greptile-triage.md
Markdown
│ ├─
SKILL.md
Markdown
│ └─
TODOS-format.md
Markdown
├─
▾
scripts
│ ├─
dev-skill.ts
TypeScript
│ ├─
eval-compare.ts
TypeScript
│ ├─
eval-list.ts
TypeScript
│ ├─
eval-summary.ts
TypeScript
│ ├─
eval-watch.ts
TypeScript
│ ├─
gen-skill-docs.ts
TypeScript
│ └─
skill-check.ts
TypeScript
├─
▾
setup-browser-cookies
│ └─
SKILL.md
Markdown
├─
▾
ship
│ └─
SKILL.md
Markdown
├─
▾
test
│ ├─
▾
fixtures
│ │ ├─
eval-baselines.json
JSON
│ │ ├─
qa-eval-checkout-ground-truth.json
JSON
│ │ ├─
qa-eval-ground-truth.json
JSON
│ │ ├─
qa-eval-spa-ground-truth.json
JSON
│ │ ├─
review-eval-enum-diff.rb
Ruby
│ │ ├─
review-eval-enum.rb
Ruby
│ │ └─
review-eval-vuln.rb
Ruby
│ ├─
▾
helpers
│ │ ├─
eval-store.test.ts
TypeScript
│ │ ├─
eval-store.ts
TypeScript
│ │ ├─
llm-judge.ts
TypeScript
│ │ ├─
observability.test.ts
TypeScript
│ │ ├─
session-runner.test.ts
TypeScript
│ │ ├─
session-runner.ts
TypeScript
│ │ └─
skill-parser.ts
TypeScript
│ ├─
gen-skill-docs.test.ts
TypeScript
│ ├─
skill-e2e.test.ts
TypeScript
│ ├─
skill-llm-eval.test.ts
TypeScript
│ ├─
skill-parser.test.ts
TypeScript
│ └─
skill-validation.test.ts
TypeScript
├─
ARCHITECTURE.md
Markdown
├─
BROWSER.md
Markdown
├─
CHANGELOG.md
Markdown
├─
CLAUDE.md
Markdown
├─
conductor.json
JSON
├─
CONTRIBUTING.md
Markdown
├─
package.json
JSON
├─
README.md
Markdown
├─
SKILL.md
Markdown
└─
TODOS.md
Markdown
Dependencies 2 items
| Package | Version | Source | Known Vulns | Notes |
|---|---|---|---|---|
playwright | ^1.58.2 | npm | No | Pinned to ^1.58.2 with caret range. Could be more restrictive but major versions match. |
diff | ^7.0.0 | npm | No | Standard text diffing library, minimal attack surface. |
Security Positives
✓ No credential exfiltration detected — cookie-import-browser decrypts cookies locally and passes them to Playwright only
✓ Parameterised SQL queries prevent injection attacks in cookie-import-browser
✓ eval command restricts file paths to /tmp or cwd only, preventing arbitrary file reads
✓ Sensitive HTTP headers (authorization, cookies, API keys) are automatically redacted in logs
✓ Key derivation keys cached only in-process memory, not persisted to disk
✓ Bearer token authentication protects the browser server from unauthorized access
✓ Profile name validation prevents path traversal attacks in cookie-import-browser
✓ Proper error handling with user-friendly messages for all failure modes
✓ Production code contains no hardcoded credentials — only test fixtures have test passwords
✓ Uses HTTPS for Playwright browser binary downloads
✓ Subprocess calls use allowlist approach (git, security, bun only) rather than arbitrary command execution