checkmyvibe 1.0.0 → 1.0.2
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 +9 -11
- package/SKILL.md +38 -33
- package/install.js +2 -2
- package/package.json +13 -4
- 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
|
|
|
@@ -50,13 +50,11 @@ If you prefer not to use `npx`, copy the files manually:
|
|
|
50
50
|
|
|
51
51
|
Once installed, your AI coding agent will automatically recognize the `checkmyvibe` skill when relevant. You can trigger the workflow explicitly:
|
|
52
52
|
|
|
53
|
-
### Claude Code
|
|
54
|
-
Open your terminal in the workspace and
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
*Or simply ask Claude in the chat:*
|
|
59
|
-
> "Run a security audit on this project using checkmyvibe"
|
|
53
|
+
### Claude Code / Gemini CLI
|
|
54
|
+
Open your terminal in the workspace and ask:
|
|
55
|
+
> "Run checkmyvibe on this project"
|
|
56
|
+
*Or:*
|
|
57
|
+
> "Perform a production readiness check using checkmyvibe"
|
|
60
58
|
|
|
61
59
|
The agent will walk through the checks, execute the local python validation scripts, and print a prioritized markdown report (Critical / Should Fix / Worth Reviewing) with instructions on how to correct the issues.
|
|
62
60
|
|
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. 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. Covers checking for missing or placeholder authentication, exposed secrets, permissive database rules, object-level authorization, input validation, and pricing configuration in client bundles.
|
|
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,24 +15,24 @@ 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 six categories
|
|
31
|
+
below. Never tell the user their app is completely "secure" or "safe" in an unqualified way.
|
|
33
32
|
The correct language is "no issues found in this pass" or "ready to ship as far as
|
|
34
33
|
these checks go" — always paired with the scope reminder in the Final Summary
|
|
35
34
|
section. If the app appears to handle payments, health data, or other regulated
|
|
36
|
-
data, say explicitly that a professional
|
|
35
|
+
data, say explicitly that a professional verification is strongly recommended regardless
|
|
37
36
|
of what this pass finds.
|
|
38
37
|
|
|
39
38
|
## Before you start
|
|
@@ -51,7 +50,6 @@ of what this pass finds.
|
|
|
51
50
|
|
|
52
51
|
---
|
|
53
52
|
|
|
54
|
-
|
|
55
53
|
## Supported stacks to recognize
|
|
56
54
|
|
|
57
55
|
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 +78,7 @@ strings, and variable assignments where a name like `key`, `secret`, `token`, or
|
|
|
80
78
|
`password` is set to a literal string instead of `process.env.X` or equivalent.
|
|
81
79
|
|
|
82
80
|
**What counts as a finding:**
|
|
81
|
+
|
|
83
82
|
- A real credential committed directly in source, e.g.:
|
|
84
83
|
`const stripeKey = "sk_live_51H8x..."` — Critical
|
|
85
84
|
- A secret present only in `.env` but `.env` is not gitignored (see Check 2) —
|
|
@@ -90,6 +89,7 @@ strings, and variable assignments where a name like `key`, `secret`, `token`, or
|
|
|
90
89
|
Critical, this is directly shippable to every visitor's browser
|
|
91
90
|
|
|
92
91
|
**What is NOT a finding (avoid false positives):**
|
|
92
|
+
|
|
93
93
|
- Public/anon/publishable keys that are designed to be exposed client-side
|
|
94
94
|
(Stripe publishable keys starting `pk_`, Supabase anon keys) — these are safe
|
|
95
95
|
by design as long as server-side authorization (RLS, API checks) is correctly
|
|
@@ -105,10 +105,10 @@ them (not just whether a `.gitignore` file exists — many AI-generated `.gitign
|
|
|
105
105
|
files exist but miss the actual secret file).
|
|
106
106
|
|
|
107
107
|
**What counts as a finding:**
|
|
108
|
+
|
|
108
109
|
- `.env` present in the working directory and not listed in `.gitignore` —
|
|
109
110
|
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
|
|
111
|
+
- `.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
112
|
fix that removing it from `.gitignore` going forward is not enough; the
|
|
113
113
|
secrets in git history must be rotated, since they're recoverable even after
|
|
114
114
|
deletion
|
|
@@ -119,17 +119,18 @@ files exist but miss the actual secret file).
|
|
|
119
119
|
checks) for these patterns:
|
|
120
120
|
|
|
121
121
|
**What counts as a finding:**
|
|
122
|
+
|
|
122
123
|
- A function that always returns true/success regardless of input, e.g.:
|
|
123
124
|
```js
|
|
124
125
|
function isAuthenticated(req) {
|
|
125
126
|
return true; // TODO: implement real auth
|
|
126
127
|
}
|
|
127
128
|
```
|
|
129
|
+
|
|
128
130
|
Critical — this is a placeholder someone forgot to replace.
|
|
129
131
|
- Naming that signals a stub: `mockAuth`, `fakeLogin`, `tempAuth`, `bypassAuth`,
|
|
130
132
|
`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
|
|
133
|
+
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
134
|
rather than Critical, since misconfigured environment variables in production
|
|
134
135
|
are a common way these leak through anyway.
|
|
135
136
|
- A protected route or API endpoint with no auth check at all — compare route
|
|
@@ -153,6 +154,7 @@ If the project uses **Supabase**: check for row-level security (RLS) policies on
|
|
|
153
154
|
every table that holds user-specific data. A table with RLS disabled, or enabled
|
|
154
155
|
with a policy like `USING (true)` for `SELECT`/`UPDATE`/`DELETE`, means any
|
|
155
156
|
authenticated (or even anonymous) user can read or modify every row.
|
|
157
|
+
|
|
156
158
|
```sql
|
|
157
159
|
-- Finding example: this policy applies to ALL rows for ALL users
|
|
158
160
|
CREATE POLICY "allow all" ON orders FOR SELECT USING (true);
|
|
@@ -204,6 +206,7 @@ common and DELETE is often the most damaging.
|
|
|
204
206
|
## Check 6: Unvalidated inputs
|
|
205
207
|
|
|
206
208
|
Spot-check forms and API endpoints for:
|
|
209
|
+
|
|
207
210
|
- No type or length validation on inputs before they're stored or used
|
|
208
211
|
- User input passed into a database query via string concatenation rather than
|
|
209
212
|
parameterized queries/an ORM (SQL injection risk)
|
|
@@ -261,6 +264,7 @@ For every finding, use exactly this structure:
|
|
|
261
264
|
- Include a `Generated fix:` line when a direct code snippet or precise implementation step would help the agent patch the issue immediately.
|
|
262
265
|
|
|
263
266
|
**[SEVERITY] Short title**
|
|
267
|
+
|
|
264
268
|
- **What's wrong:** plain-English description, no jargon. If a technical term is
|
|
265
269
|
unavoidable (e.g. "IDOR"), define it in one clause the first time it's used.
|
|
266
270
|
- **Why it matters:** a concrete, real-world consequence a non-technical person
|
|
@@ -271,10 +275,10 @@ For every finding, use exactly this structure:
|
|
|
271
275
|
suggestion like "add proper validation."
|
|
272
276
|
- **File(s):** exact path and line number(s).
|
|
273
277
|
|
|
274
|
-
|
|
275
278
|
## After the checks
|
|
276
279
|
|
|
277
|
-
Once the checks are complete, create a
|
|
280
|
+
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:
|
|
281
|
+
|
|
278
282
|
- what was found
|
|
279
283
|
- what is fixed already
|
|
280
284
|
- how each fix was applied
|
|
@@ -283,12 +287,12 @@ Once the checks are complete, create a security audit/report. **The report must
|
|
|
283
287
|
|
|
284
288
|
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
289
|
|
|
286
|
-
|
|
287
290
|
## Example report style
|
|
288
291
|
|
|
289
292
|
Use clear, direct wording like:
|
|
290
293
|
|
|
291
294
|
**[Critical] Missing object-level authorization**
|
|
295
|
+
|
|
292
296
|
- **What's wrong:** Any logged-in user can read another user's order by changing the order ID.
|
|
293
297
|
- **Why it matters:** A stranger could see someone else's orders and personal details.
|
|
294
298
|
- **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 +300,23 @@ Use clear, direct wording like:
|
|
|
296
300
|
|
|
297
301
|
## Final summary
|
|
298
302
|
|
|
299
|
-
End every
|
|
303
|
+
End every review with, in this order:
|
|
304
|
+
|
|
300
305
|
1. Stack and data-sensitivity context noted at the start (one line)
|
|
301
306
|
2. Total findings by severity, e.g. "2 Critical, 3 Should Fix, 1 Worth Reviewing"
|
|
302
307
|
3. A one-line verdict: "Not ready to ship — fix the Critical items first" or "No
|
|
303
308
|
blocking issues found in this pass — review the Should Fix items when you can"
|
|
304
|
-
4. The scope reminder: "This covers common patterns seen in AI-generated code —
|
|
305
|
-
exposed secrets, auth stubs, database
|
|
306
|
-
and client-side payment logic. It is not a
|
|
307
|
-
handles payment, health, or other regulated data, get a professional
|
|
308
|
-
|
|
309
|
+
4. The scope reminder: "This review covers common configuration patterns seen in AI-generated code —
|
|
310
|
+
exposed secrets, auth stubs, database rules, object-level authorization, input validation,
|
|
311
|
+
and client-side payment logic. It is not a comprehensive third-party safety audit or pentest. If this app
|
|
312
|
+
handles payment, health, or other regulated data, get a professional external review
|
|
313
|
+
before launch regardless of these results."
|
|
309
314
|
|
|
310
315
|
## Notes for the agent
|
|
311
316
|
|
|
312
|
-
- Always produce
|
|
317
|
+
- Always produce a review report after the check; do not stop at raw findings.
|
|
313
318
|
- 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
|
|
319
|
+
- The review should clearly separate what was found, what was fixed, how it was fixed, and what remains.
|
|
315
320
|
- 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
321
|
- If a script is missing, fails to run, or the language/stack isn't supported by
|
|
317
322
|
it, say so explicitly in the report ("automated secret scan could not run;
|
|
@@ -323,4 +328,4 @@ End every audit with, in this order:
|
|
|
323
328
|
categories — pick the most relevant category and reference it once.
|
|
324
329
|
- If the codebase is large, prioritize routes and files that touch
|
|
325
330
|
authentication, payments, and any endpoint returning data tied to a specific
|
|
326
|
-
user ID — these are where real damage concentrates.
|
|
331
|
+
user ID — these are where real damage concentrates.
|
package/install.js
CHANGED
|
@@ -52,9 +52,9 @@ function performInstall(destPath) {
|
|
|
52
52
|
console.log('\n=========================================');
|
|
53
53
|
console.log('🎉 checkmyvibe Agent Skill installed!');
|
|
54
54
|
console.log('=========================================');
|
|
55
|
-
console.log('\nHow to run
|
|
55
|
+
console.log('\nHow to run checkmyvibe:');
|
|
56
56
|
console.log('1. Open your terminal in the target repository.');
|
|
57
|
-
console.log('2. Ask your coding agent: "run a
|
|
57
|
+
console.log('2. Ask your coding agent: "run checkmyvibe" or "perform a readiness check"');
|
|
58
58
|
console.log('3. The agent will execute checkmyvibe\'s checks and output a prioritized report!');
|
|
59
59
|
console.log('=========================================\n');
|
|
60
60
|
} catch (err) {
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
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.0.2",
|
|
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"
|
|
@@ -20,12 +20,21 @@
|
|
|
20
20
|
},
|
|
21
21
|
"keywords": [
|
|
22
22
|
"ai-agent",
|
|
23
|
-
"
|
|
23
|
+
"code-quality",
|
|
24
|
+
"production-readiness",
|
|
24
25
|
"claude-code",
|
|
25
26
|
"cursor",
|
|
26
27
|
"vibe-coding",
|
|
27
28
|
"agent-skill"
|
|
28
29
|
],
|
|
29
30
|
"author": "Sarthak",
|
|
30
|
-
"license": "Apache-2.0"
|
|
31
|
+
"license": "Apache-2.0",
|
|
32
|
+
"repository": {
|
|
33
|
+
"type": "git",
|
|
34
|
+
"url": "git+https://github.com/Sarthakpatil23/checkmyvibe.git"
|
|
35
|
+
},
|
|
36
|
+
"bugs": {
|
|
37
|
+
"url": "https://github.com/Sarthakpatil23/checkmyvibe/issues"
|
|
38
|
+
},
|
|
39
|
+
"homepage": "https://github.com/Sarthakpatil23/checkmyvibe#readme"
|
|
31
40
|
}
|
|
@@ -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
|
|