Suede Code logo

Suede Code

Community
JasonColapietro
suede-code

Use when explicitly asked "review this PR" or to grade a diff, branch, or commit range. Suede AI returns evidence-backed P0-P3 findings, fix paths and an A-F ship grade; supports findings-only, grade-only and fix modes, seven review lanes, security checks, deploy safety and commit dirt. NOT FOR: automatic CI enforcement (use suede-ci-gate), agent evaluations (use suede-ai-eval), implementation-plan search (use suede-graph-flo-xr), or parallel fix coordination (use suede-agent-teams).

Overview

PublisherJasonColapietro
Repositorysuede-creator-skills
Skill namesuede-code
Stars
126
Forks
12
Bundled files
12
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 12 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by JasonColapietro on GitHub. Read the source before you install it.

Installation

Install the Suede Code AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/JasonColapietro/suede-creator-skills/tree/main/skills/suede-code
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/JasonColapietro/suede-creator-skills.git /tmp/suede-creator-skills
mkdir -p .claude/skills
cp -r /tmp/suede-creator-skills/skills/suede-code .claude/skills/suede-code
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Suede Code in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Suede Code on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Suede Code is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Suede AI Code Skills

One skill for judging code: what is wrong, and whether it ships. Every finding has a file, evidence, and a fix path. Every grade has the evidence that earned it. No finding without evidence; no volume without signal.

Runs only when asked. Never fire this as a side effect of a diff, a save, or a commit.

Compatibility

An agent with repository read access and Git; Bash is needed for local tests and the bundled commit-dirt scan. Fix mode additionally needs authorized file edits. Review can proceed with explicitly unverified runtime checks when execution is unavailable.

Gate policy: advisory, not blocking

Every check, grade, and ship verdict here is a recommendation to the user, not a control on the agent.

  • Run every check and report results honestly. ship, ship-with-caveats, hold, letter grades, and BLOCKED items are advice attached to the work.
  • Never block, delay, skip, or rewrite the action the user asked for because a gate said hold. A failed gate changes what you report, never what you do.
  • Single exception: an extreme-risk finding (data loss, credential exposure, legal or rights violation, payment mistake, irreversible public damage). Pause, state the risk and the options, and let the user pick. Their choice is final.

Pick the mode

Request sounds likeModeEmits
"review and grade", "is this safe to ship", "check this PR"full (default)Findings, grade, deploy safety, commit dirt, ship gate
"findings only", "no grade", "line by line", "find the bugs"--findings-onlyFindings, deploy safety, commit dirt, ship gate. No letters.
"grade only", "give it a letter", "A-F verdict", "should this merge"--grade-onlyLane grades, caps, required upgrades, ship gate. No findings list.

Grade-only still runs Step 1 (Instant-F) and still reads the code. It skips the itemized findings output, not the investigation.

Other modes that combine with any of the above:

  • Plan review: nothing built yet; check scope, sequencing, acceptance criteria, test mapping, and missing decisions.
  • Fix verification: after fixes, rescan only the changed files and confirm each original finding is gone.
  • Release review: add build, secrets, env, public copy, screenshots, metadata, and live or API readback.
  • --fix: apply fixes (see Fix Mode).
  • --threat-verify: confirm declared threat-model mitigations exist. Procedure in references/threat-verify.md; read it only in this mode.

Depth (state it at the top of every output):

  • --quick (about 2 min): pattern scan for obvious bugs, secrets, missing null checks, injection, broken error handling. No cross-file analysis.
  • --standard (default, about 10 min): per-file correctness on changed paths, language traps, state handling, test coverage of changed behavior, call graph within changed files, maintainability baseline.
  • --deep (about 25 min): full import graph, call-chain tracing, whole-repo and history pass, critic lanes. Use for auth, payments, migrations, public APIs.

Model: Sonnet by default. Recommend Opus for auth, payments, and public API surfaces.

Pre-flight

