opencode-skills-collection 4.0.60 → 4.0.61
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundled-skills/.antigravity-install-manifest.json +4 -1
- package/bundled-skills/agy-auto/SKILL.md +137 -0
- package/bundled-skills/client-secret-exposure-audit/SKILL.md +228 -0
- package/bundled-skills/client-secret-exposure-audit/references/example-report.md +144 -0
- package/bundled-skills/md2video-audio/SKILL.md +135 -0
- package/package.json +1 -1
- package/skills_index.json +194 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"updatedAt": "2026-09-
|
|
3
|
+
"updatedAt": "2026-09-13T01:46:17.010Z",
|
|
4
4
|
"entries": [
|
|
5
5
|
"00-andruia-consultant",
|
|
6
6
|
"007",
|
|
@@ -64,6 +64,7 @@
|
|
|
64
64
|
"agents-md",
|
|
65
65
|
"agents-v2-py",
|
|
66
66
|
"agenttrace-session-audit",
|
|
67
|
+
"agy-auto",
|
|
67
68
|
"agy-delegate",
|
|
68
69
|
"ai-agent-development",
|
|
69
70
|
"ai-agents-architect",
|
|
@@ -451,6 +452,7 @@
|
|
|
451
452
|
"clean-code-guard",
|
|
452
453
|
"clerk-auth",
|
|
453
454
|
"clickup-automation",
|
|
455
|
+
"client-secret-exposure-audit",
|
|
454
456
|
"cline-delegate",
|
|
455
457
|
"close-automation",
|
|
456
458
|
"closed-loop-delivery",
|
|
@@ -1255,6 +1257,7 @@
|
|
|
1255
1257
|
"mcp-builder",
|
|
1256
1258
|
"mcp-builder-ms",
|
|
1257
1259
|
"mcp-tool-developer",
|
|
1260
|
+
"md2video-audio",
|
|
1258
1261
|
"mdpr-skill",
|
|
1259
1262
|
"memory-forensics",
|
|
1260
1263
|
"memory-safety-patterns",
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agy-auto
|
|
3
|
+
description: "Configure agy-auto PreToolUse security gate to run Antigravity CLI (agy) unattended with layered policy controls instead of --dangerously-skip-permissions."
|
|
4
|
+
category: security
|
|
5
|
+
risk: critical
|
|
6
|
+
source: community
|
|
7
|
+
source_repo: onkarbadve/agy-auto
|
|
8
|
+
source_type: community
|
|
9
|
+
date_added: "2026-09-11"
|
|
10
|
+
author: onkarbadve
|
|
11
|
+
tags: [antigravity, agy, security, permissions, sandboxing, guardrails, cli]
|
|
12
|
+
license: "MIT"
|
|
13
|
+
license_source: "https://github.com/onkarbadve/agy-auto/blob/main/LICENSE"
|
|
14
|
+
tools: [antigravity]
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# agy-auto — Antigravity Auto-Permission & Security Gate
|
|
18
|
+
|
|
19
|
+
## Overview
|
|
20
|
+
|
|
21
|
+
`agy-auto` is a PreToolUse hook and security harness for Google Antigravity CLI (`agy`) that enables safe unattended execution without relying on `--dangerously-skip-permissions`. It passes every pending tool call through a multi-layered policy gate: deterministic hard-deny rules, deterministic fast-allow for workspace-scoped and read-only operations, an LLM classifier fallback (Gemini Flash Lite or local llama.cpp), and single-use scoped token approvals with Zero Ambient Authority.
|
|
22
|
+
|
|
23
|
+
## When to Use This Skill
|
|
24
|
+
|
|
25
|
+
- Use when running Antigravity CLI (`agy`) unattended or in background agent loops and you want automated tool permissions without exposing system files or credentials.
|
|
26
|
+
- Use when you need granular, auditable controls over shell commands, file modifications, and network egress during `agy` workflows.
|
|
27
|
+
- Use when setting up a secure pair-programming environment with Antigravity that prevents prompt injection attacks from escaping the workspace.
|
|
28
|
+
|
|
29
|
+
## How It Works
|
|
30
|
+
|
|
31
|
+
### Step 1: Review, Pin, and Install agy-auto
|
|
32
|
+
|
|
33
|
+
> [!IMPORTANT]
|
|
34
|
+
> Because `agy-auto` installs as an active PreToolUse hook on the permission evaluation path, never clone a mutable branch directly into your live plugin directory. Always clone to a temporary staging folder, pin an immutable release tag or commit SHA, and inspect the codebase before making the hook executable.
|
|
35
|
+
|
|
36
|
+
**Option A: Native Antigravity Plugin (Recommended)**
|
|
37
|
+
```bash
|
|
38
|
+
# 1. Clone into a temporary review directory and checkout an immutable release tag
|
|
39
|
+
git clone https://github.com/onkarbadve/agy-auto.git /tmp/agy-auto-review
|
|
40
|
+
cd /tmp/agy-auto-review
|
|
41
|
+
git checkout v0.2.0-alpha
|
|
42
|
+
|
|
43
|
+
# 2. Inspect hook.sh and engine/ files before deployment
|
|
44
|
+
less hook.sh
|
|
45
|
+
python3 -m unittest -v tests/test_engine.py
|
|
46
|
+
|
|
47
|
+
# 3. Once reviewed and verified, copy to the Antigravity plugin directory and set permissions
|
|
48
|
+
mkdir -p ~/.gemini/config/plugins/agy-auto
|
|
49
|
+
cp -r . ~/.gemini/config/plugins/agy-auto/
|
|
50
|
+
chmod +x ~/.gemini/config/plugins/agy-auto/hook.sh
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Ensure `toolPermission: "always-proceed"` is configured in `~/.gemini/antigravity-cli/settings.json` so hooks can gate tool calls:
|
|
54
|
+
```json
|
|
55
|
+
{
|
|
56
|
+
"toolPermission": "always-proceed"
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**Option B: Global Hook via Installer**
|
|
61
|
+
```bash
|
|
62
|
+
# 1. Clone to an isolated location and pin release
|
|
63
|
+
git clone https://github.com/onkarbadve/agy-auto.git ~/.local/share/agy-auto
|
|
64
|
+
cd ~/.local/share/agy-auto
|
|
65
|
+
git checkout v0.2.0-alpha
|
|
66
|
+
|
|
67
|
+
# 2. Review and run the installer
|
|
68
|
+
chmod +x hook.sh
|
|
69
|
+
./install.sh # registers hook in hooks.json, sets always-proceed, runs smoke tests
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Step 2: Policy Evaluation Layers
|
|
73
|
+
|
|
74
|
+
`agy-auto` evaluates each tool invocation through sequential layers (first match wins):
|
|
75
|
+
|
|
76
|
+
1. **Hard Deny**: Immediately blocks recursive deletes outside workspace, credential reads (`~/.ssh`, `.env`, cloud tokens), git history rewrites (`push --force`, `rebase`), package publishing, system file writes (`/etc`, shell rc), and gate tampering.
|
|
77
|
+
2. **Fast Allow**: Immediately permits parsed read-only commands (`cat`, `grep`, `git status`) and workspace-confined writes without invoking an LLM.
|
|
78
|
+
3. **Classifier**: Ambiguous or grey-area commands fall through to an LLM classifier (Google Gemini 3.5 Flash Lite free tier, or a local `llama.cpp` / Ollama endpoint) that reviews the pending call against conversation context and fail-closes on timeout.
|
|
79
|
+
4. **Scoped Action Approval**: If a command is denied or needs human judgment, the engine issues a single-use 6-character action token bound strictly to `(tool, normalized_cmd, cwd)`. You approve it by replying `> agy-approve <token>` in chat. Conversational phrases like "yes" or "proceed" are ignored to prevent ambient authority leakage.
|
|
80
|
+
|
|
81
|
+
## Examples
|
|
82
|
+
|
|
83
|
+
### Example 1: Approving a Blocked Command
|
|
84
|
+
|
|
85
|
+
When an unclassified command is blocked, `agy-auto` outputs a token:
|
|
86
|
+
```text
|
|
87
|
+
tool call denied by pre-tool hook: [agy-auto/classifier] needs human approval: pip install requests. Reply '> agy-approve a1b2c3' in chat to proceed.
|
|
88
|
+
```
|
|
89
|
+
To authorize this specific command for a single run, reply directly in the chat:
|
|
90
|
+
```text
|
|
91
|
+
> agy-approve a1b2c3
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Example 2: Configuring a Local Model Backend
|
|
95
|
+
|
|
96
|
+
To run `agy-auto` completely offline using llama.cpp or Ollama instead of cloud APIs, edit `~/.gemini/config/agy-auto/policy.toml`:
|
|
97
|
+
```toml
|
|
98
|
+
[classifier]
|
|
99
|
+
endpoint = "http://127.0.0.1:8080/v1/chat/completions"
|
|
100
|
+
model = "qwen2.5-coder:7b"
|
|
101
|
+
timeout_s = 20
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Example 3: Running Headless Invocations
|
|
105
|
+
|
|
106
|
+
When invoking `agy` in headless mode (`-p`), always pass `--add-dir` so `agy-auto` recognizes the workspace boundaries:
|
|
107
|
+
```bash
|
|
108
|
+
agy --add-dir . -p "Run test suite and fix failing cases"
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Best Practices
|
|
112
|
+
|
|
113
|
+
- ✅ Always keep `toolPermission: "always-proceed"` enabled so the pre-tool hook can intercept and gate every tool call.
|
|
114
|
+
- ✅ Add custom repetitive dev tools (e.g. specialized compilers, formatters) to `[fast_allow]` in `~/.gemini/config/agy-auto/policy.toml` for instant sub-millisecond execution.
|
|
115
|
+
- ✅ Pass `--add-dir <path>` when running headless commands (`agy -p`) to prevent false-positive path denials.
|
|
116
|
+
- ❌ Do not use `--dangerously-skip-permissions`; `agy-auto` provides safe autonomous execution without removing safety guardrails.
|
|
117
|
+
- ❌ Do not attempt conversational approval words ("approve", "proceed", "yes"); approvals strictly require the ephemeral action token.
|
|
118
|
+
|
|
119
|
+
## Common Pitfalls
|
|
120
|
+
|
|
121
|
+
- **Problem:** Commands fail with `path is outside the workspace` when running `agy -p`.
|
|
122
|
+
**Solution:** Headless `agy` does not infer workspace roots automatically. Pass `--add-dir .` (e.g. `agy --add-dir . -p "..."`).
|
|
123
|
+
- **Problem:** Classifier fails closed with `policy classifier unavailable (The read operation timed out)`.
|
|
124
|
+
**Solution:** Increase `timeout_s` in `~/.gemini/config/agy-auto/policy.toml` (especially when running local LLMs on integrated graphics), or verify your `GEMINI_API_KEY`.
|
|
125
|
+
- **Problem:** Changes to `policy.toml` or `hook.sh` are blocked by `[agy-auto/hard_deny]`.
|
|
126
|
+
**Solution:** `agy-auto` enforces self-protection against agents tampering with the security gate. Edit policy files directly from your own shell.
|
|
127
|
+
|
|
128
|
+
## Limitations
|
|
129
|
+
|
|
130
|
+
- `agy-auto` only intercepts actions performed via tool calls (e.g. `run_command`, `write_to_file`); it cannot restrict internal LLM network reasoning or Antigravity's own internal context-gathering file reads.
|
|
131
|
+
- Requires `toolPermission: "always-proceed"` in Antigravity settings to ensure the PreToolUse hook intercepts all tool invocations.
|
|
132
|
+
- Shell parsing is conservative: complex pipelines with computed variable expansions that cannot be statically resolved will fall through to the LLM classifier or require manual token approval.
|
|
133
|
+
|
|
134
|
+
## Additional Resources
|
|
135
|
+
|
|
136
|
+
- [agy-auto GitHub Repository](https://github.com/onkarbadve/agy-auto)
|
|
137
|
+
- [Antigravity CLI Documentation](https://github.com/google-gemini/antigravity-cli)
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: client-secret-exposure-audit
|
|
3
|
+
description: "Audit a deployed web app for secrets exposed to the browser: hardcoded API keys/tokens in JS, secrets in HTML meta/attributes/comments, publicly reachable source/config/deploy files, and header/CORS misconfig."
|
|
4
|
+
category: security
|
|
5
|
+
risk: safe
|
|
6
|
+
source: self
|
|
7
|
+
source_type: self
|
|
8
|
+
date_added: "2026-09-10"
|
|
9
|
+
author: siddanta-ar1
|
|
10
|
+
tags: [security, secrets, owasp, reconnaissance, web, headers]
|
|
11
|
+
tools: [claude, cursor, gemini]
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Client-Side Secret & Sensitive-File Exposure Audit
|
|
15
|
+
|
|
16
|
+
## Overview
|
|
17
|
+
|
|
18
|
+
Modern web apps ship a lot of code and config to the browser. When credentials
|
|
19
|
+
leak into that client-visible surface — hardcoded in JavaScript, tucked into HTML
|
|
20
|
+
`meta`/`data-*` attributes or comments, or served as raw source/config/deploy
|
|
21
|
+
files that were never meant to be public — anyone can read them with `curl` and a
|
|
22
|
+
browser. This skill is a **defensive, read-only** workflow for finding that class
|
|
23
|
+
of exposure on a web app **you are authorized to assess**.
|
|
24
|
+
|
|
25
|
+
It maps to OWASP **A02:2021 Cryptographic Failures** (sensitive data exposure),
|
|
26
|
+
**A05:2021 Security Misconfiguration**, and CWE-798 (hardcoded credentials),
|
|
27
|
+
CWE-200 (sensitive information exposure), CWE-540 (source code in a production
|
|
28
|
+
build). It only fetches resources the server already hands to any anonymous
|
|
29
|
+
visitor — it does not exploit, brute-force, or mutate anything.
|
|
30
|
+
|
|
31
|
+
## When to Use This Skill
|
|
32
|
+
|
|
33
|
+
- Use when you need to check whether a deployed site leaks API keys, tokens, or
|
|
34
|
+
passwords in its client-side bundle before shipping or during a review.
|
|
35
|
+
- Use when working with a static/SPA deployment (Vercel, Netlify, Nginx, S3,
|
|
36
|
+
GitHub Pages) and you want to confirm no source/config/deploy files are
|
|
37
|
+
publicly reachable.
|
|
38
|
+
- Use when the user asks to "find secrets," "audit exposed files," "check the
|
|
39
|
+
JS/HTML for credentials," or run a lightweight sensitive-data-exposure pass on
|
|
40
|
+
a URL they own or are authorized to test.
|
|
41
|
+
- Do **not** use this to attack third-party sites. See *Security & Safety Notes*.
|
|
42
|
+
|
|
43
|
+
## How It Works
|
|
44
|
+
|
|
45
|
+
Set the target once. Every command below reads only what the server serves
|
|
46
|
+
publicly.
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
BASE="https://TARGET.example" # authorized target, no trailing path
|
|
50
|
+
WORK="$(mktemp -d)"; cd "$WORK"
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Step 1: Fetch the page and inspect response headers
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
curl -s -D headers.txt -o body.html "$BASE/"
|
|
57
|
+
cat headers.txt
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Flag on the headers:
|
|
61
|
+
|
|
62
|
+
- `access-control-allow-origin: *` — permissive CORS (worse when paired with
|
|
63
|
+
credentials).
|
|
64
|
+
- Missing `Content-Security-Policy`, `X-Frame-Options`/`frame-ancestors`,
|
|
65
|
+
`X-Content-Type-Options: nosniff`, `Referrer-Policy`, `Permissions-Policy`.
|
|
66
|
+
- Missing/weak `Strict-Transport-Security`.
|
|
67
|
+
- `Server`/framework version banners that fingerprint the stack.
|
|
68
|
+
|
|
69
|
+
### Step 2: Grep the HTML for secrets and sinks
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
grep -inE "secret|passwd|password|api[_-]?key|apikey|token|bearer|authorization|\
|
|
73
|
+
akia|sk_live|sk_test|pk_live|whsec_|ghp_|aiza|private[_-]?key|mongodb(\+srv)?://|\
|
|
74
|
+
data-[a-z-]*(secret|token|key|access)" body.html
|
|
75
|
+
grep -inE "<!--" body.html # read every HTML comment
|
|
76
|
+
grep -ioE '<meta[^>]+>' body.html # meta tags often carry keys/ids
|
|
77
|
+
grep -ioE '<script[^>]+src="[^"]+"' body.html # enumerate JS bundles
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Secrets hide in `data-*` attributes, `<meta>` tags, `hidden` `<div>`s, and
|
|
81
|
+
`<!-- comments -->` at least as often as in scripts.
|
|
82
|
+
|
|
83
|
+
### Step 3: Pull every JavaScript bundle and scan it
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
# extract script srcs, resolve relative paths against $BASE, fetch and scan
|
|
87
|
+
grep -ioE 'src="[^"]+\.js"' body.html | sed -E 's/^src="//; s/"$//' \
|
|
88
|
+
| while read -r p; do
|
|
89
|
+
u="$p"; case "$p" in http*) ;; /*) u="$BASE$p";; *) u="$BASE/$p";; esac
|
|
90
|
+
f="js_$(echo "$p" | tr '/:' '__')"
|
|
91
|
+
curl -s "$u" -o "$f" && echo "== $u =="
|
|
92
|
+
done
|
|
93
|
+
grep -rinE "secret|password|api[_-]?key|token|bearer|sk_(live|test)|pk_(live|test)|\
|
|
94
|
+
whsec_|akia|aiza|jwt|signing[_-]?key|admin[_-]?token|mongodb|redis://" js_* 2>/dev/null
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Also scan any sourcemaps (`*.js.map`) — they can rebuild original source with
|
|
98
|
+
comments intact.
|
|
99
|
+
|
|
100
|
+
### Step 4: Probe for publicly reachable source / config / deploy files
|
|
101
|
+
|
|
102
|
+
SPAs often have a catch-all rewrite that returns `index.html` for unknown paths,
|
|
103
|
+
so **compare response sizes** — a path whose size differs from the SPA fallback
|
|
104
|
+
is a real, distinct file.
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
FALLBACK=$(curl -s "$BASE/____nope____$RANDOM" | wc -c) # SPA fallback size
|
|
108
|
+
for p in /.env /.env.local /.env.production /.git/config /.git/HEAD \
|
|
109
|
+
/package.json /package-lock.json /vercel.json /.vercel/project.json \
|
|
110
|
+
/Dockerfile /docker-compose.yml /wrangler.toml /.gitignore \
|
|
111
|
+
/server/index.js /src/config/app.config.js /config.js \
|
|
112
|
+
/src/services/payment.service.js /webpack.config.js /next.config.js; do
|
|
113
|
+
read -r code size < <(curl -s -o /dev/null -w "%{http_code} %{size_download}" "$BASE$p")
|
|
114
|
+
[ "$code" = "200" ] && [ "$size" != "$FALLBACK" ] && echo "REAL FILE $code $size $p"
|
|
115
|
+
done
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
For any real file found, fetch it and re-run the Step 2/3 secret grep. Follow
|
|
119
|
+
`require(...)`/`import` paths inside those files to discover more source files
|
|
120
|
+
(routes, controllers, services, webhooks) and repeat.
|
|
121
|
+
|
|
122
|
+
### Step 5: Triage and score
|
|
123
|
+
|
|
124
|
+
Rate each finding by blast radius, not by where it was found:
|
|
125
|
+
|
|
126
|
+
| Severity | Examples |
|
|
127
|
+
|---|---|
|
|
128
|
+
| **Critical** | Live provider secret keys (`sk_live_`, cloud `AKIA…`+secret, DB URI with password, private signing/JWT secret, admin bearer token) reachable anonymously |
|
|
129
|
+
| **High** | Server-side source/config/deploy files exposed; test-mode secret keys; internal service tokens; webhook signing secrets |
|
|
130
|
+
| **Medium** | CORS `*`, missing CSP/security headers, verbose banners, weak randomness for security values (`Math.random()` for tokens/refs) |
|
|
131
|
+
| **Low / Info** | Public keys correctly client-side, analytics IDs, non-secret config, stack fingerprinting |
|
|
132
|
+
|
|
133
|
+
A key being "test/demo" does not make it safe if the *pattern* would ship a live
|
|
134
|
+
key the same way — report the pattern.
|
|
135
|
+
|
|
136
|
+
### Step 6: Report
|
|
137
|
+
|
|
138
|
+
Write findings as Markdown using the format in
|
|
139
|
+
[references/example-report.md](references/example-report.md): one row/section per finding with
|
|
140
|
+
`Severity · Category (OWASP/CWE) · Location · Evidence (redacted) · Impact ·
|
|
141
|
+
Remediation`. Redact real secret material to a prefix + length. End with
|
|
142
|
+
prioritized remediation and a note on which secrets must be **rotated**, not just
|
|
143
|
+
removed (anything committed/served is already compromised).
|
|
144
|
+
|
|
145
|
+
## Examples
|
|
146
|
+
|
|
147
|
+
### Example 1: Secrets in HTML meta and hidden elements
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
BASE="https://demo-for-opensource.vercel.app"; curl -s "$BASE/" -o body.html
|
|
151
|
+
grep -inE "recaptcha-secret|data-aws-secret|data-webhook-secret|mongodb\+srv" body.html
|
|
152
|
+
# -> meta recaptcha-secret=..., data-aws-access=AKIA…/data-aws-secret=…,
|
|
153
|
+
# data-webhook-secret=whsec_…, and a hidden JSON blob with a mongodb+srv URI
|
|
154
|
+
# (username:password@cluster). All reachable with a single unauthenticated GET.
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### Example 2: Hardcoded credentials in a JS config bundle
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
curl -s "$BASE/public/assets/js/config.js" | \
|
|
161
|
+
grep -inE "API_SECRET|ADMIN_TOKEN|JWT_SECRET|DATABASE_PASSWORD|PAYMENT_SIGNING_KEY"
|
|
162
|
+
# -> API_SECRET, ADMIN_TOKEN (JWT), JWT_SECRET, DATABASE_PASSWORD, and a payment
|
|
163
|
+
# signing key, all assigned as plain string constants shipped to every browser.
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### Example 3: Server source exposed behind a SPA fallback
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
FALLBACK=$(curl -s "$BASE/__nope__" | wc -c)
|
|
170
|
+
for p in /server/index.js /docker-compose.yml /src/services/payment.service.js; do
|
|
171
|
+
sz=$(curl -s "$BASE$p" | wc -c); [ "$sz" != "$FALLBACK" ] && echo "REAL $sz $p"
|
|
172
|
+
done
|
|
173
|
+
# -> docker-compose.yml leaks a Redis password; payment.service.js leaks
|
|
174
|
+
# Stripe/Khalti secret keys + webhook secret. Distinct sizes prove they are
|
|
175
|
+
# real files, not the SPA catch-all page.
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
A full worked report for this target is in [references/example-report.md](references/example-report.md).
|
|
179
|
+
|
|
180
|
+
## Best Practices
|
|
181
|
+
|
|
182
|
+
- ✅ Confirm written authorization and scope (the exact hostnames) before fetching.
|
|
183
|
+
- ✅ Compare every probed path against the SPA fallback size to avoid false 200s.
|
|
184
|
+
- ✅ Follow `require`/`import` chains in any exposed source file to find more files.
|
|
185
|
+
- ✅ Redact real secret values in the report; record enough to identify, not reuse.
|
|
186
|
+
- ✅ Flag secrets for **rotation** — served/committed secrets are already burned.
|
|
187
|
+
- ❌ Don't use discovered credentials to authenticate, pivot, or access data.
|
|
188
|
+
- ❌ Don't run this against sites you don't own or aren't authorized to test.
|
|
189
|
+
- ❌ Don't treat "it's a test/demo key" as safe — report the shipping pattern.
|
|
190
|
+
|
|
191
|
+
## Limitations
|
|
192
|
+
|
|
193
|
+
- Read-only reconnaissance of client-served assets; it does not test injection,
|
|
194
|
+
auth logic, IDOR, or server-side flaws — pair with `@web-security-testing`.
|
|
195
|
+
- Path probing uses a wordlist; it finds common exposures, not every file.
|
|
196
|
+
- This skill does not replace environment-specific validation, testing, or expert
|
|
197
|
+
review.
|
|
198
|
+
- Stop and ask for clarification if authorization, scope, or safety boundaries
|
|
199
|
+
are missing.
|
|
200
|
+
|
|
201
|
+
## Security & Safety Notes
|
|
202
|
+
|
|
203
|
+
- **Authorized targets only.** Run exclusively against systems you own or have
|
|
204
|
+
explicit written permission to assess. Unauthorized scanning may be illegal.
|
|
205
|
+
- Every command here performs only unauthenticated `GET` requests for resources
|
|
206
|
+
the server already serves publicly — no exploitation, brute force, or mutation.
|
|
207
|
+
- Handle any real secrets you uncover as sensitive: store findings in an access-
|
|
208
|
+
controlled location, redact them in shared reports, and recommend rotation.
|
|
209
|
+
- Do not exfiltrate data or reuse discovered credentials — locating an exposure is
|
|
210
|
+
the deliverable; using it is out of scope.
|
|
211
|
+
|
|
212
|
+
## Common Pitfalls
|
|
213
|
+
|
|
214
|
+
- **Problem:** Every probed path returns HTTP 200, hiding real files.
|
|
215
|
+
**Solution:** SPA catch-all rewrite. Baseline the fallback body size and only
|
|
216
|
+
treat paths with a *different* size as real files.
|
|
217
|
+
- **Problem:** Grep misses secrets stored in `data-*` attributes or comments.
|
|
218
|
+
**Solution:** Also scan `<meta>`, `data-*`, `hidden` elements, and every
|
|
219
|
+
`<!-- comment -->`, not just `<script>` bodies.
|
|
220
|
+
- **Problem:** Dismissing a finding because the key is labeled "test/demo."
|
|
221
|
+
**Solution:** Report the pattern — the same code path would ship a live key.
|
|
222
|
+
|
|
223
|
+
## Related Skills
|
|
224
|
+
|
|
225
|
+
- `@web-security-testing` — broader OWASP Top 10 workflow; use for injection,
|
|
226
|
+
auth, and access-control testing this skill does not cover.
|
|
227
|
+
- `@dependency-management-deps-audit` — pairs well for supply-chain/component risk
|
|
228
|
+
once client exposure is triaged.
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# Example Audit Report — Client-Side Secret & Sensitive-File Exposure
|
|
2
|
+
|
|
3
|
+
**Target:** `https://demo-for-opensource.vercel.app/` (a public, intentionally
|
|
4
|
+
vulnerable demonstration app — "Himalayan Vista Hotel")
|
|
5
|
+
**Date:** 2026-09-10
|
|
6
|
+
**Method:** Unauthenticated `GET` requests only (see `SKILL.md`)
|
|
7
|
+
**Scope note:** This is a public demo whose own source states *"All secrets are
|
|
8
|
+
fake demonstration values."* It is used here purely to illustrate the report
|
|
9
|
+
format the skill produces. Values below are redacted to prefix + length.
|
|
10
|
+
|
|
11
|
+
## Summary
|
|
12
|
+
|
|
13
|
+
The site is a static/SPA deployment that ships a large amount of server-side
|
|
14
|
+
source, config, and deployment material to the browser, with credentials
|
|
15
|
+
scattered across **every layer** — HTML meta tags, hidden DOM elements, HTML
|
|
16
|
+
comments, JavaScript bundles, and publicly reachable `server/`, `src/`, and
|
|
17
|
+
container files. Additionally, response headers omit the standard security header
|
|
18
|
+
set and use permissive CORS.
|
|
19
|
+
|
|
20
|
+
| # | Severity | Finding | OWASP / CWE |
|
|
21
|
+
|---|----------|---------|-------------|
|
|
22
|
+
| 1 | Critical | Admin bearer token, JWT secret, DB password & DB URI shipped to the browser | A02 / CWE-798, CWE-522 |
|
|
23
|
+
| 2 | Critical | Cloud + payment provider secrets exposed (AWS, Stripe/Khalti secret keys, webhook signing secret) | A02 / CWE-798, CWE-200 |
|
|
24
|
+
| 3 | High | Server-side source, config & deploy files publicly reachable | A05 / CWE-540, CWE-527 |
|
|
25
|
+
| 4 | High | reCAPTCHA **secret** key placed in an HTML `<meta>` tag | A02 / CWE-798 |
|
|
26
|
+
| 5 | Medium | Missing security headers (CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy) | A05 / CWE-693 |
|
|
27
|
+
| 6 | Medium | Permissive CORS (`Access-Control-Allow-Origin: *`) | A05 / CWE-942 |
|
|
28
|
+
| 7 | Medium | Insecure randomness for booking references (`Math.random()`) | A02 / CWE-338 |
|
|
29
|
+
| 8 | Low/Info | Third-party tokens & analytics IDs in client JS; verbose `console.log` of keys | A09 / CWE-532 |
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Findings
|
|
34
|
+
|
|
35
|
+
### 1 — Critical: Admin token, JWT secret, DB password shipped to the browser
|
|
36
|
+
|
|
37
|
+
- **Location:** `public/assets/js/config.js` (loaded on every page); mirrored in
|
|
38
|
+
`src/config/app.config.js`.
|
|
39
|
+
- **Evidence (redacted):** `ADMIN_TOKEN = "eyJhbGciOiJ…" (JWT, role=operations)`,
|
|
40
|
+
`JWT_SECRET = "eyJhbGciOiJ…"`, `API_SECRET = "hvh_live_s3c37_…" (28 chars)`,
|
|
41
|
+
`DATABASE_PASSWORD = "Vista#…!" (16 chars)`, plus a hidden `<div>` JSON blob
|
|
42
|
+
containing `mongodb+srv://hvh-backend:****@cluster0.…/hvh_prod`.
|
|
43
|
+
- **Impact:** Anyone can read an admin bearer token, the JWT signing secret
|
|
44
|
+
(allowing forged tokens for any role), the API secret, and DB credentials — full
|
|
45
|
+
data-tier compromise if these were live.
|
|
46
|
+
- **Remediation:** Never place secrets in client bundles. Keep secrets server-side
|
|
47
|
+
in a secrets manager / env vars; expose only publishable keys to the browser.
|
|
48
|
+
**Rotate every value** — anything served is already compromised.
|
|
49
|
+
|
|
50
|
+
### 2 — Critical: Cloud & payment provider secrets exposed
|
|
51
|
+
|
|
52
|
+
- **Location:** HTML hidden `<div data-aws-access / data-aws-secret>` and
|
|
53
|
+
`data-webhook-secret`; `src/services/payment.service.js`; `docker-compose.yml`.
|
|
54
|
+
- **Evidence (redacted):** `AKIA…EXAMPLE` + AWS secret; Stripe `sk_test_51Qf4…`;
|
|
55
|
+
Khalti `live_secret_key_…`; `whsec_a9f4…`; Redis `redis://…:7fK9…@cache:6379`.
|
|
56
|
+
- **Impact:** Server-side payment secret keys and a webhook signing secret in the
|
|
57
|
+
client allow forging payment intents and spoofing signed webhook events; the
|
|
58
|
+
Redis password enables cache/session tampering — if live.
|
|
59
|
+
- **Remediation:** Move all provider secret keys server-side; only `pk_*`
|
|
60
|
+
publishable keys belong in the browser. Rotate all exposed keys and secrets.
|
|
61
|
+
|
|
62
|
+
### 3 — High: Server-side source, config & deploy files publicly reachable
|
|
63
|
+
|
|
64
|
+
- **Location (confirmed real via size ≠ SPA fallback):** `/server/index.js`,
|
|
65
|
+
`/server/routes/{booking,payment,review,webhook}.routes.js`,
|
|
66
|
+
`/src/config/app.config.js`, `/src/services/{payment,booking}.service.js`,
|
|
67
|
+
`/docker-compose.yml`, `/Dockerfile`, `/public/assets/js/config.js`.
|
|
68
|
+
- **Evidence:** Each returns a distinct body size from the SPA catch-all page and
|
|
69
|
+
contains real source/config (route definitions, internal service tokens such as
|
|
70
|
+
`hvh_svc_…`, container build details).
|
|
71
|
+
- **Impact:** Exposes internal architecture, endpoints, auth/rate-limit middleware
|
|
72
|
+
names, and embedded credentials — a blueprint for further attack.
|
|
73
|
+
- **Remediation:** Deploy only build output (`public/` + `index.html`). Exclude
|
|
74
|
+
`server/`, `src/`, and deploy files from the published artifact (`.vercelignore`
|
|
75
|
+
/ correct build root). Serve 404 for non-asset paths instead of leaking files.
|
|
76
|
+
|
|
77
|
+
### 4 — High: reCAPTCHA secret key in an HTML meta tag
|
|
78
|
+
|
|
79
|
+
- **Location:** `<meta name="recaptcha-secret" content="6LcVo3kq…">` in `index.html`.
|
|
80
|
+
- **Evidence:** The **secret** (server-verification) key is in page markup
|
|
81
|
+
alongside the site key.
|
|
82
|
+
- **Impact:** The reCAPTCHA secret is server-only; exposing it lets attackers
|
|
83
|
+
script verification and undermines bot protection.
|
|
84
|
+
- **Remediation:** Remove the secret from all client output; keep only the site
|
|
85
|
+
key client-side. Regenerate the reCAPTCHA keypair.
|
|
86
|
+
|
|
87
|
+
### 5 — Medium: Missing security headers
|
|
88
|
+
|
|
89
|
+
- **Location:** Main response headers for `/`.
|
|
90
|
+
- **Evidence:** No `Content-Security-Policy`, `X-Frame-Options`/`frame-ancestors`,
|
|
91
|
+
`X-Content-Type-Options: nosniff`, `Referrer-Policy`, or `Permissions-Policy`.
|
|
92
|
+
(`Strict-Transport-Security` **is** present — good.)
|
|
93
|
+
- **Impact:** Increased XSS, clickjacking, MIME-sniffing, and referrer-leak risk.
|
|
94
|
+
- **Remediation:** Add a strict CSP, `X-Content-Type-Options: nosniff`,
|
|
95
|
+
`X-Frame-Options: DENY` (or CSP `frame-ancestors 'none'`), `Referrer-Policy:
|
|
96
|
+
strict-origin-when-cross-origin`, and a least-privilege `Permissions-Policy`
|
|
97
|
+
(e.g. via `vercel.json` headers).
|
|
98
|
+
|
|
99
|
+
### 6 — Medium: Permissive CORS
|
|
100
|
+
|
|
101
|
+
- **Location:** Response header `Access-Control-Allow-Origin: *`.
|
|
102
|
+
- **Impact:** Any origin can read responses; dangerous if any endpoint returns
|
|
103
|
+
user/authenticated data.
|
|
104
|
+
- **Remediation:** Restrict `Access-Control-Allow-Origin` to trusted origins;
|
|
105
|
+
never combine `*` with credentialed requests.
|
|
106
|
+
|
|
107
|
+
### 7 — Medium: Insecure randomness for booking references
|
|
108
|
+
|
|
109
|
+
- **Location:** `src/services/booking.service.js` — `randomRef()` uses
|
|
110
|
+
`Math.random()`; `fetchAvailabilityHold` builds predictable `HOLD-<room>-<date>`
|
|
111
|
+
ids.
|
|
112
|
+
- **Impact:** Predictable/guessable references enable enumeration of bookings/holds.
|
|
113
|
+
- **Remediation:** Use a CSPRNG (`crypto.randomUUID()` / `crypto.randomBytes`) for
|
|
114
|
+
any security-relevant identifier.
|
|
115
|
+
|
|
116
|
+
### 8 — Low/Info: Third-party tokens & noisy logging
|
|
117
|
+
|
|
118
|
+
- **Location:** `main.js` (Mixpanel/Hotjar/OpenWeather/Freshdesk/Zendesk tokens,
|
|
119
|
+
`console.log` of keys); `api/client.js` (`console.log` note, static
|
|
120
|
+
`X-Rate-Limit-Bypass` header value).
|
|
121
|
+
- **Impact:** Some of these (weather/analytics) are lower-risk, but support-desk
|
|
122
|
+
tokens and a rate-limit-bypass header value are sensitive; logging keys to the
|
|
123
|
+
console aids attackers.
|
|
124
|
+
- **Remediation:** Remove secret logging; move non-public tokens server-side;
|
|
125
|
+
never ship a "rate-limit-bypass" value to the client.
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Prioritized Remediation
|
|
130
|
+
|
|
131
|
+
1. **Rotate immediately** (were they live): admin/JWT/API secrets, DB password &
|
|
132
|
+
URI, AWS keys, Stripe/Khalti secret keys, webhook & payment signing secrets,
|
|
133
|
+
Redis password, reCAPTCHA secret, internal service tokens.
|
|
134
|
+
2. **Stop shipping server code:** publish only `public/` + `index.html`; exclude
|
|
135
|
+
`server/`, `src/`, and deploy files from the deployment artifact.
|
|
136
|
+
3. **Remove all secrets from client output** (JS, HTML meta/`data-*`/comments);
|
|
137
|
+
keep only publishable keys in the browser.
|
|
138
|
+
4. **Add the security-header set** and tighten CORS via `vercel.json`.
|
|
139
|
+
5. **Replace `Math.random()`** with a CSPRNG for any security-relevant value.
|
|
140
|
+
6. **Remove secret `console.log`** statements and client-side bypass headers.
|
|
141
|
+
|
|
142
|
+
> Reminder: this target is a public teaching demo with intentionally fake
|
|
143
|
+
> secrets. The same findings on a real deployment would be treated as an incident,
|
|
144
|
+
> starting with credential rotation.
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: md2video-audio
|
|
3
|
+
description: "Convert Markdown documents into narrated MP4 videos with synchronized visuals and voice narration."
|
|
4
|
+
category: media
|
|
5
|
+
risk: safe
|
|
6
|
+
source: community
|
|
7
|
+
source_repo: 70v-Yoyo/md2video-audio-skill
|
|
8
|
+
source_type: community
|
|
9
|
+
date_added: "2026-09-12"
|
|
10
|
+
author: 70v-Yoyo
|
|
11
|
+
tags: [markdown, video, audio, text-to-speech, marp, presentation]
|
|
12
|
+
tools: [claude, cursor, gemini]
|
|
13
|
+
license: "Apache-2.0"
|
|
14
|
+
license_source: "https://github.com/70v-Yoyo/md2video-audio-skill/blob/main/LICENSE"
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# Md2video-audio
|
|
18
|
+
|
|
19
|
+
## Overview
|
|
20
|
+
|
|
21
|
+
`md2video-audio` converts a Markdown document into a narrated MP4 video by transforming the source into synchronized presentation visuals and spoken narration.
|
|
22
|
+
|
|
23
|
+
The workflow preserves the original file and generates separate presentation, narration, and video outputs.
|
|
24
|
+
|
|
25
|
+
- `source_repo: 70v-Yoyo/md2video-audio-skill`
|
|
26
|
+
- `source_type: community`
|
|
27
|
+
|
|
28
|
+
## When to Use This Skill
|
|
29
|
+
|
|
30
|
+
- Use when converting Markdown tutorials, reports, or presentations into narrated videos.
|
|
31
|
+
- Use when creating presentation-style videos.
|
|
32
|
+
- Use when the user asks for Markdown-to-video, narrated slides, or audio-video generation.
|
|
33
|
+
|
|
34
|
+
## How It Works
|
|
35
|
+
|
|
36
|
+
### Step 1: Check Environment
|
|
37
|
+
|
|
38
|
+
Verify required local dependencies before running the workflow. Do not install, remove, or modify dependencies without user confirmation.
|
|
39
|
+
|
|
40
|
+
### Step 2: Prepare the Markdown
|
|
41
|
+
|
|
42
|
+
Keep the original file unchanged.
|
|
43
|
+
|
|
44
|
+
Create a new Markdown file with improved sectioning, formatting, and natural transitions while preserving the original meaning.
|
|
45
|
+
|
|
46
|
+
### Step 3: Generate Presentation Markdown
|
|
47
|
+
|
|
48
|
+
Convert the prepared document into Marp-compatible slides.
|
|
49
|
+
|
|
50
|
+
- Separate slides with `---`.
|
|
51
|
+
- Prevent content overflow.
|
|
52
|
+
- Split oversized tables, code blocks, or sections when necessary.
|
|
53
|
+
- Ask the user to choose a Marp style when required.
|
|
54
|
+
|
|
55
|
+
### Step 4: Generate Narration
|
|
56
|
+
|
|
57
|
+
Create a narration Markdown file aligned one-to-one with the presentation slides.
|
|
58
|
+
|
|
59
|
+
Remove visual-only characters that should not be spoken and verify that slide separators remain synchronized.
|
|
60
|
+
|
|
61
|
+
### Step 5: Generate Video
|
|
62
|
+
|
|
63
|
+
Run the provided video-generation script with the presentation and narration files:
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
python ai-2md2marp2av.py presentation.md narration.md
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
The script renders Marp slides, generates speech with Edge-TTS, and combines them into an MP4 video.
|
|
70
|
+
|
|
71
|
+
Ask the user to complete any interactive input required by the script.
|
|
72
|
+
|
|
73
|
+
### Step 6: Fallback
|
|
74
|
+
|
|
75
|
+
If the primary workflow fails, try the included fallback scripts in order:
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
python md2marp2av.py
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Then:
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
python md2video.py
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Examples
|
|
88
|
+
|
|
89
|
+
### Example 1: Convert a Tutorial
|
|
90
|
+
|
|
91
|
+
```
|
|
92
|
+
/md2video-audio tutorial.md
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Produces presentation Markdown, narration Markdown, and a narrated MP4 video.
|
|
96
|
+
|
|
97
|
+
### Example 2: Convert a Work Report
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
/md2video-audio project-review.md
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Use the generated slides and narration to create a presentation-style report video.
|
|
104
|
+
|
|
105
|
+
## Best Practices
|
|
106
|
+
|
|
107
|
+
- ✅ Preserve the original Markdown file.
|
|
108
|
+
- ✅ Keep presentation and narration slide counts synchronized.
|
|
109
|
+
- ✅ Split slides that exceed safe layout limits.
|
|
110
|
+
- ✅ Confirm before installing dependencies or running interactive actions.
|
|
111
|
+
- ❌ Do not overwrite the source document.
|
|
112
|
+
- ❌ Do not silently install, remove, or modify system dependencies.
|
|
113
|
+
|
|
114
|
+
## Limitations
|
|
115
|
+
|
|
116
|
+
- Requires the local runtime and dependencies used by the included scripts.
|
|
117
|
+
- Complex Markdown layouts may require manual adjustment.
|
|
118
|
+
- Edge-TTS availability depends on the local network and runtime environment.
|
|
119
|
+
- Stop and ask for clarification when required files, permissions, or user choices are missing.
|
|
120
|
+
|
|
121
|
+
## Security & Safety Notes
|
|
122
|
+
|
|
123
|
+
- Run scripts only in a local or authorized environment.
|
|
124
|
+
- Confirm with the user before installing dependencies or making environment changes.
|
|
125
|
+
- Generated files should be written as new files rather than replacing source content.
|
|
126
|
+
- Do not execute interactive or destructive commands without explicit user confirmation.
|
|
127
|
+
|
|
128
|
+
## Common Pitfalls
|
|
129
|
+
|
|
130
|
+
- **Problem:** Presentation and narration contain different slide counts.
|
|
131
|
+
**Solution:** Verify the number of `---` separators and realign the narration.
|
|
132
|
+
- **Problem:** Slide content overflows the Marp layout.
|
|
133
|
+
**Solution:** Split the content into smaller logical sections before rendering.
|
|
134
|
+
- **Problem:** Video generation fails because dependencies are unavailable.
|
|
135
|
+
**Solution:** Verify the environment first, then use the fallback scripts if appropriate.
|
package/package.json
CHANGED
package/skills_index.json
CHANGED
|
@@ -1392,6 +1392,43 @@
|
|
|
1392
1392
|
"session-analysis"
|
|
1393
1393
|
]
|
|
1394
1394
|
},
|
|
1395
|
+
{
|
|
1396
|
+
"id": "agy-auto",
|
|
1397
|
+
"path": "skills/agy-auto",
|
|
1398
|
+
"category": "security",
|
|
1399
|
+
"name": "agy-auto",
|
|
1400
|
+
"description": "Configure agy-auto PreToolUse security gate to run Antigravity CLI (agy) unattended with layered policy controls instead of --dangerously-skip-permissions.",
|
|
1401
|
+
"risk": "critical",
|
|
1402
|
+
"source": "community",
|
|
1403
|
+
"date_added": "2026-09-11",
|
|
1404
|
+
"plugin": {
|
|
1405
|
+
"targets": {
|
|
1406
|
+
"codex": "blocked",
|
|
1407
|
+
"claude": "blocked"
|
|
1408
|
+
},
|
|
1409
|
+
"setup": {
|
|
1410
|
+
"type": "none",
|
|
1411
|
+
"summary": "",
|
|
1412
|
+
"docs": null
|
|
1413
|
+
},
|
|
1414
|
+
"reasons": [
|
|
1415
|
+
"target_specific_home_path"
|
|
1416
|
+
]
|
|
1417
|
+
},
|
|
1418
|
+
"source_type": "community",
|
|
1419
|
+
"source_repo": "onkarbadve/agy-auto",
|
|
1420
|
+
"license": "MIT",
|
|
1421
|
+
"license_source": "https://github.com/onkarbadve/agy-auto/blob/main/LICENSE",
|
|
1422
|
+
"tags": [
|
|
1423
|
+
"antigravity",
|
|
1424
|
+
"agy",
|
|
1425
|
+
"security",
|
|
1426
|
+
"permissions",
|
|
1427
|
+
"sandboxing",
|
|
1428
|
+
"guardrails",
|
|
1429
|
+
"cli"
|
|
1430
|
+
]
|
|
1431
|
+
},
|
|
1395
1432
|
{
|
|
1396
1433
|
"id": "agy-delegate",
|
|
1397
1434
|
"path": "skills/agy-delegate",
|
|
@@ -10969,6 +11006,37 @@
|
|
|
10969
11006
|
"reasons": []
|
|
10970
11007
|
}
|
|
10971
11008
|
},
|
|
11009
|
+
{
|
|
11010
|
+
"id": "client-secret-exposure-audit",
|
|
11011
|
+
"path": "skills/client-secret-exposure-audit",
|
|
11012
|
+
"category": "security",
|
|
11013
|
+
"name": "client-secret-exposure-audit",
|
|
11014
|
+
"description": "Audit a deployed web app for secrets exposed to the browser: hardcoded API keys/tokens in JS, secrets in HTML meta/attributes/comments, publicly reachable source/config/deploy files, and header/CORS misconfig.",
|
|
11015
|
+
"risk": "safe",
|
|
11016
|
+
"source": "self",
|
|
11017
|
+
"date_added": "2026-09-10",
|
|
11018
|
+
"plugin": {
|
|
11019
|
+
"targets": {
|
|
11020
|
+
"codex": "supported",
|
|
11021
|
+
"claude": "supported"
|
|
11022
|
+
},
|
|
11023
|
+
"setup": {
|
|
11024
|
+
"type": "none",
|
|
11025
|
+
"summary": "",
|
|
11026
|
+
"docs": null
|
|
11027
|
+
},
|
|
11028
|
+
"reasons": []
|
|
11029
|
+
},
|
|
11030
|
+
"source_type": "self",
|
|
11031
|
+
"tags": [
|
|
11032
|
+
"security",
|
|
11033
|
+
"secrets",
|
|
11034
|
+
"owasp",
|
|
11035
|
+
"reconnaissance",
|
|
11036
|
+
"web",
|
|
11037
|
+
"headers"
|
|
11038
|
+
]
|
|
11039
|
+
},
|
|
10972
11040
|
{
|
|
10973
11041
|
"id": "cline-delegate",
|
|
10974
11042
|
"path": "skills/cline-delegate",
|
|
@@ -22534,6 +22602,38 @@
|
|
|
22534
22602
|
"reasons": []
|
|
22535
22603
|
}
|
|
22536
22604
|
},
|
|
22605
|
+
{
|
|
22606
|
+
"id": "glasser",
|
|
22607
|
+
"path": "skills/glasser",
|
|
22608
|
+
"category": "data",
|
|
22609
|
+
"name": "glasser",
|
|
22610
|
+
"description": "Search, inspect, and run third-party data APIs through one CLI when the environment has no suitable integration.",
|
|
22611
|
+
"risk": "critical",
|
|
22612
|
+
"source": "self",
|
|
22613
|
+
"date_added": "2026-09-12",
|
|
22614
|
+
"plugin": {
|
|
22615
|
+
"targets": {
|
|
22616
|
+
"codex": "supported",
|
|
22617
|
+
"claude": "supported"
|
|
22618
|
+
},
|
|
22619
|
+
"setup": {
|
|
22620
|
+
"type": "none",
|
|
22621
|
+
"summary": "",
|
|
22622
|
+
"docs": null
|
|
22623
|
+
},
|
|
22624
|
+
"reasons": []
|
|
22625
|
+
},
|
|
22626
|
+
"source_type": "self",
|
|
22627
|
+
"tags": [
|
|
22628
|
+
"api",
|
|
22629
|
+
"data",
|
|
22630
|
+
"search",
|
|
22631
|
+
"enrichment",
|
|
22632
|
+
"marketing",
|
|
22633
|
+
"research",
|
|
22634
|
+
"cli"
|
|
22635
|
+
]
|
|
22636
|
+
},
|
|
22537
22637
|
{
|
|
22538
22638
|
"id": "glassmorphism",
|
|
22539
22639
|
"path": "skills/design-it/glassmorphism",
|
|
@@ -29775,6 +29875,36 @@
|
|
|
29775
29875
|
"reasons": []
|
|
29776
29876
|
}
|
|
29777
29877
|
},
|
|
29878
|
+
{
|
|
29879
|
+
"id": "marketplace-rbac-audit",
|
|
29880
|
+
"path": "skills/marketplace-rbac-audit",
|
|
29881
|
+
"category": "security",
|
|
29882
|
+
"name": "marketplace-rbac-audit",
|
|
29883
|
+
"description": "Audit multi-role marketplace authorization across roles, resource ownership, tenant boundaries, and order-state transitions; use when access rules need evidence, not UI assumptions.",
|
|
29884
|
+
"risk": "safe",
|
|
29885
|
+
"source": "self",
|
|
29886
|
+
"date_added": "2026-09-12",
|
|
29887
|
+
"plugin": {
|
|
29888
|
+
"targets": {
|
|
29889
|
+
"codex": "supported",
|
|
29890
|
+
"claude": "supported"
|
|
29891
|
+
},
|
|
29892
|
+
"setup": {
|
|
29893
|
+
"type": "none",
|
|
29894
|
+
"summary": "",
|
|
29895
|
+
"docs": null
|
|
29896
|
+
},
|
|
29897
|
+
"reasons": []
|
|
29898
|
+
},
|
|
29899
|
+
"source_type": "self",
|
|
29900
|
+
"tags": [
|
|
29901
|
+
"marketplace",
|
|
29902
|
+
"rbac",
|
|
29903
|
+
"authorization",
|
|
29904
|
+
"access-control",
|
|
29905
|
+
"security"
|
|
29906
|
+
]
|
|
29907
|
+
},
|
|
29778
29908
|
{
|
|
29779
29909
|
"id": "markstream-angular",
|
|
29780
29910
|
"path": "skills/markstream-angular",
|
|
@@ -30427,6 +30557,40 @@
|
|
|
30427
30557
|
"model-context-protocol"
|
|
30428
30558
|
]
|
|
30429
30559
|
},
|
|
30560
|
+
{
|
|
30561
|
+
"id": "md2video-audio",
|
|
30562
|
+
"path": "skills/md2video-audio",
|
|
30563
|
+
"category": "media",
|
|
30564
|
+
"name": "md2video-audio",
|
|
30565
|
+
"description": "Convert Markdown documents into narrated MP4 videos with synchronized visuals and voice narration.",
|
|
30566
|
+
"risk": "safe",
|
|
30567
|
+
"source": "community",
|
|
30568
|
+
"date_added": "2026-09-12",
|
|
30569
|
+
"plugin": {
|
|
30570
|
+
"targets": {
|
|
30571
|
+
"codex": "supported",
|
|
30572
|
+
"claude": "supported"
|
|
30573
|
+
},
|
|
30574
|
+
"setup": {
|
|
30575
|
+
"type": "none",
|
|
30576
|
+
"summary": "",
|
|
30577
|
+
"docs": null
|
|
30578
|
+
},
|
|
30579
|
+
"reasons": []
|
|
30580
|
+
},
|
|
30581
|
+
"source_type": "community",
|
|
30582
|
+
"source_repo": "70v-Yoyo/md2video-audio-skill",
|
|
30583
|
+
"license": "Apache-2.0",
|
|
30584
|
+
"license_source": "https://github.com/70v-Yoyo/md2video-audio-skill/blob/main/LICENSE",
|
|
30585
|
+
"tags": [
|
|
30586
|
+
"markdown",
|
|
30587
|
+
"video",
|
|
30588
|
+
"audio",
|
|
30589
|
+
"text-to-speech",
|
|
30590
|
+
"marp",
|
|
30591
|
+
"presentation"
|
|
30592
|
+
]
|
|
30593
|
+
},
|
|
30430
30594
|
{
|
|
30431
30595
|
"id": "mdpr-skill",
|
|
30432
30596
|
"path": "skills/mdpr-skill",
|
|
@@ -36820,6 +36984,36 @@
|
|
|
36820
36984
|
"reasons": []
|
|
36821
36985
|
}
|
|
36822
36986
|
},
|
|
36987
|
+
{
|
|
36988
|
+
"id": "production-runtime-certification",
|
|
36989
|
+
"path": "skills/production-runtime-certification",
|
|
36990
|
+
"category": "devops",
|
|
36991
|
+
"name": "production-runtime-certification",
|
|
36992
|
+
"description": "Certify a deployed service with fresh evidence across source, CI, migrations, runtime health, readiness, and critical routes; use before declaring a release production-ready.",
|
|
36993
|
+
"risk": "safe",
|
|
36994
|
+
"source": "self",
|
|
36995
|
+
"date_added": "2026-09-12",
|
|
36996
|
+
"plugin": {
|
|
36997
|
+
"targets": {
|
|
36998
|
+
"codex": "supported",
|
|
36999
|
+
"claude": "supported"
|
|
37000
|
+
},
|
|
37001
|
+
"setup": {
|
|
37002
|
+
"type": "none",
|
|
37003
|
+
"summary": "",
|
|
37004
|
+
"docs": null
|
|
37005
|
+
},
|
|
37006
|
+
"reasons": []
|
|
37007
|
+
},
|
|
37008
|
+
"source_type": "self",
|
|
37009
|
+
"tags": [
|
|
37010
|
+
"production",
|
|
37011
|
+
"deployment",
|
|
37012
|
+
"verification",
|
|
37013
|
+
"reliability",
|
|
37014
|
+
"devops"
|
|
37015
|
+
]
|
|
37016
|
+
},
|
|
36823
37017
|
{
|
|
36824
37018
|
"id": "production-scheduling",
|
|
36825
37019
|
"path": "skills/production-scheduling",
|