Guidelines Advisor
Trail of BitsOfficialPublished by Trail of Bits
- Skill
- Review and audit
- Security
- CC-BY-SA-4.0
- No issues found
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
Guidelines Advisor provides a systematic analysis of smart contract projects based on established development guidelines. It evaluates codebase architecture, implementation quality, and testing strategies to generate documentation, identify potential pitfalls, and provide prioritized improvement recommendations. The advisor covers 11 assessment areas, including documentation, on-chain/off-chain computation, upgradeability, proxy patterns, function composition, inheritance, events, common pitfalls, dependencies, testing, and platform-specific guidance.
What it does
- Generates plain English system descriptions and architectural documentation.
- Reviews upgradeability patterns and delegatecall proxy implementations.
- Assesses implementation quality including function composition, inheritance, and event logging.
- Identifies common security pitfalls and evaluates dependency management.
- Analyzes test suite coverage and suggests improvements.
- Provides prioritized recommendations categorized by urgency.
When to use it
- When evaluating if a smart contract project follows established development guidelines.
- When reviewing the architecture of on-chain and off-chain components.
- When assessing the security and implementation of upgradeability or proxy patterns.
- When seeking actionable feedback on contract design, inheritance, or testing strategies.
Advantages
- Provides project-specific findings with direct file and line references.
- Systematically covers 11 distinct areas of smart contract development.
- Offers a structured, prioritized roadmap for improvements.
- Adapts analysis based on the specific platform and project context.
Usage examples
- “Review my smart contract project for adherence to best practices regarding upgradeability and proxy patterns.”
- The agent will analyze the codebase for delegatecall usage, storage layout consistency, and initialization patterns, providing a report on potential risks and improvements.
- “Analyze my current test suite and suggest improvements for better coverage.”
- The agent will evaluate existing test files, identify gaps in coverage, and recommend techniques like fuzzing or formal verification.
Install
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/trailofbits/guidelines-advisor/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip guidelines-advisor.zip -d .agents/skills
Documentation by Trail of Bits
Guidelines Advisor
Purpose
Systematically analyzes the codebase and provides guidance based on Trail of Bits' development guidelines:
Generate documentation and specifications (plain English descriptions, architectural diagrams, code documentation)
Optimize on-chain/off-chain architecture (only if applicable)
Review upgradeability patterns (if your project has upgrades)
Check delegatecall/proxy implementations (if present)
Assess implementation quality (functions, inheritance, events)
Identify common pitfalls
Review dependencies
Evaluate test suite and suggest improvements
Framework: Building Secure Contracts - Development Guidelines
How This Works
Phase 1: Discovery & Context
Explores the codebase to understand:
Project structure and platform
Contract/module files and their purposes
Existing documentation
Architecture patterns (proxies, upgrades, etc.)
Testing setup
Dependencies
Phase 2: Documentation Generation
Helps create:
Plain English system description
Architectural diagrams (using Slither printers for Solidity)
Code documentation recommendations (NatSpec for Solidity)
Phase 3: Architecture Analysis
Analyzes:
On-chain vs off-chain component distribution (if applicable)
Upgradeability approach (if applicable)
Delegatecall proxy patterns (if present)
Phase 4: Implementation Review
Assesses:
Function composition and clarity
Inheritance structure
Event logging practices
Common pitfalls presence
Dependencies quality
Testing coverage and techniques
Phase 5: Recommendations
Provides:
Prioritized improvement suggestions
Best practice guidance
Actionable next steps
Assessment Areas
I analyze 11 comprehensive areas covering all aspects of smart contract development. For detailed criteria, best practices, and specific checks, see ASSESSMENT_AREAS.md.
Quick Reference:
Documentation & Specifications
Plain English system descriptions
Architectural diagrams
NatSpec completeness (Solidity)
Documentation gaps identification
On-Chain vs Off-Chain Computation
Complexity analysis
Gas optimization opportunities
Verification vs computation patterns
Upgradeability
Migration vs upgradeability trade-offs
Data separation patterns
Upgrade procedure documentation
Delegatecall Proxy Pattern
Storage layout consistency
Initialization patterns
Function shadowing risks
Slither upgradeability checks
Function Composition
Function size and clarity
Logical grouping
Modularity assessment
Inheritance
Hierarchy depth/width
Diamond problem risks
Inheritance visualization
Events
Critical operation coverage
Event naming consistency
Indexed parameters
Common Pitfalls
Reentrancy patterns
Integer overflow/underflow
Access control issues
Platform-specific vulnerabilities
Dependencies
Library quality assessment
Version management
Dependency manager usage
Copied code detection
Testing & Verification
Coverage analysis
Fuzzing techniques
Formal verification
CI/CD integration
Platform-Specific Guidance
Solidity version recommendations
Compiler warning checks
Inline assembly warnings
Platform-specific tools
For complete details on each area including what I'll check, analyze, and recommend, see ASSESSMENT_AREAS.md.
Example Output
When the analysis is complete, you'll receive comprehensive guidance covering:
System documentation with plain English descriptions
Architectural diagrams and documentation gaps
Architecture analysis (on-chain/off-chain, upgradeability, proxies)
Implementation review (functions, inheritance, events, pitfalls)
Dependencies and testing evaluation
Prioritized recommendations (CRITICAL, HIGH, MEDIUM, LOW)
Overall assessment and path to production
For a complete example analysis report, see EXAMPLE_REPORT.md.
Deliverables
I provide four comprehensive deliverable categories:
1. System Documentation
Plain English descriptions
Architectural diagrams
Documentation gaps analysis
2. Architecture Analysis
On-chain/off-chain assessment
Upgradeability review
Proxy pattern security review
3. Implementation Review
Function composition analysis
Inheritance assessment
Events coverage
Pitfall identification
Dependencies evaluation
Testing analysis
4. Prioritized Recommendations
CRITICAL (address immediately)
HIGH (address before deployment)
MEDIUM (address for production quality)
LOW (nice to have)
For detailed templates and examples of each deliverable, see DELIVERABLES.md.
Assessment Process
When invoked, I will:
Explore the codebase
Identify all contract/module files
Find existing documentation
Locate test files
Check for proxies/upgrades
Identify dependencies
Generate documentation
Create plain English system description
Generate architectural diagrams (if tools available)
Identify documentation gaps
Analyze architecture
Assess on-chain/off-chain distribution (if applicable)
Review upgradeability approach (if applicable)
Audit proxy patterns (if present)
Review implementation
Analyze functions, inheritance, events
Check for common pitfalls
Assess dependencies
Evaluate testing
Provide recommendations
Present findings with file references
Ask clarifying questions about design decisions
Suggest prioritized improvements
Offer actionable next steps
Rationalizations (Do Not Skip)
| Rationalization | Why It's Wrong | Required Action |
|---|---|---|
| "System is simple, description covers everything" | Plain English descriptions miss security-critical details | Complete all 5 phases: documentation, architecture, implementation, dependencies, recommendations |
| "No upgrades detected, skip upgradeability section" | Upgradeability can be implicit (ownable patterns, delegatecall) | Search for proxy patterns, delegatecall, storage collisions before declaring N/A |
| "Not applicable" without verification | Premature scope reduction misses vulnerabilities | Verify with explicit codebase search before skipping any guideline section |
| "Architecture is straightforward, no analysis needed" | Obvious architectures have subtle trust boundaries | Analyze on-chain/off-chain distribution, access control flow, external dependencies |
| "Common pitfalls don't apply to this codebase" | Every codebase has common pitfalls | Systematically check all guideline pitfalls with grep/code search |
| "Tests exist, testing guideline is satisfied" | Test existence ≠ test quality | Check coverage, property-based tests, integration tests, failure cases |
| "I can provide generic best practices" | Generic advice isn't actionable | Provide project-specific findings with file:line references |
| "User knows what to improve from findings" | Findings without prioritization = no action plan | Generate prioritized improvement roadmap with specific next steps |
Notes
I'll only analyze relevant sections (won't hallucinate about upgrades if not present)
I'll adapt to your platform (Solidity, Rust, Cairo, etc.)
I'll use available tools (Slither, etc.) but work without them if unavailable
I'll provide file references and line numbers for all findings
I'll ask questions about design decisions I can't infer from code
Ready to Begin
What I'll need:
Access to your codebase
Context about your project goals
Any existing documentation or specifications
Information about deployment plans
Let's analyze your codebase and improve it using Trail of Bits' best practices!
Files
- ATTRIBUTION.mdAdded by AutoGineer955 B
- LICENSELicence file added by AutoGineer19.7 KiB
- SKILL.md8.5 KiB
- agents/openai.yaml258 B
- assets/trail-of-bits-mark.svg3.0 KiB
- resources/ASSESSMENT_AREAS.md7.8 KiB
- resources/DELIVERABLES.md2.3 KiB
- resources/EXAMPLE_REPORT.md8.2 KiB
resources/EXAMPLE_REPORT.md
Example Output
When the analysis is complete, you'll receive comprehensive guidance like this:
=== DEVELOPMENT GUIDELINES ANALYSIS ===
Project: NFT Marketplace
Platform: Solidity (Ethereum)
Analysis Date: March 15, 2024
---
## 1. DOCUMENTATION & SPECIFICATIONS
### Generated System Description
**Plain English Overview:**
The NFT Marketplace allows users to list, buy, and auction ERC721 tokens.
The system uses a decentralized orderbook where sellers create listings with
price and duration. Buyers can purchase instantly or place bids for auctions.
A 2.5% platform fee is collected on each sale.
**Key Assumptions:**
- All NFTs follow ERC721 standard
- Prices denominated in ETH only
- No token whitelisting (any ERC721 accepted)
- Platform fee immutable after deployment
### Architectural Diagrams Generated
✓ contract-interactions.png - Shows Marketplace, OrderBook, FeeCollector flow
✓ state-machine.png - Listing states (Created → Active → Sold/Cancelled/Expired)
✓ auction-flow.png - Bid placement and finalization sequence
### Documentation Gaps Identified
⚠ Missing NatSpec:
- OrderBook.cancelOrder() - No @notice or @param
- FeeCollector.withdrawFees() - Missing @dev implementation notes
⚠ Undocumented Assumptions:
- What happens if NFT transfer fails during purchase?
- Are listings automatically cleaned up after expiration?
- Fee distribution mechanism not explained
**Recommendation:** Add comprehensive NatSpec to all public functions
and document error handling for external calls.
---
## 2. ARCHITECTURE ANALYSIS
### On-Chain vs Off-Chain Components
**Current Distribution:**
- On-Chain: Listing creation, order execution, fee collection
- Off-Chain: Order discovery, price indexing, user notifications
**Optimization Opportunities:**
✓ Order matching is efficient (on-chain orderbook)
✗ Listing enumeration is gas-intensive
**Recommendation:**
Consider moving listing discovery off-chain using event indexing.
Keep core execution on-chain. Estimated gas savings: 40% for browse operations.
### Upgradeability Review
**Current Pattern:** TransparentUpgradeableProxy (OpenZeppelin)
**Assessment:**
✓ Proxy and implementation use shared storage base
✓ Initialization properly handled
✓ No function shadowing detected
✗ No timelock on upgrades (admin can upgrade immediately)
**Critical Issue:**
File: contracts/Marketplace.sol
The marketplace uses delegatecall proxy but admin is EOA without timelock.
**Recommendation:**
- Deploy TimelockController (48-hour delay)
- Transfer proxy admin to timelock
- Add emergency pause for critical bugs
### Proxy Pattern Security
**Findings:**
✓ Storage layout consistent (inherits MarketplaceStorage)
✓ No constructors in implementation
✓ Initialize function has initializer modifier
⚠ Immutable variables in proxy (PLATFORM_FEE)
**Issue:** PLATFORM_FEE defined as immutable in proxy will not update
if implementation changes this value.
**Fix:** Move PLATFORM_FEE to storage or accept it's immutable forever.
---
## 3. IMPLEMENTATION REVIEW
### Function Composition
**Complex Functions Identified:**
⚠ executePurchase() - 45 lines, cyclomatic complexity: 12
- Handles payment, NFT transfer, fee calc, event emission
- Recommendation: Extract _validatePurchase(), _processPayment(), _transferNFT()
⚠ finalizeAuction() - 38 lines, cyclomatic complexity: 10
- Multiple nested conditionals for winner determination
- Recommendation: Extract _determineWinner(), _refundLosers()
✓ Other functions well-scoped (average 15 lines)
### Inheritance
**Hierarchy Analysis:**Marketplace ├─ Ownable ├─ ReentrancyGuard ├─ Pausable └─ MarketplaceStorage
✓ Shallow inheritance (depth: 2)
✓ No diamond problem
✓ Clear separation of concerns
**Slither Inheritance Graph:** contracts/inheritance.png (generated)
### Events
**Event Coverage:**
✓ 12 events defined
✓ All state changes emit events
✓ Consistent naming (ListingCreated, OrderFulfilled, BidPlaced)
✓ Indexed parameters for filtering (tokenId, seller, buyer)
⚠ Missing Events:
- Platform fee updates (if ever made variable)
- Pause/unpause operations
**Recommendation:** Add PlatformPaused/Unpaused events for monitoring.
### Common Pitfalls
**Issues Found:**
❌ CRITICAL: Reentrancy in executePurchase()
File: contracts/Marketplace.sol:234
```solidity
function executePurchase(uint256 listingId) external payable {
Listing memory listing = listings[listingId];
IERC721(listing.nftContract).transferFrom(listing.seller, msg.sender, listing.tokenId);
// State update AFTER external call!
listing.status = Status.Sold;
}Fix: Follow checks-effects-interactions. Update state before external calls.
⚠ HIGH: Unvalidated external call return File: contracts/Marketplace.sol:245
payable(seller).transfer(amount); // Can fail silentlyFix: Use call{value}() and check return value or use Address.sendValue().
✓ No timestamp dependence ✓ No tx.origin usage ✓ Integer overflow protected (Solidity 0.8+)
4. DEPENDENCIES
Current Dependencies: ✓ @openzeppelin/[email protected] - Well-tested, good choice ✗ Custom ERC721 implementation (contracts/CustomERC721.sol)
Issues: ⚠ CustomERC721 reinvents OpenZeppelin's ERC721
234 lines of duplicate code
No added functionality
Increases audit surface
Recommendation: Replace CustomERC721 with OpenZeppelin's implementation. Saves 234 lines, reduces risk, improves maintainability.
Dependency Management: ✓ Using npm for dependencies ✓ Package versions pinned ⚠ Dependencies not updated in 8 months
Action: Update @openzeppelin/contracts to latest 5.x (breaking changes, test thoroughly)
5. TESTING EVALUATION
Current Test Suite:
45 unit tests (forge test)
12 integration tests
Coverage: 78%
Gaps Identified: ✗ No fuzzing (Echidna/Foundry) ✗ No formal verification ✗ Edge cases not covered:
Auction with zero bids
Listing with expired timestamp
Purchase during contract pause
Recommendations:
Add Foundry invariant tests:
Total fees collected == sum of individual sales * 0.025
Active listings count matches actual active listings
No NFT can be in multiple active listings
Increase coverage to 95%+ by testing:
Pausable functions during pause state
Reentrancy attack scenarios
Failed NFT transfers
Add integration tests:
End-to-end auction flow with multiple bidders
Platform fee collection and withdrawal
Upgrade and data migration
Estimated Effort: 1-2 weeks to reach 95% coverage with invariant testing
PRIORITIZED RECOMMENDATIONS
CRITICAL (Fix Immediately)
Fix reentrancy in executePurchase() [HIGH IMPACT]
Risk: Funds can be drained
Effort: 1 day
File: contracts/Marketplace.sol:234
Validate external call returns [HIGH IMPACT]
Risk: Failed transfers not detected
Effort: 1 day
Files: Multiple payment operations
Add timelock to upgrades [HIGH IMPACT]
Risk: Instant malicious upgrade
Effort: 2 days
HIGH (Before Mainnet)
Remove CustomERC721, use OpenZeppelin [MEDIUM IMPACT]
Benefit: Reduce code, increase security
Effort: 3 days
Increase test coverage to 95% [MEDIUM IMPACT]
Benefit: Catch edge case bugs
Effort: 1-2 weeks
Add comprehensive NatSpec [LOW IMPACT]
Benefit: Better documentation
Effort: 2-3 days
MEDIUM (Post-Launch V2)
Optimize listing enumeration [MEDIUM IMPACT]
Benefit: 40% gas savings on reads
Effort: 1 week
Add invariant fuzzing [HIGH IMPACT]
Benefit: Discover hidden bugs
Effort: 1 week
SUMMARY
Overall Assessment: MODERATE MATURITY
The codebase follows many best practices with good use of OpenZeppelin libraries and clear architecture. Critical issues are reentrancy vulnerability and lack of upgrade timelock. Testing needs improvement.
Path to Production:
Fix CRITICAL items (reentrancy, timelock) - Week 1
Address HIGH items (dependencies, testing) - Week 2-3
External audit - Week 4-5
Mainnet deployment with documented limitations
MEDIUM items in V2 - Month 2-3
Estimated Timeline: 3-4 weeks to production-ready state.
Analysis completed using Trail of Bits Development Guidelines
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Security
No issues found by our static scan· No issues found
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Published by
- Trail of Bits
- Publisher
- Trail of Bits (Official)
- Source
- trailofbits/skills · plugins/building-secure-contracts/skills/guidelines-advisor · commit e4dd0bb
- Licence
- Creative Commons Attribution-ShareAlike 4.0 International (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by Trail of Bits.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download guidelines-advisor.zip