Name three things before analysis:

  • Target: repo, branch, PR, commit range, diff, route, API, or release build.
  • Intent: what the change claims to do. Find the spec in this order: issue references in commits and PR body (#123, Closes #45), a path the caller passed, a matching file under docs/ or specs/. If none exists, write "no spec available" and judge intent from the PR description alone. Never invent requirements.
  • Risk lanes: frontend, backend, data, auth, payments, contracts, iOS, release, public copy, analytics, secrets, deployment, docs.

Pin the comparison point and prove it is reviewable: git rev-parse <base> resolves, diff with three dots (git diff <base>...HEAD) so the comparison runs against the merge-base, and the diff is non-empty. A bad ref or empty diff fails here in one line.

Context graph

Build it before judging the diff:

  1. Changed files and generated files.
  2. Imports, callers, routes, handlers, jobs, hooks, models, schemas, and config or env dependencies the change touches.
  3. Tests, fixtures, migrations, release scripts, docs, and screenshots that should move with the behavior.
  4. Runtime surfaces: local route, live URL, API endpoint, simulator flow, dashboard, store metadata, deploy target.
  5. Domain contracts: ownership, rights and provenance, payments and wallets, agent commerce, and published-statement accuracy.

Flag beyond-the-diff risk when related files, defaults, docs, env, or deploy requirements no longer agree.

Run the repo's own gates first

Do not hand-review what a tool already decides. Detect what the repo ships (package.json scripts, config files, lockfiles) and run only that. Never add a tool the repo does not use. Never report a result you did not run.

StackType checkLintTestOther
Web / Nodenpx tsc --noEmitnpm run lint (changed files)npm testnpm audit when deps changed
MCP server (Node)node --check <server>.mjsconfigured linterrepo MCP testsOne stdio session: initialize, notifications/initialized, then list/call/read/get
iOS / Swiftthe build is the checkSwiftLint if configuredXCTest targetxcodebuild -scheme X -destination 'platform=iOS Simulator,name=<device>' build
API / backendcompile step if anyconfigured lintercontract or schema testsOpenAPI validation against the live route

Severity mapping: a type error on a changed line is P2 (P1 on a critical path); a failing test on changed behavior is P1; a test that silently stopped running is P2; a reachable, exploitable dependency CVE is P0 or P1; a verified live secret is P0; a broken production build in a release review is P0.

Cite command, exit status, and the file:line it implicates. A gate that cannot run goes in Verification as "not run" with the reason.

House rules bind. Read CLAUDE.md, AGENTS.md, CONTRIBUTING.md, .editorconfig, and formatter, linter, or review config. Do not flag what a rule permits; do flag what it forbids. The nearest-ancestor rule wins for files under its path. When the user dismisses a finding as deliberate, record it in one line (pattern, why allowed, path scope) and do not raise it again.

Step 1: Instant-F triggers (always first, every mode)

Any match is an automatic F and a P0 finding. Report file and line. Other lanes cannot raise the grade.

  • Secrets: hardcoded API key, token, or password in committed source; a committed private key or certificate; a signing secret outside a secret manager.
  • Injection: SQL built by string concatenation with user input; shell command from user input via exec, spawn, or eval; unescaped user input rendered where XSS is reachable.
  • Auth bypass: middleware with a skip path (early return, swallowed exception, always-true condition); a permission check a request param can bypass; JWT accepting alg: none or a hardcoded secret.
  • Payments and wallets: a handler that swallows errors; a webhook with no signature verification; amount or recipient taken from untrusted input without server-side validation.
  • Data destruction: a DROP or destructive ALTER with no rollback and no tested restore; bulk delete or update with no WHERE or a user-controlled WHERE; production cache wipes with no restore path.
  • Plaintext sensitive data: passwords stored or logged in plaintext; PII sent to unencrypted logs or analytics; card, SSN, or health data in an unencrypted field.

Step 2: Language and platform traps

Load only the sections that match the diff:

  • references/traps-web.md: TypeScript, React, accessibility, Next.js, SEO impact, database (Drizzle, Prisma), performance and Core Web Vitals.
  • references/traps-swift-ios.md: Swift, SwiftUI, and client-server contract drift for iOS.
  • references/maintainability-baseline.md: twelve structural checks for --standard and --deep, diff-scoped and always labeled as judgment.

Step 3: Security baseline

Runs automatically when the diff touches auth/, api/, middleware/, routes/, pages/api/, or imports crypto, session, or payment modules. Cite the category in each finding using the OWASP Top 10:2025 numbering: A01 Broken Access Control (now includes SSRF), A02 Security Misconfiguration, A03 Software Supply Chain Failures, A04 Cryptographic Failures, A05 Injection, A06 Insecure Design, A07 Authentication Failures, A08 Software or Data Integrity Failures, A09 Security Logging and Alerting Failures, A10 Mishandling of Exceptional Conditions. API and mobile changes also map to the OWASP API Security Top 10 (2023) and MASVS. What counts as a finding per category is in references/security-baselines.md.

Observability delta (any new handler, endpoint, job, cron, or consumer): flag catch blocks that only console.error or swallow silently; new paths with no log on entry or failure; React subtrees with no error boundary; new DB, external API, or model calls with no timing or trace span; analytics events the old code fired and the new code dropped; background jobs that finish without logging count, duration, or failure reason.

Step 4: Deep pass (--deep only)

  • Reverse dependencies: find every caller of a changed function, type, route, or constant across the repo. Name the call sites you checked.
  • Shared assumptions: for a changed schema, env var, default, or invariant, find other places that assume the old value.
  • History: git log -L or git blame the touched lines. A change that reintroduces a previously fixed shape is a regression; cite the prior commit.
  • Sibling pattern: compare to the nearest analog (other handlers, other migrations). A lone handler skipping the shared auth wrapper is P1 even if it works.
  • Critic lanes for auth, payments, migrations, or public APIs: a change mapper, runtime critic, security critic, product critic, and test critic, each reporting separately. Collect consensus. If a high-severity concern survives a fix cycle, keep hold and name the smallest next check.

A whole-repo claim with no named symbols is not evidence.

Step 5: Intent and scope

  • Claim vs diff: map each acceptance criterion to a code path or test. Claimed behavior with no matching change is a P1 truth gap.
  • Scope creep: flag unrelated refactors, bundled dependency bumps, and formatting sweeps that bury the change. Recommend a split.
  • Effort signal: state files and net lines changed and rate the review effort: trivial, moderate, heavy, or too large to review safely.
  • Walkthrough (four or more files): a table of file, what changed, risk lane. Add a mermaid sequenceDiagram or flowchart only when data crosses three or more boundaries or an async, auth, or payment path changes.

Step 6: Grade (full and --grade-only)

For full and grade-only modes, read the complete grading contract before assigning a grade. It defines all seven lanes, letter meanings, gate mapping, surface caps and debt weighting. An Instant-F or deploy-safety result still applies in every mode; never assign a letter from impression.

Step 7: Deploy safety (every mode, every run)

Rate each pass | conditional | block:

  • Breaking changes: a public API, schema, config key, or interface changes with no versioned migration or fallback → block.
  • Rollback safety: git revert cannot undo it (migrations, sent email, charges, deletes, storage writes, queue publishes) → block.
  • Blast radius: state it as ~0% (flagged), ~partial (one flow), or ~100% (shared middleware, auth, hot query).
  • Environment readiness: a required env var, secret, or flag is not in production yet → block.
  • Dependency changes: new dependency with a known CVE, or unpinned in production → block.
  • Data mutations: irreversible writes with no tested restore → block.
  • Security delta: improved, neutral, or new attack surface without mitigation → block.
  • Automation coverage: no CI covering the changed surface, or required checks not enforced on the default branch, in a production-connected repo → block.

Step 8: Commit dirt (every mode, every run)

Run the bundled scanner from the target repo instead of eyeballing: bash <skill-dir>/scripts/commit-dirt-scan.sh main...HEAD, or pipe a diff with -. It is read-only and always exits 0. Confirm each hit against the diff before reporting. If it cannot run, check every added line by hand.

Seven categories: secrets and credentials; debug artifacts; conflict markers; staged build output (node_modules/, .next/, dist/, .DS_Store, logs); WIP breadcrumbs (DO NOT MERGE, TEMP:, lorem ipsum); oversized or binary blobs over 500 KB; exposed internals (internal hosts, staging URLs, personal emails). Rate each clean | suspicious | dirty. Overall DIRTY is a P0 finding and moves the gate to hold. SUSPICIOUS is named for the reviewer to confirm.

Findings: format and precision

Lead with findings by severity. Group a repeated pattern once ("appears in 4 files: ..."). If a structural defect exists, report it first and alone, and hold the line-level findings it governs as deferred.

P0 and P1 use the full block:

[P0] path/to/file.ts:142
Issue: JWT secret falls back to empty string; any token is valid when SECRET is unset.
Fix: process.env.JWT_SECRET ?? (() => { throw new Error('JWT_SECRET required') })()
Verify: set JWT_SECRET="" and curl /api/me: expect 401, currently 200.
OWASP: A04:2025 Cryptographic Failures
Confidence: high

P2 and P3 get one line each:

[P2] components/Feed.tsx:88, index used as key on .map(); use item.id.

Severity: P0 data loss, security exposure, payment loss, broken release, or unsafe public behavior. P1 likely production regression, auth bug, broken primary path, false published statement, missing deploy requirement. P2 real edge-case failure, incomplete state, test gap on changed behavior. P3 low-risk cleanup. A concern that cannot be tied to a file, route, command, or behavior goes under Open Questions.

Confidence is observable: high = reproduced, traced across the call graph, or tied to a named failing input; medium = read, not executed; low = looks wrong, nothing proves it. Label every P0 and P1. A low-confidence security suspicion keeps its severity with the label attached; low-confidence style notes collapse into one "nitpicks" line.

Before emitting, cut anything with no file:line and fix, anything a gate already reports, and anything that would not change the ship decision or earn a human reviewer's comment.

Fix mode (--fix or an explicit request)

  1. Auto-apply local P2 and P3 fixes (single file, no contract change), one commit per finding ID.
  2. Present P0 and P1 as fix briefs first: failing behavior and evidence, files to open, expected change, acceptance criteria, verification command, WIP to preserve. Never auto-apply to auth, payment, or migration code without explicit confirmation.
  3. Re-run the relevant mode on changed files and mark each finding resolved or escalated.
  4. Stop after 3 cycles on the same finding and escalate it as a design issue.

Suede-specific checks

Auth and session behavior across app, API, native shells, and server · rights, provenance, licensing, royalty, and agent-commerce claims match implemented behavior · payment, wallet, x402, checkout, and credit flows fail closed · public pages invent no metrics, pricing, partners, testimonials, or release promises · deploy and account assumptions match local guidance before production claims · store screenshots, metadata, and privacy answers match the app · migrations, env, flags, cron, queues, webhooks, and secrets are documented · contracts do not drift across web, backend, mobile, and docs.

Red flags: stop

  • "CI is green, so it's fine." CI that never exercised the change is not evidence.
  • "The diff is small." Small diffs touch auth too. Step 1, 7, and 8 run every time.
  • "I wrote this, I know it works." Switch to review mode and hunt what your implementation would miss.
  • "The PR description explains it." Review the diff, not the story about it.
  • "It was hard work, round up to B." Effort never moves a grade; evidence does.
  • "Flag everything to be safe." Volume is noise. Run the precision cut.

Output

Open with Simple explanation: one plain paragraph a ten-year-old can follow covering whether it passed and the single biggest reason. Then, by mode:

text
Depth:
Findings            (full, --findings-only)
Code Grade          (full, --grade-only: 7 lanes + overall, cap applied, why, required upgrades)
Deploy Safety       (all modes: 8 dimensions + SAFE TO DEPLOY | DEPLOY WITH CONDITIONS | DO NOT DEPLOY)
Commit Dirt         (all modes: 7 categories + CLEAN | SUSPICIOUS | DIRTY)
Open Questions
Verification        (checked / not checked, with commands and exit codes)
SHIP GATE: hold | ship-with-caveats | ship: [one sentence naming the blocker or caveat]

For no findings, say so and name residual risk or unrun checks. To revise a grade, name what changed. Silence means accepted.

Worked examples, read only when calibrating: references/worked-example.md (a full pass on a real file) and references/worked-example-grade-only.md (lane arithmetic in grade-only mode).

Boundaries

  • Preserve user and other-agent WIP. Never stage, revert, or rewrite unrelated files. Apply fixes only under Fix Mode.
  • Never invent tests, screenshots, live checks, deploy status, or gate results.
  • Never auto-apply fixes to auth, payment, or migration code without confirmation.
  • A style choice no rule, formatter, or real cost governs is not a finding.

Routing

  • Make CI enforce the verdict on every merge → suede-ci-gate
  • The diff ships LLM, RAG, or agent behavior with no eval coverage → suede-ai-eval
  • Several implementation plans need comparing before one multi-file change is built → suede-graph-flo-xr
  • Fixes span several coordinated lanes → suede-agent-teams
  • The same value is stated on two surfaces that can drift → suede-parity-contract

Worked contract

Worked contract gives a bounded input, expected output and failure check for this workflow.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Suede Code AI skill do?

Use when explicitly asked "review this PR" or to grade a diff, branch, or commit range. Suede AI returns evidence-backed P0-P3 findings, fix paths and an A-F ship grade; supports findings-only, grade-only and fix modes, seven review lanes, security checks, deploy safety and commit dirt. NOT FOR: automatic CI enforcement (use suede-ci-gate), agent evaluations (use suede-ai-eval), implementation-plan search (use suede-graph-flo-xr), or parallel fix coordination (use suede-agent-teams).

Why use Suede Code on TypingMind?

Because you install it once and use it with any model. Suede Code is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Suede Code in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/JasonColapietro/suede-creator-skills/tree/main/skills/suede-code. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Suede Code?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Suede Code?

As many as you like. As long as a model supports skills, you can use Suede Code with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Suede Code AI skill free?

Yes. It is published on GitHub by JasonColapietro under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