checkmyvibe 1.0.1 → 1.1.0
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/README.md +22 -14
- package/SKILL.md +54 -33
- package/commands/checkmyvibe-auth.md +3 -0
- package/commands/checkmyvibe-backend.md +8 -0
- package/commands/checkmyvibe-db.md +3 -0
- package/commands/checkmyvibe-frontend.md +6 -0
- package/commands/checkmyvibe-payment.md +3 -0
- package/commands/checkmyvibe-secrets.md +3 -0
- package/commands/checkmyvibe.md +3 -0
- package/install.js +47 -23
- package/package.json +5 -3
- package/references/{vibe_vulnerability_patterns.md → vibe_risk_patterns.md} +2 -2
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# checkmyvibe
|
|
2
2
|
|
|
3
|
-
A structured, zero-dependency, local
|
|
3
|
+
A structured, zero-dependency, local production readiness and code quality workflow packaged as an Agent Skill for AI coding assistants (such as Claude Code, Cursor, Codex, and Gemini CLI).
|
|
4
4
|
|
|
5
|
-
AI-generated ("vibe-coded") applications built on modern AI tools frequently ship with serious, well-documented
|
|
5
|
+
AI-generated ("vibe-coded") applications built on modern AI tools frequently ship with serious, well-documented configuration and quality issues—such as exposed API keys, fake authentication stubs, permissive default database rules, and client-side pricing logic. **checkmyvibe** solves this by packaging readiness and verification checks directly into an Agent Skill. When you ask your coding agent to "run checkmyvibe" or "perform a readiness check", the agent uses checkmyvibe's local helper scripts and its own reasoning capabilities to analyze your codebase, producing a prioritized report detailing what configuration issues or gaps exist, why they matter, and how to fix them.
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -20,8 +20,8 @@ AI-generated ("vibe-coded") applications built on modern AI tools frequently shi
|
|
|
20
20
|
## What This Does NOT Check For (Disclaimer)
|
|
21
21
|
|
|
22
22
|
> [!WARNING]
|
|
23
|
-
> **checkmyvibe is not a substitute for a full professional security audit.**
|
|
24
|
-
> This tool is a first-pass
|
|
23
|
+
> **checkmyvibe is not a substitute for a full professional external security audit.**
|
|
24
|
+
> This tool is a first-pass quality and readiness checklist meant to highlight common mistakes and temporary scaffolding shortcuts made by AI coding models during rapid prototyping. It does not perform dynamic runtime analysis, penetration testing, deep static analysis, dependency vulnerability checks, or comprehensive logic auditing. Do not rely solely on checkmyvibe to declare your application hardened for production.
|
|
25
25
|
|
|
26
26
|
---
|
|
27
27
|
|
|
@@ -42,23 +42,31 @@ If you prefer not to use `npx`, copy the files manually:
|
|
|
42
42
|
1. Create a `checkmyvibe` directory inside your agent's skills path:
|
|
43
43
|
* **Project-level (Claude Code):** `.claude/skills/checkmyvibe/`
|
|
44
44
|
* **Global/Personal (Claude Code):** `~/.claude/skills/checkmyvibe/`
|
|
45
|
-
2. Copy `SKILL.md`, the `scripts/` folder, and
|
|
45
|
+
2. Copy `SKILL.md`, the `scripts/` folder, `references/` folder, and `commands/` folder into that directory.
|
|
46
|
+
3. (Optional for slash command support) Copy the files from `commands/` directly into `.claude/commands/` (or `~/.claude/commands/`).
|
|
46
47
|
|
|
47
48
|
---
|
|
48
49
|
|
|
49
50
|
## Usage
|
|
50
51
|
|
|
51
|
-
|
|
52
|
+
### Full Production Readiness Audit
|
|
53
|
+
Run a complete audit across all categories before deploying or shipping:
|
|
54
|
+
* Command: `/checkmyvibe`
|
|
55
|
+
* Or prompt: *"Run checkmyvibe on this project"*
|
|
52
56
|
|
|
53
|
-
###
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
/
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
### Focused / Scoped Scanning
|
|
58
|
+
When actively developing a specific feature, run focused scans for fast, targeted feedback without running the entire test suite:
|
|
59
|
+
|
|
60
|
+
| Slash Command | Scope / Keyword | Included Checks | Use Case |
|
|
61
|
+
| :--- | :--- | :--- | :--- |
|
|
62
|
+
| `/checkmyvibe-secrets` | `/checkmyvibe secrets` | Check 1 + Check 2 | Exposed API keys, hardcoded credentials, and `.gitignore` hygiene |
|
|
63
|
+
| `/checkmyvibe-auth` | `/checkmyvibe auth` | Check 3 | Missing, mock, stubbed, or bypassed authentication guards |
|
|
64
|
+
| `/checkmyvibe-db` | `/checkmyvibe db` | Check 4 | Database & BaaS rules, Supabase RLS policies, Firebase permissions |
|
|
65
|
+
| `/checkmyvibe-backend` | `/checkmyvibe backend` | Checks 3, 4, 5, 6 (server), 7 | All server-side logic: auth, DB/RLS, IDOR/BOLA, SQLi/input validation, pricing |
|
|
66
|
+
| `/checkmyvibe-frontend` | `/checkmyvibe frontend` | Checks 1 (client), 3 (client), 7 (client) | Client bundle key leaks, UI-only auth hiding, client-side pricing overrides |
|
|
67
|
+
| `/checkmyvibe-payment` | `/checkmyvibe payment` | Check 7 | Client-side payment tampering, price overrides, and checkout integrity |
|
|
60
68
|
|
|
61
|
-
The agent will walk through the checks, execute
|
|
69
|
+
The agent will walk through the scoped checks, execute relevant local helper scripts, and print a prioritized markdown report (Critical / Should Fix / Worth Reviewing) with concrete remediation steps.
|
|
62
70
|
|
|
63
71
|
---
|
|
64
72
|
|
package/SKILL.md
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: checkmyvibe
|
|
3
3
|
description: >
|
|
4
|
-
Use this skill when the user asks
|
|
4
|
+
Use this skill when the user asks to "check my vibe", run a production readiness check, review code quality, do a sanity check, check for exposed environment variables, or check if the app is ready to launch/ship, or runs a scoped check like `/checkmyvibe db`, `/checkmyvibe auth`, `/checkmyvibe secrets`, `/checkmyvibe payment`, `/checkmyvibe backend`, or `/checkmyvibe frontend`. Also trigger proactively when the agent is about to help deploy, publish, or push an application live, or when the codebase shows signs of AI-scaffolded patterns (Supabase/Firebase config, recently generated boilerplate, auth stubs, no existing verification) and the user has not had one done yet.
|
|
5
5
|
---
|
|
6
|
-
|
|
7
|
-
# checkmyvibe — Security Audit for Vibe-Coded Apps
|
|
6
|
+
# checkmyvibe — Production Readiness & Code Quality Check for Vibe-Coded Apps
|
|
8
7
|
|
|
9
8
|
## Why this skill exists
|
|
10
9
|
|
|
11
|
-
AI coding tools optimize for "it works," not "it's
|
|
10
|
+
AI coding tools optimize for "it works," not "it's production-ready." A feature can pass every
|
|
12
11
|
manual test a non-technical founder runs — sign up, log in, place an order — and
|
|
13
12
|
still leak every other user's data to a stranger who changes one number in a URL.
|
|
14
13
|
This happens because AI-generated code frequently ships with scaffolding shortcuts
|
|
@@ -16,26 +15,44 @@ that were meant to be temporary (a stub auth check, a permissive default databas
|
|
|
16
15
|
rule) and never get hardened before launch, precisely because the person building
|
|
17
16
|
the app doesn't know those shortcuts exist or what to look for.
|
|
18
17
|
|
|
19
|
-
Your job when this skill is active: think like
|
|
20
|
-
pre-launch review for a client who has never heard the words "IDOR" or "row-level
|
|
21
|
-
security." Find the real,
|
|
22
|
-
exact fixes. Do not pad the report with theoretical concerns that don't apply
|
|
23
|
-
this specific codebase, and do not skip a check because the codebase "looks
|
|
24
|
-
simple
|
|
25
|
-
|
|
18
|
+
Your job when this skill is active: think like an experienced software engineer doing a
|
|
19
|
+
pre-launch quality review for a client who has never heard the words "IDOR" or "row-level
|
|
20
|
+
security." Find the real, addressable configuration and logic issues. Explain them in plain
|
|
21
|
+
language. Give exact fixes. Do not pad the report with theoretical concerns that don't apply
|
|
22
|
+
to this specific codebase, and do not skip a check because the codebase "looks simple" —
|
|
23
|
+
simple codebases are exactly where stubbed auth and hardcoded secrets hide, because nobody
|
|
24
|
+
expected them to hold real user data yet.
|
|
26
25
|
|
|
27
26
|
## Scope and honesty (read this before writing any report)
|
|
28
27
|
|
|
29
|
-
This is a first-pass
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
below. Never tell the user their app is "secure" or "safe" in an unqualified way.
|
|
28
|
+
This is a first-pass review for known, documented scaffolding failure patterns. It is not a
|
|
29
|
+
comprehensive external validation, and it does not cover infrastructure hosting, third-party package
|
|
30
|
+
issues, or novel/business-logic-specific flaws outside the categories below. Never tell the user their app is completely "secure" or "safe" in an unqualified way.
|
|
33
31
|
The correct language is "no issues found in this pass" or "ready to ship as far as
|
|
34
32
|
these checks go" — always paired with the scope reminder in the Final Summary
|
|
35
33
|
section. If the app appears to handle payments, health data, or other regulated
|
|
36
|
-
data, say explicitly that a professional
|
|
34
|
+
data, say explicitly that a professional verification is strongly recommended regardless
|
|
37
35
|
of what this pass finds.
|
|
38
36
|
|
|
37
|
+
## Scope selection
|
|
38
|
+
|
|
39
|
+
checkmyvibe supports targeted/scoped scanning for rapid iteration during development, as well as full audits before release. When a specific scope or slash command is specified, execute only the mapped checks:
|
|
40
|
+
|
|
41
|
+
| Scope / Command Keyword | Included Checks | Description / Focus Area |
|
|
42
|
+
| :--- | :--- | :--- |
|
|
43
|
+
| **`secrets`** | **Check 1 + Check 2** | Exposed credentials, API keys, tokens, and `.gitignore` file protection |
|
|
44
|
+
| **`auth`** | **Check 3** | Missing, mock, stubbed, or bypassed authentication guards |
|
|
45
|
+
| **`db`** | **Check 4** | Database & BaaS rules, Supabase RLS policies, Firebase/storage permissions |
|
|
46
|
+
| **`backend`** | **Check 3 + Check 4 + Check 5 + Check 6 (server-side) + Check 7** | All server-side logic: auth guards, database configs, IDOR/BOLA, SQLi/input validation, and payment processing |
|
|
47
|
+
| **`frontend`** | **Check 1 (client-exposed) + Check 3 (client-only auth) + Check 7 (client pricing)** | Client-side bundle leaks, UI-only auth hiding, and client-controlled payment/pricing logic |
|
|
48
|
+
| **`payment`** | **Check 7** | Client-side payment amount tampering, price overrides, and checkout integrity |
|
|
49
|
+
| *(no argument / `full`)* | **All Checks (1–7)** | Full production readiness and code quality audit |
|
|
50
|
+
|
|
51
|
+
### Rules for Scoped Runs:
|
|
52
|
+
- **Execute only the selected checks:** Do not run unselected check scripts or inspect code outside the chosen scope.
|
|
53
|
+
- **Explicit scope transparency:** At the start and in the final summary of the report, clearly state which checks were run and which checks were skipped.
|
|
54
|
+
- **No false safety claims:** A clean scoped scan does **not** mean the app is ready for production. State clearly: *"This was a [scope]-only check. Run a full `/checkmyvibe` audit across all categories prior to launch."*
|
|
55
|
+
|
|
39
56
|
## Before you start
|
|
40
57
|
|
|
41
58
|
1. **Analyze and understand the whole project first:** Walk the directory tree and analyze the repository configuration files before running any checks, generating findings, or providing instructions. Establish a solid high-level understanding of the architecture, components, and data flow.
|
|
@@ -51,7 +68,6 @@ of what this pass finds.
|
|
|
51
68
|
|
|
52
69
|
---
|
|
53
70
|
|
|
54
|
-
|
|
55
71
|
## Supported stacks to recognize
|
|
56
72
|
|
|
57
73
|
Common stacks this skill should expect include: Next.js, Express, FastAPI, Supabase, Firebase, Prisma, Postgres, MongoDB, Clerk, NextAuth, Stripe, and common app patterns built around them.
|
|
@@ -80,6 +96,7 @@ strings, and variable assignments where a name like `key`, `secret`, `token`, or
|
|
|
80
96
|
`password` is set to a literal string instead of `process.env.X` or equivalent.
|
|
81
97
|
|
|
82
98
|
**What counts as a finding:**
|
|
99
|
+
|
|
83
100
|
- A real credential committed directly in source, e.g.:
|
|
84
101
|
`const stripeKey = "sk_live_51H8x..."` — Critical
|
|
85
102
|
- A secret present only in `.env` but `.env` is not gitignored (see Check 2) —
|
|
@@ -90,6 +107,7 @@ strings, and variable assignments where a name like `key`, `secret`, `token`, or
|
|
|
90
107
|
Critical, this is directly shippable to every visitor's browser
|
|
91
108
|
|
|
92
109
|
**What is NOT a finding (avoid false positives):**
|
|
110
|
+
|
|
93
111
|
- Public/anon/publishable keys that are designed to be exposed client-side
|
|
94
112
|
(Stripe publishable keys starting `pk_`, Supabase anon keys) — these are safe
|
|
95
113
|
by design as long as server-side authorization (RLS, API checks) is correctly
|
|
@@ -105,10 +123,10 @@ them (not just whether a `.gitignore` file exists — many AI-generated `.gitign
|
|
|
105
123
|
files exist but miss the actual secret file).
|
|
106
124
|
|
|
107
125
|
**What counts as a finding:**
|
|
126
|
+
|
|
108
127
|
- `.env` present in the working directory and not listed in `.gitignore` —
|
|
109
128
|
Critical, regardless of current contents
|
|
110
|
-
- `.env` already committed to git history (check with a quick `git log --all
|
|
111
|
-
--full-history -- .env` if git is available) — Critical, and note in the
|
|
129
|
+
- `.env` already committed to git history (check with a quick `git log --all --full-history -- .env` if git is available) — Critical, and note in the
|
|
112
130
|
fix that removing it from `.gitignore` going forward is not enough; the
|
|
113
131
|
secrets in git history must be rotated, since they're recoverable even after
|
|
114
132
|
deletion
|
|
@@ -119,17 +137,18 @@ files exist but miss the actual secret file).
|
|
|
119
137
|
checks) for these patterns:
|
|
120
138
|
|
|
121
139
|
**What counts as a finding:**
|
|
140
|
+
|
|
122
141
|
- A function that always returns true/success regardless of input, e.g.:
|
|
123
142
|
```js
|
|
124
143
|
function isAuthenticated(req) {
|
|
125
144
|
return true; // TODO: implement real auth
|
|
126
145
|
}
|
|
127
146
|
```
|
|
147
|
+
|
|
128
148
|
Critical — this is a placeholder someone forgot to replace.
|
|
129
149
|
- Naming that signals a stub: `mockAuth`, `fakeLogin`, `tempAuth`, `bypassAuth`,
|
|
130
150
|
`skipAuth`, `devAuth` still present in a codebase with no clear dev-only guard
|
|
131
|
-
around it. If it IS properly guarded (e.g. `if (process.env.NODE_ENV ===
|
|
132
|
-
'development')`), verify the guard is airtight and note it as Should Fix
|
|
151
|
+
around it. If it IS properly guarded (e.g. `if (process.env.NODE_ENV === 'development')`), verify the guard is airtight and note it as Should Fix
|
|
133
152
|
rather than Critical, since misconfigured environment variables in production
|
|
134
153
|
are a common way these leak through anyway.
|
|
135
154
|
- A protected route or API endpoint with no auth check at all — compare route
|
|
@@ -153,6 +172,7 @@ If the project uses **Supabase**: check for row-level security (RLS) policies on
|
|
|
153
172
|
every table that holds user-specific data. A table with RLS disabled, or enabled
|
|
154
173
|
with a policy like `USING (true)` for `SELECT`/`UPDATE`/`DELETE`, means any
|
|
155
174
|
authenticated (or even anonymous) user can read or modify every row.
|
|
175
|
+
|
|
156
176
|
```sql
|
|
157
177
|
-- Finding example: this policy applies to ALL rows for ALL users
|
|
158
178
|
CREATE POLICY "allow all" ON orders FOR SELECT USING (true);
|
|
@@ -204,6 +224,7 @@ common and DELETE is often the most damaging.
|
|
|
204
224
|
## Check 6: Unvalidated inputs
|
|
205
225
|
|
|
206
226
|
Spot-check forms and API endpoints for:
|
|
227
|
+
|
|
207
228
|
- No type or length validation on inputs before they're stored or used
|
|
208
229
|
- User input passed into a database query via string concatenation rather than
|
|
209
230
|
parameterized queries/an ORM (SQL injection risk)
|
|
@@ -261,6 +282,7 @@ For every finding, use exactly this structure:
|
|
|
261
282
|
- Include a `Generated fix:` line when a direct code snippet or precise implementation step would help the agent patch the issue immediately.
|
|
262
283
|
|
|
263
284
|
**[SEVERITY] Short title**
|
|
285
|
+
|
|
264
286
|
- **What's wrong:** plain-English description, no jargon. If a technical term is
|
|
265
287
|
unavoidable (e.g. "IDOR"), define it in one clause the first time it's used.
|
|
266
288
|
- **Why it matters:** a concrete, real-world consequence a non-technical person
|
|
@@ -271,10 +293,10 @@ For every finding, use exactly this structure:
|
|
|
271
293
|
suggestion like "add proper validation."
|
|
272
294
|
- **File(s):** exact path and line number(s).
|
|
273
295
|
|
|
274
|
-
|
|
275
296
|
## After the checks
|
|
276
297
|
|
|
277
|
-
Once the checks are complete, create a
|
|
298
|
+
Once the checks are complete, create a readiness review report. **The report must be written in clear, plain English, completely free of dense technical jargon, so that it is easily understandable by non-technical stakeholders (such as founders, clients, or project managers).** The report must include:
|
|
299
|
+
|
|
278
300
|
- what was found
|
|
279
301
|
- what is fixed already
|
|
280
302
|
- how each fix was applied
|
|
@@ -283,12 +305,12 @@ Once the checks are complete, create a security audit/report. **The report must
|
|
|
283
305
|
|
|
284
306
|
If no issues are found, still produce a short report that says no blocking issues were found in this pass, which categories were checked, and what the remaining scope limits are.
|
|
285
307
|
|
|
286
|
-
|
|
287
308
|
## Example report style
|
|
288
309
|
|
|
289
310
|
Use clear, direct wording like:
|
|
290
311
|
|
|
291
312
|
**[Critical] Missing object-level authorization**
|
|
313
|
+
|
|
292
314
|
- **What's wrong:** Any logged-in user can read another user's order by changing the order ID.
|
|
293
315
|
- **Why it matters:** A stranger could see someone else's orders and personal details.
|
|
294
316
|
- **The fix:** Add a user ownership check in the query and return 404 when the record does not belong to the current user.
|
|
@@ -296,22 +318,21 @@ Use clear, direct wording like:
|
|
|
296
318
|
|
|
297
319
|
## Final summary
|
|
298
320
|
|
|
299
|
-
End every
|
|
321
|
+
End every review with, in this order:
|
|
322
|
+
|
|
300
323
|
1. Stack and data-sensitivity context noted at the start (one line)
|
|
301
324
|
2. Total findings by severity, e.g. "2 Critical, 3 Should Fix, 1 Worth Reviewing"
|
|
302
325
|
3. A one-line verdict: "Not ready to ship — fix the Critical items first" or "No
|
|
303
326
|
blocking issues found in this pass — review the Should Fix items when you can"
|
|
304
|
-
4. The scope reminder:
|
|
305
|
-
exposed secrets, auth stubs, database
|
|
306
|
-
|
|
307
|
-
handles payment, health, or other regulated data, get a professional security
|
|
308
|
-
review before launch regardless of these results."
|
|
327
|
+
4. The scope reminder:
|
|
328
|
+
- **For Full Audit:** "This review covers common configuration patterns seen in AI-generated code — exposed secrets, auth stubs, database rules, object-level authorization, input validation, and client-side payment logic. It is not a comprehensive third-party safety audit or pentest. If this app handles payment, health, or other regulated data, get a professional external review before launch regardless of these results."
|
|
329
|
+
- **For Scoped Scan:** "This was a focused [SCOPE]-only check ([LIST OF RUN CHECKS]). Skipped checks: [LIST OF SKIPPED CHECKS]. A clean scoped check does not mean the application is production-ready. Always run a full `/checkmyvibe` audit prior to release, and obtain a professional external security review if handling sensitive or regulated data."
|
|
309
330
|
|
|
310
331
|
## Notes for the agent
|
|
311
332
|
|
|
312
|
-
- Always produce
|
|
333
|
+
- Always produce a review report after the check; do not stop at raw findings.
|
|
313
334
|
- Write the entire report in clear, accessible language. Frame findings around concrete, real-world user consequences rather than abstract technical concepts. A non-technical stakeholder must be able to read the report and immediately understand the real-world danger.
|
|
314
|
-
- The
|
|
335
|
+
- The review should clearly separate what was found, what was fixed, how it was fixed, and what remains.
|
|
315
336
|
- Always run the available scripts (located in the `scripts/` directory relative to this `SKILL.md` file) before relying on reasoning alone for Checks 1-4 — they exist so those specific checks are reliable and repeatable rather than dependent on re-deriving the logic every time.
|
|
316
337
|
- If a script is missing, fails to run, or the language/stack isn't supported by
|
|
317
338
|
it, say so explicitly in the report ("automated secret scan could not run;
|
|
@@ -323,4 +344,4 @@ End every audit with, in this order:
|
|
|
323
344
|
categories — pick the most relevant category and reference it once.
|
|
324
345
|
- If the codebase is large, prioritize routes and files that touch
|
|
325
346
|
authentication, payments, and any endpoint returning data tied to a specific
|
|
326
|
-
user ID — these are where real damage concentrates.
|
|
347
|
+
user ID — these are where real damage concentrates.
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
Read the checkmyvibe `SKILL.md`. Run only **Check 3 (missing or fake authentication)** from that skill.
|
|
2
|
+
|
|
3
|
+
Use the same report format, severity rubric, and final summary structure defined in `SKILL.md`, but scope the final summary to note that this was an authentication-only check (Checks 1, 2, 4, 5, 6, and 7 were skipped), not a full audit, and suggest running the full `/checkmyvibe` audit before launch.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
Read the checkmyvibe `SKILL.md`. Run only the server-side / backend checks from that skill:
|
|
2
|
+
- **Check 3 (missing or fake authentication)**
|
|
3
|
+
- **Check 4 (database and backend-as-a-service misconfiguration)**
|
|
4
|
+
- **Check 5 (broken object-level authorization / IDOR)**
|
|
5
|
+
- **Check 6 (unvalidated inputs, server-side / query portion)**
|
|
6
|
+
- **Check 7 (payment and pricing logic)**
|
|
7
|
+
|
|
8
|
+
Use the same report format, severity rubric, and final summary structure defined in `SKILL.md`, but scope the final summary to note that this was a backend-only check (Check 1 client bundle secrets and Check 2 .gitignore hygiene were skipped), not a full audit, and suggest running the full `/checkmyvibe` audit before launch.
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
Read the checkmyvibe `SKILL.md`. Run only **Check 4 (database and backend-as-a-service misconfiguration)** from that skill.
|
|
2
|
+
|
|
3
|
+
Use the same report format, severity rubric, and final summary structure defined there, but scope the final summary to note that this was a database-only check (Checks 1, 2, 3, 5, 6, and 7 were skipped), not a full audit, and suggest running the full `/checkmyvibe` audit before launch.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
Read the checkmyvibe `SKILL.md`. Run only the frontend / client-side checks from that skill:
|
|
2
|
+
- **Check 1 (client-exposed secrets in frontend bundles and environment configurations)**
|
|
3
|
+
- **Check 3 (client-side-only auth checks / UI hiding without server enforcement)**
|
|
4
|
+
- **Check 7 (client-side payment or pricing logic)**
|
|
5
|
+
|
|
6
|
+
Use the same report format, severity rubric, and final summary structure defined in `SKILL.md`, but scope the final summary to note that this was a frontend-only check (Check 2 .gitignore hygiene, Check 4 database rules, Check 5 IDOR, Check 6 server input validation, and full server auth checks were skipped), not a full audit, and suggest running the full `/checkmyvibe` audit before launch.
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
Read the checkmyvibe `SKILL.md`. Run only **Check 7 (client-side payment or pricing logic)** from that skill.
|
|
2
|
+
|
|
3
|
+
Use the same report format, severity rubric, and final summary structure defined in `SKILL.md`, but scope the final summary to note that this was a payment/pricing-only check (Checks 1, 2, 3, 4, 5, and 6 were skipped), not a full audit, and suggest running the full `/checkmyvibe` audit before launch.
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
Read the checkmyvibe `SKILL.md`. Run only **Check 1 (exposed secrets and credentials)** and **Check 2 (.gitignore hygiene)** from that skill.
|
|
2
|
+
|
|
3
|
+
Use the same report format, severity rubric, and final summary structure defined in `SKILL.md`, but scope the final summary to note that this was a secrets-only check (Checks 3, 4, 5, 6, and 7 were skipped), not a full audit, and suggest running the full `/checkmyvibe` audit before launch.
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
Read the checkmyvibe `SKILL.md`. Run a full production readiness and code quality audit across all checks (Checks 1 through 7: exposed secrets, .gitignore hygiene, missing/fake auth, database misconfigurations, IDOR/BOLA, unvalidated inputs, and client-side payment logic).
|
|
2
|
+
|
|
3
|
+
Use the report format, severity rubric, and final summary structure defined in `SKILL.md`.
|
package/install.js
CHANGED
|
@@ -9,13 +9,17 @@ const readline = require('readline');
|
|
|
9
9
|
const srcSkill = path.join(__dirname, 'SKILL.md');
|
|
10
10
|
const srcScripts = path.join(__dirname, 'scripts');
|
|
11
11
|
const srcReferences = path.join(__dirname, 'references');
|
|
12
|
+
const srcCommands = path.join(__dirname, 'commands');
|
|
12
13
|
|
|
13
14
|
// Destination selection
|
|
14
15
|
const cwd = process.cwd();
|
|
15
16
|
const hasLocalClaude = fs.existsSync(path.join(cwd, '.claude'));
|
|
16
17
|
|
|
17
|
-
const
|
|
18
|
-
const
|
|
18
|
+
const localSkillDest = path.join(cwd, '.claude', 'skills', 'checkmyvibe');
|
|
19
|
+
const localCommandsDest = path.join(cwd, '.claude', 'commands');
|
|
20
|
+
|
|
21
|
+
const globalSkillDest = path.join(os.homedir(), '.claude', 'skills', 'checkmyvibe');
|
|
22
|
+
const globalCommandsDest = path.join(os.homedir(), '.claude', 'commands');
|
|
19
23
|
|
|
20
24
|
function copyRecursiveSync(src, dest) {
|
|
21
25
|
if (fs.statSync(src).isDirectory()) {
|
|
@@ -28,34 +32,54 @@ function copyRecursiveSync(src, dest) {
|
|
|
28
32
|
}
|
|
29
33
|
}
|
|
30
34
|
|
|
31
|
-
function performInstall(
|
|
35
|
+
function performInstall(skillDest, commandsDest) {
|
|
32
36
|
try {
|
|
33
|
-
console.log(`\nInstalling checkmyvibe to: ${
|
|
37
|
+
console.log(`\nInstalling checkmyvibe skill to: ${skillDest}...`);
|
|
34
38
|
|
|
35
|
-
// Clear destination if it already exists (overwrite mode)
|
|
36
|
-
if (fs.existsSync(
|
|
39
|
+
// Clear skill destination if it already exists (overwrite mode)
|
|
40
|
+
if (fs.existsSync(skillDest)) {
|
|
37
41
|
if (fs.rmSync) {
|
|
38
|
-
fs.rmSync(
|
|
42
|
+
fs.rmSync(skillDest, { recursive: true, force: true });
|
|
39
43
|
} else {
|
|
40
|
-
fs.rmdirSync(
|
|
44
|
+
fs.rmdirSync(skillDest, { recursive: true });
|
|
41
45
|
}
|
|
42
46
|
}
|
|
43
|
-
fs.mkdirSync(
|
|
47
|
+
fs.mkdirSync(skillDest, { recursive: true });
|
|
44
48
|
|
|
45
49
|
// Copy SKILL.md
|
|
46
|
-
fs.copyFileSync(srcSkill, path.join(
|
|
50
|
+
fs.copyFileSync(srcSkill, path.join(skillDest, 'SKILL.md'));
|
|
47
51
|
|
|
48
|
-
// Copy folders
|
|
49
|
-
copyRecursiveSync(srcScripts, path.join(
|
|
50
|
-
copyRecursiveSync(srcReferences, path.join(
|
|
52
|
+
// Copy folders into skill destination
|
|
53
|
+
copyRecursiveSync(srcScripts, path.join(skillDest, 'scripts'));
|
|
54
|
+
copyRecursiveSync(srcReferences, path.join(skillDest, 'references'));
|
|
55
|
+
if (fs.existsSync(srcCommands)) {
|
|
56
|
+
copyRecursiveSync(srcCommands, path.join(skillDest, 'commands'));
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Install slash commands into agent commands directory
|
|
60
|
+
if (fs.existsSync(srcCommands)) {
|
|
61
|
+
console.log(`Installing slash commands to: ${commandsDest}...`);
|
|
62
|
+
fs.mkdirSync(commandsDest, { recursive: true });
|
|
63
|
+
fs.readdirSync(srcCommands).forEach((cmdFile) => {
|
|
64
|
+
if (cmdFile.endsWith('.md')) {
|
|
65
|
+
fs.copyFileSync(path.join(srcCommands, cmdFile), path.join(commandsDest, cmdFile));
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}
|
|
51
69
|
|
|
52
70
|
console.log('\n=========================================');
|
|
53
|
-
console.log('🎉 checkmyvibe Agent Skill installed!');
|
|
71
|
+
console.log('🎉 checkmyvibe Agent Skill & Commands installed!');
|
|
54
72
|
console.log('=========================================');
|
|
55
|
-
console.log('\nHow to run
|
|
56
|
-
console.log('
|
|
57
|
-
console.log('
|
|
58
|
-
console.log('
|
|
73
|
+
console.log('\nHow to run checkmyvibe:');
|
|
74
|
+
console.log('• Full Audit:');
|
|
75
|
+
console.log(' /checkmyvibe or "run checkmyvibe"');
|
|
76
|
+
console.log('\n• Focused / Scoped Scans:');
|
|
77
|
+
console.log(' /checkmyvibe secrets (or /checkmyvibe-secrets) -> Exposed secrets & .gitignore');
|
|
78
|
+
console.log(' /checkmyvibe auth (or /checkmyvibe-auth) -> Authentication checks');
|
|
79
|
+
console.log(' /checkmyvibe db (or /checkmyvibe-db) -> Database & BaaS rules / RLS');
|
|
80
|
+
console.log(' /checkmyvibe backend (or /checkmyvibe-backend) -> Server-side (auth, db, IDOR, input, payment)');
|
|
81
|
+
console.log(' /checkmyvibe frontend (or /checkmyvibe-frontend) -> Client-side (bundle leaks, client auth, pricing)');
|
|
82
|
+
console.log(' /checkmyvibe payment (or /checkmyvibe-payment) -> Payment & pricing integrity');
|
|
59
83
|
console.log('=========================================\n');
|
|
60
84
|
} catch (err) {
|
|
61
85
|
console.error('Error installing skill:', err.message);
|
|
@@ -65,7 +89,7 @@ function performInstall(destPath) {
|
|
|
65
89
|
|
|
66
90
|
if (hasLocalClaude) {
|
|
67
91
|
// If .claude folder exists in the project root, install at project level directly
|
|
68
|
-
performInstall(
|
|
92
|
+
performInstall(localSkillDest, localCommandsDest);
|
|
69
93
|
} else {
|
|
70
94
|
// Prompt user for local vs global/personal installation
|
|
71
95
|
const rl = readline.createInterface({
|
|
@@ -74,16 +98,16 @@ if (hasLocalClaude) {
|
|
|
74
98
|
});
|
|
75
99
|
|
|
76
100
|
console.log('No local .claude/ directory detected in the current working directory.');
|
|
77
|
-
console.log(`1. Install locally to current directory: ${path.join('.claude', 'skills', 'checkmyvibe')}`);
|
|
78
|
-
console.log(`2. Install globally/personally: ${
|
|
101
|
+
console.log(`1. Install locally to current directory: ${path.join('.claude', 'skills', 'checkmyvibe')} & ${path.join('.claude', 'commands')}`);
|
|
102
|
+
console.log(`2. Install globally/personally: ${globalSkillDest.replace(os.homedir(), '~')} & ${globalCommandsDest.replace(os.homedir(), '~')}`);
|
|
79
103
|
|
|
80
104
|
rl.question('\nSelect installation destination (1 or 2, default 2): ', (answer) => {
|
|
81
105
|
rl.close();
|
|
82
106
|
const selection = answer.trim();
|
|
83
107
|
if (selection === '1') {
|
|
84
|
-
performInstall(
|
|
108
|
+
performInstall(localSkillDest, localCommandsDest);
|
|
85
109
|
} else {
|
|
86
|
-
performInstall(
|
|
110
|
+
performInstall(globalSkillDest, globalCommandsDest);
|
|
87
111
|
}
|
|
88
112
|
});
|
|
89
113
|
}
|
package/package.json
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "checkmyvibe",
|
|
4
|
-
"version": "1.0
|
|
5
|
-
"description": "A structured
|
|
4
|
+
"version": "1.1.0",
|
|
5
|
+
"description": "A structured production readiness and code quality workflow Agent Skill for AI coding assistants to catch common vibe-coded configuration issues.",
|
|
6
6
|
"main": "install.js",
|
|
7
7
|
"bin": {
|
|
8
8
|
"checkmyvibe": "install.js"
|
|
9
9
|
},
|
|
10
10
|
"files": [
|
|
11
11
|
"SKILL.md",
|
|
12
|
+
"commands/",
|
|
12
13
|
"scripts/",
|
|
13
14
|
"references/",
|
|
14
15
|
"install.js",
|
|
@@ -20,7 +21,8 @@
|
|
|
20
21
|
},
|
|
21
22
|
"keywords": [
|
|
22
23
|
"ai-agent",
|
|
23
|
-
"
|
|
24
|
+
"code-quality",
|
|
25
|
+
"production-readiness",
|
|
24
26
|
"claude-code",
|
|
25
27
|
"cursor",
|
|
26
28
|
"vibe-coding",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# Vibe
|
|
1
|
+
# Vibe Readiness Risk Patterns
|
|
2
2
|
|
|
3
|
-
This document serves as a reference for common
|
|
3
|
+
This document serves as a reference for common readiness risk patterns identified in AI-generated ("vibe-coded") applications. AI coding assistants frequently introduce these configuration and design flaws because they prioritize speed, feature completion, and standalone component demonstration over robust production-ready setups.
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|