Smart Contract Upgrade Governance
sickn33/agentic-awesome-skills
Soroban WASM upgrade governance register: executable bytecode hash, timelocked migration delays, and multi-sig authorization quorum.
Trigger Pattern Contract upgrades via updatecurrentcontractwasm, storage migration, deprecated functions, token migrations - Inject Into Breadth agents, depth-state-trace
$ npx skills add PlamenTSV/plamen --skill migration-analysis -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install PlamenTSV/plamen migration-analysis --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/soroban/migration-analysis .claude/skills/migration-analysis && 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 "migration-analysis" agent skill from https://github.com/PlamenTSV/plamen/tree/main/agents/skills/soroban/migration-analysis into .claude/skills/migration-analysis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migration-analysis", 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/soroban/migration-analysisType 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 migration-analysis -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install PlamenTSV/plamen migration-analysis --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/soroban/migration-analysis .agents/skills/migration-analysis && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "migration-analysis" agent skill from https://github.com/PlamenTSV/plamen/tree/main/agents/skills/soroban/migration-analysis into .agents/skills/migration-analysis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migration-analysis", 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 migration-analysis -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install PlamenTSV/plamen migration-analysis --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/soroban/migration-analysis .cursor/skills/migration-analysis && 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 "migration-analysis" agent skill from https://github.com/PlamenTSV/plamen/tree/main/agents/skills/soroban/migration-analysis into .cursor/skills/migration-analysis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migration-analysis", 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/soroban/migration-analysis--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 migration-analysis -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install PlamenTSV/plamen migration-analysis --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/soroban/migration-analysis .gemini/skills/migration-analysis && 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 "migration-analysis" agent skill from https://github.com/PlamenTSV/plamen/tree/main/agents/skills/soroban/migration-analysis into .gemini/skills/migration-analysis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migration-analysis", 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 migration-analysisInstalls 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 migration-analysis -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/soroban/migration-analysis .github/skills/migration-analysis && 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 "migration-analysis" agent skill from https://github.com/PlamenTSV/plamen/tree/main/agents/skills/soroban/migration-analysis into .github/skills/migration-analysis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migration-analysis", 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 migration-analysis -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 migration-analysis --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/soroban/migration-analysis .opencode/skills/migration-analysis && 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 "migration-analysis" agent skill from https://github.com/PlamenTSV/plamen/tree/main/agents/skills/soroban/migration-analysis into .opencode/skills/migration-analysis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migration-analysis", 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.
migration-analysisTrigger Pattern Contract upgrades via updatecurrentcontractwasm, storage migration, deprecated functions, token migrations - Inject Into Breadth agents, depth-state-trace
Migration Analysis is an agent skill from PlamenTSV/plamen. Trigger Pattern Contract upgrades via updatecurrentcontractwasm, storage migration, deprecated functions, token migrations - Inject Into Breadth agents, depth-state-trace
Its SKILL.md is about 3.9k 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 Security, covering Smart contract auditing. It works with WebAssembly and Stellar. The repository describes itself as: Autonomous Web3 security audit agent for Claude Code. The licence is MIT.
6 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 (its code samples are rust and markdown).
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.
Migration Analysis loads about 3.9k tokens when it runs. Until then it costs about 48 tokens; SKILL.md has 1,475 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,475 words, ~3,851 tokens.
.claude/skills/migration-analysis/SKILL.md (or your agent's skills folder).Trigger Pattern: Contract upgrades via
update_current_contract_wasm, storage migration, deprecated functions, token migrations Inject Into: Breadth agents, depth-state-trace Finding prefix:[MG-N]Rules referenced: R4, R9, R10
update_current_contract_wasm|upgrade|migrate|deprecated|migrat|
legacy|v2|V2|old_token|new_token|storage_migration|DataKey::Key Soroban difference from EVM: There is no proxy pattern (no delegatecall). There is no BPFLoaderUpgradeable (Solana model). Soroban contract upgrade uses env.deployer().update_current_contract_wasm(new_wasm_hash), which replaces the contract's WASM bytecode while preserving ALL storage in-place. The contract address and all storage entries survive the upgrade unchanged. This means:
Find all upgrade-related patterns:
update_current_contract_wasm calls (the actual WASM upgrade mechanism)For each transition:
| Old Entity | New Entity | Upgrade/Migration Function | Who Can Call It | Is Migration Atomic with Upgrade? |
|---|
Critical question for each upgrade entry point: Is the upgrade function properly access-controlled with require_auth(&admin_address)? An unprotected update_current_contract_wasm is a CRITICAL vulnerability allowing any caller to replace the contract with arbitrary WASM.
For each upgrade that changes storage data structures:
// Example mismatch:
// V1 storage: DataKey::VaultState -> VaultStateV1 { owner: Address, balance: i128 }
// V2 storage: DataKey::VaultState -> VaultStateV2 { owner: Address, balance: i128, fee_rate: u32 }
// BREAKING: V2 reads VaultStateV2 from key DataKey::VaultState,
// but the stored bytes are VaultStateV1 — deserialization fails (trap) OR
// interprets the trailing bytes of balance as fee_rate (silent corruption).| Storage Key | V1 Data Type (fields) | V2 Data Type (fields) | Compatible? | Migration Path |
|---|
Soroban deserialization behavior on mismatch:
i128 → u64): deserialization may silently reinterpret bytes.Check for each storage key: does V2 WASM read the same key as V1 WASM wrote? If both use the same key but different types, this is a migration hazard.
For each contract function that accesses upgraded storage:
invoke_contract) expect from this contract?| Function | Storage Key Expected | Data Type Expected | Data Actually Stored (post-upgrade) | Mismatch? |
|---|
When the upgrade changes the contract's behavior, check whether external callers handle the changes:
| External Caller | Pre-Upgrade Expected Return | Post-Upgrade Actual Return | Caller Handles Both? | Breaking? |
|---|
Pattern: Contract upgrade changes function return values or events, but external contracts that call this contract via invoke_contract were written for the old interface. After upgrade, return values are misinterpreted by callers.
Before analyzing stranded asset paths, inventory all storage entries the contract owns:
| Storage Key | Storage Class | Stored Value Type | Post-Upgrade Logic Handles? | Withdrawal Path Post-Upgrade? |
|---|---|---|---|---|
| {DataKey::Vault} | Persistent | VaultState | YES/NO | {function name or NONE} |
| {DataKey::UserBalance(addr)} | Persistent | i128 | YES/NO | {function name or NONE} |
| {DataKey::Config} | Instance | Config | YES/NO | {function name or NONE} |
| {DataKey::TempNonce} | Temporary | u64 | N/A (expires) | N/A |
Pattern: Upgrade changes which storage keys the contract reads/writes, but old keys still hold value. If new logic cannot read or close old keys, assets associated with them are stranded.
| Asset/Storage | V1 Write Path | V2 Write Path | V1 Withdraw Path | V2 Withdraw Path |
|---|---|---|---|---|
| {DataKey::Vault(user)} | deposit_v1() | deposit_v2() | withdraw_v1() | withdraw_v2() |
| {DataKey::Stake(user)} | stake() | stake() | unstake() | unstake() |
Rule: If V1 Write exists but V2 Withdraw does not handle V1 storage key/type -> potential stranding.
| Storage Era | State Condition | Available Withdraw/Close Paths | Works? | Reason |
|---|---|---|---|---|
| V1 key format | V2 WASM deployed | withdraw_v2() reads DataKey::VaultV2 | Y/N | V1 used DataKey::VaultV1 — different key |
| V1 key format | Migration function exists | migrate_user(user) reads DataKey::VaultV1 | Y/N | {why} |
| V1 key format | Migration NOT called | withdraw_v2() | Y/N | Old data at old key, inaccessible |
| In-flight during upgrade | Partial operation state | ??? | Y/N | {why} |
STRANDING RULE: If ALL withdraw/close paths fail for any storage state combination -> STRANDED ASSETS FINDING
| Function | Who Can Call | What State Can Recover | Limitations |
|---|---|---|---|
| migrate_user(user) | Any user / admin only | V1 user balances | One-time per user; must be called before TTL expires |
| emergency_withdraw() | Admin | Protocol-owned token balances | Requires active admin |
| update_and_migrate() | Admin | Performs upgrade + migration atomically | Is migration truly atomic? |
Scenario 1: V1 Storage + V2 WASM — No Migration Called
State: User has balance stored at DataKey::BalanceV1(user_address) in Persistent storage
Event: Contract upgraded to V2; V2 uses DataKey::BalanceV2(user_address)
Question: Can user withdraw via V2 withdraw() function?
Trace: [document storage key lookup and deserialization in V2 withdraw()]
Result: [SUCCESS / STRANDED + amount]Scenario 2: In-Flight During Upgrade
State: User submitted a multi-step operation (e.g., unlock request) at ledger N
Contract stores pending operation at DataKey::PendingOp(user_address)
Event: Contract upgraded at ledger N+1; V2 no longer reads DataKey::PendingOp
Question: Can user complete their operation at ledger N+2?
Trace: [document function path and storage access in V2]
Result: [SUCCESS / STRANDED + amount]Scenario 3: Storage Key Renamed
State: V1 uses DataKey::Config for configuration struct ConfigV1
Event: V2 uses DataKey::Config for configuration struct ConfigV2 with additional fields
Question: Does V2 correctly read V1-written Config data?
Trace: [document deserialization: ConfigV2::from(stored_bytes) where stored_bytes is ConfigV1]
Result: [SUCCESS (if additive and defaults apply) / TRAP / SILENT_CORRUPTION]Scenario 4: TTL Expiry During Migration Window
State: User's balance is in Persistent storage with a TTL set at V1 initialization
Event: Contract is upgraded; migration requires user to call migrate_user() within TTL window
Question: What happens if user does not call migrate_user() before TTL expires?
Trace: [document TTL of Persistent entries and whether upgrade extends TTLs]
Result: [DATA_WIPED_ON_EXPIRY / SAFE (TTL auto-extended by upgrade)]| Admin/Migration Function | Precondition Required | User Action That Blocks It | Timing Window | Severity |
|---|---|---|---|---|
| {admin_fn} | {precondition} | {user_action} | {window} | {assess} |
Soroban-specific patterns:
| Check | Status | Evidence |
|---|---|---|
| Upgrade authority identified? | {address or NONE} | {source location} |
Is upgrade gated by require_auth? | YES/NO | If NO: CRITICAL |
| Is authority a multisig (Stellar multisig or Soroban governance contract)? | YES/NO | |
| Is there a timelock on upgrade execution? | YES/NO | Duration: {N ledgers} |
| Can upgrade authority be transferred to zero/revoked? | YES/NO | If YES: is revocation safe post-migration? |
| Does the upgrade function also run migration logic? | YES/NO | Atomic upgrade+migrate is safer than separate steps |
| Can upgrade be performed with a WASM hash that produces a trap on first call? | YES/NO | Bricking risk |
| Are Instance-class storage TTLs extended during upgrade? | YES/NO | Contract instance TTL must not expire before users can act |
| Contract Change | Downstream Consumer | Expected Interface | Post-Migration Actual | Breaking? |
|---|---|---|---|---|
| {change} | External callers via invoke_contract | {expected function signature} | {actual function signature} | YES/NO |
| {change} | Indexers / Horizon event processors | {expected event structure} | {actual event structure} | YES/NO |
| {change} | Frontend SDK | {expected function and arg types} | {actual} | YES/NO |
Pattern: Contract upgrade changes function signatures, argument types, or event structures, but downstream consumers built against the old interface continue to call the new WASM with old argument encoding — calls may trap (wrong arg count) or silently pass with misinterpreted arguments.
Soroban ABI note: Soroban functions are identified by their name (as a Symbol). There is no ABI checksum like EVM function selectors. An upgraded function with the same name but different argument types will accept the old call encoding, potentially silently misinterpreting arguments.
update_current_contract_wasm is called within the same function that writes migrated storage, the migration is effectively atomic**ID**: [MG-N]
**Verdict**: CONFIRMED / PARTIAL / REFUTED / CONTESTED
**Step Execution**: (see checklist below)
**Rules Applied**: [R4:___, R9:___, R10:___]
**Severity**: Critical/High/Medium/Low/Info
**Location**: src/{file}.rs:LineN
**Storage Transition**:
- Old: {old_key / old_type / old_storage_class}
- New: {new_key / new_type / new_storage_class}
- Mismatch Point: {where key or type diverges}
**Description**: {what is wrong}
**Impact**: {stranded funds, corrupted state, bricked contract, broken callers}
**Evidence**: {code showing mismatch}| Step | Required | Completed? | Notes |
|---|---|---|---|
| 1. Identify Upgrade and Migration Patterns | YES | ||
| 2. Storage Schema Compatibility | YES | ||
| 3. Trace Storage Access Paths | YES | ||
| 3b. External Contract Side Effect Compatibility | YES | ||
| 3c. Pre-Upgrade Storage Inventory | YES | ||
| 4. Stranded Asset Analysis (4a-4e) | YES | ||
| 4f. User-Blocks-Admin Scenarios | YES | ||
| 5. Upgrade Authority Lifecycle | YES | ||
| 6. Downstream Integration Compatibility | YES |
If any step skipped, document valid reason (N/A, no upgrade function, immutable contract, single version, no external callers).
© 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/soroban/migration-analysis of PlamenTSV/plamen.
Open the folder on GitHubat commit 795962b
Migration Analysis 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 |
|---|---|---|---|---|---|---|
| Migration Analysis this skillPlamenTSV/plamen | 303 | — | ~3.9k | Automated safety check: Pass | MIT | |
| Smart Contract Upgrade Governancesickn33/agentic-awesome-skills | 47k | 1 repos | ~1.4k | Automated safety check: Pass | MIT | |
| Soroban Contract Auditsickn33/agentic-awesome-skills | 47k | 1 repos | ~1.4k | Automated safety check: Pass | MIT | |
| Soroban Liquidity Poolsickn33/agentic-awesome-skills | 47k | 1 repos | ~1.3k | Automated safety check: Pass | MIT | |
| Soroban Storage Ttl Lifecyclesickn33/agentic-awesome-skills | 47k | 1 repos | ~1.3k | Automated safety check: Pass | MIT | |
| Soroban Token Mintersickn33/agentic-awesome-skills | 47k | 1 repos | ~1.3k | Automated safety check: Pass | MIT |
sickn33/agentic-awesome-skills
Soroban WASM upgrade governance register: executable bytecode hash, timelocked migration delays, and multi-sig authorization quorum.
sickn33/agentic-awesome-skills
Soroban smart contract security audit register: authorization checks, panic pathways, integer overflows, and storage footprint verification for Stellar.
sickn33/agentic-awesome-skills
Automated market maker liquidity pool register: constant-product invariant curves, swap fee tiers, and LP token shares for Soroban DeFi.
sickn33/agentic-awesome-skills
Soroban ledger state rent and TTL extension register: live state tracking, bump thresholds, rent fee reserves, and archive boundaries.
sickn33/agentic-awesome-skills
Soroban SEP-41 token contract architecture register: admin control, supply caps, metadata standard, and transfer event emissions on Stellar.
VelaPayments/vela-payments
End-to-end Stellar development playbook. An agent skill from VelaPayments/vela-payments.
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
Works with
Categories
Trigger Pattern Contract upgrades via updatecurrentcontractwasm, storage migration, deprecated functions, token migrations - Inject Into Breadth agents, depth-state-trace. Migration Analysis is an agent skill from PlamenTSV/plamen.
Migration Analysis fits situations like: pattern Contract upgrades via updatecurrentcontractwasm; storage migration; deprecated functions; token migrations - Inject Into Breadth agents.
Run `npx skills add PlamenTSV/plamen --skill migration-analysis -a claude-code`. Or copy the skill folder (agents/skills/soroban/migration-analysis in PlamenTSV/plamen) into .claude/skills/migration-analysis in your project. Claude Code loads it when a task matches its description.
Run `npx skills add PlamenTSV/plamen --skill migration-analysis -a codex`. Or copy the skill folder (agents/skills/soroban/migration-analysis in PlamenTSV/plamen) into .agents/skills/migration-analysis 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 migration-analysis -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/migration-analysis, .gemini/skills/migration-analysis, .github/skills/migration-analysis and .opencode/skills/migration-analysis in your project.
SKILL.md names no scripts, command-line tools or credentials: Migration Analysis 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.
Migration Analysis is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.9k tokens (SKILL.md is roughly 15k 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 Migration Analysis: Smart Contract Upgrade Governance (sickn33/agentic-awesome-skills, 47k stars), Soroban Contract Audit (sickn33/agentic-awesome-skills, 47k stars), Soroban Liquidity Pool (sickn33/agentic-awesome-skills, 47k stars) and Soroban Storage Ttl Lifecycle (sickn33/agentic-awesome-skills, 47k 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.