Code Sleuth logo

Code Sleuth

Community
Gabson0x
code-sleuth

Analyze EVM smart contracts for storage-safety vulnerabilities that can cause persistent state updates to be lost, overwritten, misdirected, or to collide across proxy or upgrade boundaries.

Overview

PublisherGabson0x
Repositorybountyforge
Skill namecode-sleuth
Stars
455
Forks
63
Bundled files
Instructions only
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.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

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

Installation

Install the Code Sleuth 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/Gabson0x/bountyforge/tree/main/skills/code-sleuth
  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/Gabson0x/bountyforge.git /tmp/bountyforge
mkdir -p .claude/skills
cp -r /tmp/bountyforge/skills/code-sleuth .claude/skills/code-sleuth
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Code Sleuth 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 Code Sleuth 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 Code Sleuth 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.

Code Sleuth — Storage Safety

Analyze EVM smart contracts for storage-safety vulnerabilities.

See also: [[Web3 Audit]], [[Smart Contract Audit]], [[Trust Map]], [[Methodology]]

  • memory vs storage confusion
  • lost writes (state mutated in memory but never persisted)
  • arbitrary or attacker-influenced storage slot writes
  • storage collisions across proxy/upgrade layouts
  • other storage semantics that can corrupt or invalidate state

Only report issues that have a clear persistence or state integrity impact.


Applicability gates

Only proceed if BOTH conditions are true:

  1. The contract contains state-mutating logic intended to update persistent storage (balances, shares, positions, roles, configuration, accounting totals, escrow mappings, arrays of records, etc.).

  2. At least one of the following storage-risk signals is present:

  • writes to structs, arrays, or mappings
  • inline assembly interacting with storage (sstore, sload)
  • manual or unstructured storage slots (bytes32 slot constants, StorageSlot libraries)
  • proxy, upgradeable, diamond, or delegatecall-based architecture

If these gates are not satisfied, do not force findings.


Workflow

1) Inventory storage and storage writers

Map the contract’s persistent state surface before looking for bugs.

  • Identify key storage variables such as balances, shares, totals, configuration, roles, escrow mappings, or arrays of user positions.
  • Enumerate functions that mutate them:
    • external/public non-view functions
    • internal helpers reachable from those functions
    • privileged admin or upgrade paths
  • Identify manual slot usage such as:
    • inline assembly sstore / sload
    • StorageSlot libraries
    • bytes32 slot constants
    • custom slot arithmetic

Use this inventory to anchor later findings to specific variables and write paths.


2) Lost write / memory-versus-storage omission

Look for cases where storage-backed data is copied into a temporary value, modified, but never written back to storage.

Typical pattern:

  • A storage value (struct, mapping element, or array entry) is copied into memory or into a value-type variable.
  • The temporary variable is mutated.
  • The mutation is never persisted back to the original storage location.

Report a finding only if all of the following are true:

  • A storage-backed value is copied into a non-storage temporary.
  • That temporary is mutated (field assignment, push/pop, arithmetic update, etc.).
  • On all reachable paths, the mutated value is not written back to the original storage location.
  • The surrounding logic indicates that persistence was expected.

Indicators that persistence is expected:

  • function name suggests an update
  • emitted events imply a state change
  • later code reads the state assuming it was updated
  • callers rely on the update for accounting or permissions

Do not report if:

  • the function is clearly view or pure
  • the code intentionally constructs and returns a modified copy
  • the variable is actually a storage reference
  • the value is written back through a helper function on all paths

3) Attacker-influenced storage slot writes

Look for cases where untrusted input affects which storage slot is written.

This usually occurs in:

  • inline assembly
  • custom slot arithmetic
  • manual mapping key construction
  • delegatecall-based modules or registries

Report a finding only if all of the following are true:

  • attacker-controlled input influences the final storage slot or key used in a write
  • the slot or key is not strictly constrained by validation, allowlists, or provenance checks
  • the resulting write can corrupt unrelated or sensitive state

Examples of realistic overwrite targets:

  • owner or admin variables
  • configuration parameters
  • balances or accounting mappings
  • implementation or proxy slots
  • governance roles

Do not report if:

  • the slot is a fixed constant used in a standard pattern
  • strong access control prevents untrusted writes
  • input-derived keys are tightly validated against trusted state

4) Upgradeable storage collisions and layout hazards

If the contract uses proxy, upgradeable, or diamond architecture, examine storage layout safety.

Look for situations where storage from multiple implementations or facets could overlap.

High-risk signals include:

  • upgrade mechanisms such as upgradeTo, diamondCut, or admin-controlled implementation changes
  • inheritance-heavy storage layouts without reserved gaps
  • custom slot constants inconsistent with EIP-1967 or other standard patterns
  • facets or modules declaring overlapping state without a shared storage struct pattern

Report layout issues carefully:

  • If you can demonstrate an actual collision, report it as a concrete vulnerability.
  • If there is only a credible risk during upgrades, report it as an upgrade-safety risk.

Do not report if:

  • the contract has no upgrade mechanism
  • storage layout follows a standard pattern with reserved gaps and consistent slot usage

5) Other storage semantics (only when security-relevant)

Look for storage behaviors that can corrupt or desynchronize state.

Examples include:

  • deleting mapping or struct entries while leaving auxiliary state inconsistent (index arrays, totals, role flags)
  • manual bit packing or bitmap logic that fails to clear or mask stale bits
  • uninitialized storage reads used as authorization or accounting signals

Only report issues where the result could cause:

  • privilege escalation
  • incorrect accounting
  • corrupted configuration
  • inaccessible funds
  • broken protocol invariants

Frequently asked questions

What does the Code Sleuth AI skill do?

Analyze EVM smart contracts for storage-safety vulnerabilities that can cause persistent state updates to be lost, overwritten, misdirected, or to collide across proxy or upgrade boundaries.

Why use Code Sleuth on TypingMind?

Because you install it once and use it with any model. Code Sleuth 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 Code Sleuth in TypingMind?

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

Which AI models can use Code Sleuth?

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 Code Sleuth?

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

Is the Code Sleuth AI skill free?

It is published on GitHub by Gabson0x. Check the repository for licensing terms. 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 👇