Fizz Convert
pashov/skills
Convert English-language properties in PROPERTIES.md (produced by the Fizz skill) into Solidity assertions inside the existing fuzz harness, then flip their checkboxes.
Type Thought-template (instantiate before use) - Trigger Pattern STORAGELAYOUT flag detected
$ npx skills add PlamenTSV/plamen --skill storage-layout-safety -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install PlamenTSV/plamen storage-layout-safety --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/PlamenTSV/plamen.git skills-src && mkdir -p .claude/skills && cp -r skills-src/agents/skills/evm/storage-layout-safety .claude/skills/storage-layout-safety && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "storage-layout-safety" agent skill from https://github.com/PlamenTSV/plamen/tree/main/agents/skills/evm/storage-layout-safety into .claude/skills/storage-layout-safety/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "storage-layout-safety", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/PlamenTSV/plamen/tree/main/agents/skills/evm/storage-layout-safetyType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add PlamenTSV/plamen --skill storage-layout-safety -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install PlamenTSV/plamen storage-layout-safety --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/PlamenTSV/plamen.git skills-src && mkdir -p .agents/skills && cp -r skills-src/agents/skills/evm/storage-layout-safety .agents/skills/storage-layout-safety && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "storage-layout-safety" agent skill from https://github.com/PlamenTSV/plamen/tree/main/agents/skills/evm/storage-layout-safety into .agents/skills/storage-layout-safety/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "storage-layout-safety", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add PlamenTSV/plamen --skill storage-layout-safety -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install PlamenTSV/plamen storage-layout-safety --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/PlamenTSV/plamen.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/agents/skills/evm/storage-layout-safety .cursor/skills/storage-layout-safety && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "storage-layout-safety" agent skill from https://github.com/PlamenTSV/plamen/tree/main/agents/skills/evm/storage-layout-safety into .cursor/skills/storage-layout-safety/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "storage-layout-safety", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/PlamenTSV/plamen.git --path agents/skills/evm/storage-layout-safety--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add PlamenTSV/plamen --skill storage-layout-safety -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install PlamenTSV/plamen storage-layout-safety --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/PlamenTSV/plamen.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/agents/skills/evm/storage-layout-safety .gemini/skills/storage-layout-safety && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "storage-layout-safety" agent skill from https://github.com/PlamenTSV/plamen/tree/main/agents/skills/evm/storage-layout-safety into .gemini/skills/storage-layout-safety/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "storage-layout-safety", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install PlamenTSV/plamen storage-layout-safetyInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add PlamenTSV/plamen --skill storage-layout-safety -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/PlamenTSV/plamen.git skills-src && mkdir -p .github/skills && cp -r skills-src/agents/skills/evm/storage-layout-safety .github/skills/storage-layout-safety && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "storage-layout-safety" agent skill from https://github.com/PlamenTSV/plamen/tree/main/agents/skills/evm/storage-layout-safety into .github/skills/storage-layout-safety/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "storage-layout-safety", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add PlamenTSV/plamen --skill storage-layout-safety -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install PlamenTSV/plamen storage-layout-safety --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/PlamenTSV/plamen.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/agents/skills/evm/storage-layout-safety .opencode/skills/storage-layout-safety && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "storage-layout-safety" agent skill from https://github.com/PlamenTSV/plamen/tree/main/agents/skills/evm/storage-layout-safety into .opencode/skills/storage-layout-safety/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "storage-layout-safety", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
storage-layout-safetyType Thought-template (instantiate before use) - Trigger Pattern STORAGELAYOUT flag detected
Storage Layout Safety is an agent skill from PlamenTSV/plamen. Type Thought-template (instantiate before use) - Trigger Pattern STORAGELAYOUT flag detected
Its SKILL.md is about 2.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Backend & APIs, covering Smart contracts. The repository describes itself as: Autonomous Web3 security audit agent for Claude Code. The licence is MIT.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 795962b. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Storage Layout Safety loads about 2.8k tokens when it runs. Until then it costs about 29 tokens; SKILL.md has 1,315 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from PlamenTSV/plamen at commit 795962b, republished under its MIT licence (© PlamenTSV). 1,315 words, ~2,810 tokens.
.claude/skills/storage-layout-safety/SKILL.md (or your agent's skills folder).Type: Thought-template (instantiate before use) Trigger Pattern: STORAGE_LAYOUT flag detected Inject Into: depth-state-trace, depth-edge-case Finding prefix:
[SLS-N]Rules referenced: R1, R4, R8, R10, R14
Covers: memory vs storage confusion, lost writes, proxy/upgrade storage collisions, inline assembly slot safety, and storage semantic corruption.
This vulnerability class exists ONLY on EVM - type-safe VMs (Move, Solana's Borsh model) enforce layout correctness at the runtime level. EVM's untyped 256-bit slot model permits silent corruption when layouts diverge.
proxy|upgradeable|diamond|delegatecall|EIP1967|StorageSlot|
sstore|sload|assembly\s*\{|tstore|tload|reinitializer|
UUPSUpgradeable|TransparentUpgradeableProxy|BeaconProxyMap the contract's persistent state surface before analyzing bugs:
| # | Variable | Type | Slot Assignment | Written By | Read By | Proxy-Relevant? |
|---|
For each state variable, determine:
bytes32 constant)?sstore/sload?keccak256(key . slot). For arrays: keccak256(slot) + index.Tag: [TRACE:variable={name} → slot={computation} → writers={functions}]
For each function operating on structs or complex types:
Trace every local variable of struct, array, or mapping type:
storage or memory?memory: is the function INTENDING to modify persistent state? If yes → lost write (copy modified in memory, never persisted).storage: does every code path that modifies the reference complete without early return before the write?For each function accepting struct/array parameters:
memory or calldata?function update(MyStruct memory s) modifies s.field but s is a memory copy - original unchanged.For libraries called via using ... for:
storage or memory references?Tag: [TRACE:function={name} → var={var} → location={memory/storage} → write_persisted={YES/NO}]
bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1)).For each upgrade path (V1 → V2):
__gap storage slots reserved? New variables consuming gap correctly?For EIP-2535 or namespaced storage:
Tag: [TRACE:proxy_slot={N} → impl_var={name} → collision={YES/NO}]
For each inline assembly block using sstore or sload:
sstore?sstore writes full 32 bytes - masking/shifting correct for packed slots?)If tstore/tload used:
sstore/sload? (transient cleared after tx, permanent is not)tstore instead of sstore?Tag: [BOUNDARY:user_input={MAX} → computed_slot={value} → target={what_gets_overwritten}]
Processing: ENUMERATE all calldataload/mload(add( sites with literal offsets + all byte-slicing with hardcoded N on dynamic-type data → PROCESS each against the criteria below → COVERAGE GATE before moving to Step 5.
Scope: Any code that reads from ABI-encoded data using hardcoded byte offsets rather than following offset pointers. This includes:
calldataload(N) in assembly (raw calldata)mload(add(data, N)) in assembly (bytes memory/calldata variable)data[N:] or data[N:N+32] byte-slicing in Solidity with hardcoded Nbytes fields after abi.decodeGrep: calldataload\( with a numeric literal, mload(add( with a literal offset on a bytes variable, fixed-offset byte-slicing on decoded bytes data.
| Read Site | Mechanism | Offset | Hardcoded? | Into Dynamic-Type Content? | Value Used For | Same Value Read via abi.decode? |
|---|
Root cause: ABI encoding is a convention, not enforced by the EVM. Dynamic types (bytes, string, T[]) use offset pointers — the content can be placed anywhere the pointer says. Hardcoded offsets assume canonical pointer values. A caller can supply non-canonical (but ABI-valid) encoding, making the hardcoded position contain attacker-controlled data instead of the expected field. This applies at every nesting level — top-level calldata, inner bytes fields, and nested structs.
Three impact categories:
HIGH/CRITICAL — Dual-read divergence: Hardcoded-offset read + the same value also read via abi.decode or pointer-following elsewhere. The two reads see different values. Enables: authorization bypass (auth sees attacker, execution sees victim), accounting divergence (check validates amount X, transfer uses amount Y).
MEDIUM — Single-read assumption violation: Hardcoded-offset read into dynamic-type content, value is security-critical, no dual-read exists but offset pointer is not validated as canonical. The contract reads attacker-controlled data as a trusted field. Latent Critical — any future addition of abi.decode on the same data creates dual-read divergence.
MEDIUM — Revert injection / DoS: Hardcoded-offset read lands on attacker-controlled data that triggers a revert (zero address, overflow, out-of-bounds). Legitimate calldata (via canonical encoding) would succeed, but attacker-crafted non-canonical encoding causes revert. Enables: griefing specific operations, front-run DoS if attacker can submit a malformed version of a victim's pending transaction.
MEDIUM — Hash divergence: Contract hashes raw calldata or portions of it (via assembly keccak256 over calldatacopy or manual packing) for signature verification, deduplication, or identity. Non-canonical encoding produces different hashes for logically identical inputs — or identical hashes for different inputs if overlapping tail pointers are used. Breaks: signature verification, replay protection, UserOp-style identity schemes.
Do not report if: The read targets a static-type parameter in the ABI head area (position is fixed regardless of offset pointers), or the value is not security-critical, or the contract validates that the offset pointer equals the expected canonical value before reading.
Additional note — memory vs calldata decoding inconsistency: Non-canonical calldata that decodes successfully via abi.decode from calldata may fail when the same bytes are copied to memory and re-decoded — the Solidity memory decoder is stricter. Code that copies calldata to memory then decodes should be checked for this asymmetry.
Tag: [TRACE:hardcoded_read({mechanism}, offset={N}) → dynamic_type_content={YES/NO} → dual_read={YES/NO} → impact={DIVERGENCE/ASSUMPTION/REVERT_DOS/HASH_DIVERGENCE}]
When mapping entries or array elements are deleted:
delete mapping[key] clears value but leaves stale entries in enumeration arrays?For manual bit packing:
|= (1 << n) to set but = 0 instead of &= ~(1 << n) to clear → clears ALL bits)Variables read before explicit write:
require(configuredValue > 0) but never set → permanent DoS. if (admin == address(0)) { unrestricted } → open access until set.Tag: [TRACE:delete={op} → auxiliary={state} → updated={YES/NO} → consumer={func} → reads_stale={YES/NO}]
sstore target be influenced by external input?__gap consumed correctly → no layout shiftStorageSlot) → lower risk| Section | Required | Completed? | Notes |
|---|---|---|---|
| 1. Storage Surface Inventory | YES | All state variables with slots | |
| 2. Memory vs Storage Confusion | IF structs/complex types | Data location of all references | |
| 3. Proxy Storage Layout | IF proxy/upgradeable | Slot overlap, upgrade continuity | |
| 4. Assembly Storage Safety | IF assembly with sstore/sload | Slot computation, value encoding | |
| 4d. Hardcoded Offset into ABI Data | IF calldataload/mload at hardcoded offset OR byte-slicing with literal offset on dynamic-type data | Dual-read divergence, assumption violation, revert injection | |
| 5. Storage Semantic Corruption | IF delete/restructure ops | Auxiliary state consistency |
© PlamenTSV, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in agents/skills/evm/storage-layout-safety of PlamenTSV/plamen.
Open the folder on GitHubat commit 795962b
Storage Layout Safety next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Storage Layout Safety this skillPlamenTSV/plamen | 303 | — | ~2.8k | Automated safety check: Pass | MIT | |
| Fizz Convertpashov/skills | 1.2k | 2 repos | ~3.7k | Automated safety check: Pass | MIT | |
| Solana Devsolana-foundation/solana-dev-skill | 574 | — | ~3.8k | Automated safety check: Pass | MIT | |
| Feynman Auditor0xiehnnkta/nemesis-auditor | 243 | 1 repos | ~11k | Automated safety check: Pass | MIT | |
| Smart Contract Auditgreatpie/smart-contract-audit-skill | 101 | — | ~1.1k | Automated safety check: Pass | None | |
| RadarAuditware/radar | 154 | — | ~2.1k | Automated safety check: Pass | GPL-3.0 |
pashov/skills
Convert English-language properties in PROPERTIES.md (produced by the Fizz skill) into Solidity assertions inside the existing fuzz harness, then flip their checkboxes.
solana-foundation/solana-dev-skill
A skill your agent uses when user asks to "build a Solana dapp", "write an Anchor program", "create a token", "debug Solana errors", "set up wallet connection", "test my Solana program", "fuzz my…
0xiehnnkta/nemesis-auditor
Deep business logic bug finder using the Feynman technique. An agent skill from 0xiehnnkta/nemesis-auditor.
greatpie/smart-contract-audit-skill
Script-backed, out-of-box auditing workflow for Solidity/EVM repositories based on EVMbench detect/patch/exploit methodology.
Auditware/radar
Use radar for smart contract security analysis, AST generation, and detection template development.
Gabson0x/bountyforge
Security audit of Solidity code while you develop. An agent skill from Gabson0x/bountyforge.
PlamenTSV/plamen
Prepare Solidity projects for a security audit — test coverage, test quality, NatSpec docs, code hygiene, dependency health, best-practice enforcement, deployment readiness, and project…
PlamenTSV/plamen
Trigger Pattern Always (used by all verifier agents) - Inject Into security-verifier agents (Phase 5)
PlamenTSV/plamen
Trigger Pattern Always (Aptos Move) - foundational security check - Inject Into Breadth agents, depth agents
PlamenTSV/plamen
Trigger Pattern Always (Sui Move) -- foundational security check - Inject Into Breadth agents, depth agents
PlamenTSV/plamen
Trigger Pattern ACCOUNTCLOSING flag detected (close/CloseAccount usage) - Inject Into Breadth agents, depth agents
PlamenTSV/plamen
Trigger Pattern Always required for Solana audits - Inject Into Breadth agents, depth agents
Categories
Type Thought-template (instantiate before use) - Trigger Pattern STORAGELAYOUT flag detected. Storage Layout Safety is an agent skill from PlamenTSV/plamen.
Storage Layout Safety fits situations like: pattern STORAGELAYOUT flag detected; tasks that involve Smart contracts.
Run `npx skills add PlamenTSV/plamen --skill storage-layout-safety -a claude-code`. Or copy the skill folder (agents/skills/evm/storage-layout-safety in PlamenTSV/plamen) into .claude/skills/storage-layout-safety in your project. Claude Code loads it when a task matches its description.
Run `npx skills add PlamenTSV/plamen --skill storage-layout-safety -a codex`. Or copy the skill folder (agents/skills/evm/storage-layout-safety in PlamenTSV/plamen) into .agents/skills/storage-layout-safety in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add PlamenTSV/plamen --skill storage-layout-safety -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/storage-layout-safety, .gemini/skills/storage-layout-safety, .github/skills/storage-layout-safety and .opencode/skills/storage-layout-safety in your project.
SKILL.md names no scripts, command-line tools or credentials: Storage Layout Safety is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Storage Layout Safety is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.8k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Storage Layout Safety: Fizz Convert (pashov/skills, 1.2k stars), Solana Dev (solana-foundation/solana-dev-skill, 574 stars), Feynman Auditor (0xiehnnkta/nemesis-auditor, 243 stars) and Smart Contract Audit (greatpie/smart-contract-audit-skill, 101 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
PlamenTSV (a GitHub user) maintains it in PlamenTSV/plamen, which has 303 GitHub stars. The repository holds 87 skills in this directory. The repository was last updated on September 26, 2026.
Source: PlamenTSV/plamen on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.