Agent skill

Centralization Risk

by PlamenTSV in PlamenTSV/plamen

Trigger Pattern Protocol has privileged authorities (admin, operator, upgrade authority, governance) - Inject Into Breadth agents (optional), depth-state-trace

MITAuto-check passedSecurity

Install Centralization Risk

skills CLI
$ npx skills add PlamenTSV/plamen --skill centralization-risk -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install PlamenTSV/plamen centralization-risk --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/PlamenTSV/plamen.git skills-src && mkdir -p .claude/skills && cp -r skills-src/agents/skills/soroban/centralization-risk .claude/skills/centralization-risk && rm -rf skills-src

Use ~/.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/

Facts

Skill name
centralization-risk
GitHub stars
303
Token cost
~3k tokens
SKILL.md length
1,265 words
Files
1
Skills in repo
87
Repo updated
First seen
Licence
MIT

At a glance

Trigger Pattern Protocol has privileged authorities (admin, operator, upgrade authority, governance) - Inject Into Breadth agents (optional), depth-state-trace

  • Works in 6 steps: Privilege Inventory → Role Hierarchy and Separation → Single Points of Failure → …
  • Pattern Protocol has privileged authorities (admin
  • SKILL.md covers Step 1: Privilege Inventory, Step 2: Role Hierarchy and…, Step 3: Single Points of Failure and Step 4: External Governance…, plus 4 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Centralization Risk is an agent skill from PlamenTSV/plamen. Trigger Pattern Protocol has privileged authorities (admin, operator, upgrade authority, governance) - Inject Into Breadth agents (optional), depth-state-trace

Its SKILL.md is about 3k 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 Stellar and WebAssembly. The repository describes itself as: Autonomous Web3 security audit agent for Claude Code. The licence is MIT.

When your agent uses it

  • Pattern Protocol has privileged authorities (admin
  • Upgrade authority
  • Governance) - Inject Into Breadth agents (optional)
  • Depth-state-trace

Example prompts

  • “/centralization-risk”

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. Privilege Inventory
  2. Role Hierarchy and Separation
  3. Single Points of Failure
  4. External Governance Dependencies
  5. Emergency Powers
  6. Authority Revocation Assessment

What it can do on your machine

Read from SKILL.md and the folder at commit 795962b. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are markdown).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Centralization Risk loads about 3k tokens when it runs. Until then it costs about 45 tokens; SKILL.md has 1,265 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~45
When it runs · the whole SKILL.md, loaded when a task matches
~3k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from PlamenTSV/plamen at commit 795962b, republished under its MIT licence (© PlamenTSV). 1,265 words, ~3,025 tokens.

Download SKILL.mdSave it as .claude/skills/centralization-risk/SKILL.md (or your agent's skills folder).
name
centralization-risk
description
Trigger Pattern Protocol has privileged authorities (admin, operator, upgrade authority, governance) - Inject Into Breadth agents (optional), depth-state-trace

CENTRALIZATION_RISK Skill (Soroban)

Trigger Pattern: Protocol has privileged authorities (admin, operator, upgrade authority, governance, multisig) Inject Into: Breadth agents (optional), depth-state-trace Finding prefix: [CR-N] Rules referenced: R2, R6, R9, R10, R13 Required: NO (recommended when protocol has 3+ distinct privileged roles)

Covers: single points of failure, privilege escalation, contract upgrade risk, external governance dependencies, emergency powers. On Soroban, centralization risk has unique dimensions: update_current_contract_wasm() allows full contract replacement by the admin, Instance storage holds admin Address values (opaque — could be an account or another contract), no role-based modifiers like EVM's onlyOwner exist so access control is fully custom, and the Address type abstracts over both user accounts and contracts which can obscure who really controls a privilege.


Step 1: Privilege Inventory

Enumerate ALL privileged functions by scanning for require_auth calls against stored admin/operator addresses:

#FunctionContractAuthority Field (storage key)What It ControlsImpact If Abused
1{fn_name}{contract}{Instance key e.g. "Admin"}{parameter/state}{worst case}

Soroban authority patterns to scan for:

  • admin.require_auth() — caller must be the stored admin address
  • let admin: Address = e.storage().instance().get(&DataKey::Admin).unwrap() then admin.require_auth()
  • operator.require_auth() — operator/keeper patterns stored in Instance or Persistent storage
  • e.current_contract_address().require_auth() — contract authorizing itself (sub-contract call patterns)
  • update_current_contract_wasm(new_wasm_hash) — upgrades the contract bytecode; whoever calls this controls all logic
  • Multi-sig address: an Address that resolves to a Stellar multisig account (threshold signatures) vs a single keypair
  • DAO/governance: an Address resolving to a Soroban governance contract

Categorize each by impact:

  • FUND_CONTROL: Can move, lock, or drain contract token balances or native XLM
  • PARAMETER_CONTROL: Can change fees, rates, thresholds, delays stored in Instance/Persistent storage
  • OPERATIONAL_CONTROL: Can pause, unpause, add/remove pools/markets/validators
  • UPGRADE_CONTROL: Can replace contract bytecode via update_current_contract_wasm()
  • MINT_CONTROL: Can mint new tokens via SAC admin or custom token admin authority

Step 2: Role Hierarchy and Separation

Map the role hierarchy:

RoleStored In (storage type + key)Granted ByCan Grant Others?Revocable?Timelock?
{role}{Instance/Persistent, key}{granting function}YES/NOYES/NOYES/NO ({mechanism})
Soroban-Specific Hierarchy Checks
  • Are FUND_CONTROL and UPGRADE_CONTROL held by different Address values?
  • Does any single Address have both PARAMETER_CONTROL and FUND_CONTROL?
  • Is the upgrade authority a multisig Stellar account (M-of-N threshold) rather than a single keypair?
  • Are authority transfers behind timelocks (time-locked admin proposal pattern)?
  • Can roles be revoked? Does revocation require the role-holder's cooperation?
  • Is there a two-step authority transfer? (propose new admin → new admin accepts)
  • Is the admin Address opaque — could it be a contract whose own admin is unknown?
Contract Upgrade Authority Analysis (CRITICAL)
ContractUpgrade GuardTypeImmutable?Risk Level
{contract_id}update_current_contract_wasm caller checkEOA / Multisig / DAO-contract / NoneYES/NO{assessment}

Risk levels:

  • No upgrade function present: Immutable. Verify by confirming update_current_contract_wasm is absent.
  • DAO/governance contract: Low risk if governance has sufficient participation and timelock.
  • Stellar multisig (M-of-N, M >= 3): Low-Medium risk. Check threshold and signer count.
  • Stellar multisig (2-of-3 or lower): Medium risk. Two compromised signers replace the contract.
  • Single keypair: CRITICAL risk. One compromised key replaces all contract logic.

Step 3: Single Points of Failure

For each privileged role:

RoleKey Compromise ImpactMitigationResidual Risk
{role}{what attacker can do}{multisig? timelock? immutable?}{what remains}
Soroban-Specific SPOF Analysis
RiskDescriptionSeverity
Upgrade authority compromiseAttacker replaces contract wasm with malicious version. ALL contract state and funds at risk.CRITICAL if single keypair, HIGH if multisig without timelock
Admin address is a contractThe admin Address resolves to another contract. That contract's own upgrade path is now the real privilege escalation vector.Severity inherits from the outer contract's upgrade risk
Single admin with FUND_CONTROLAdmin can transfer all tokens out of the contract.HIGH if single keypair, MEDIUM if multisig
No admin rotation functionAdmin keypair loss = permanent loss of all admin capabilities.HIGH — protocol becomes ungovernable
SAC admin authority activeStellar Asset Contract admin can freeze/clawback user balances for the token.HIGH if used in user-facing token flows

Severity assessment:

  • Single keypair with FUND_CONTROL or UPGRADE_CONTROL → HIGH centralization risk (minimum)
  • Multisig with FUND_CONTROL but no timelock → MEDIUM
  • Multisig + timelock with FUND_CONTROL → LOW (but document)
  • No upgrade function + no privileged fund movement → INFO

Step 4: External Governance Dependencies

Identify parameters or behaviors controlled by EXTERNAL governance:

DependencyExternal EntityWhat They ControlProtocol Impact If ChangedNotification?
{dep}{entity}{parameter/behavior}{impact on this protocol}YES/NO

Soroban-specific external governance:

  • Oracle contract governance: Can upgrade oracle logic or change price feeds; protocol may lack staleness protection
  • SAC (Stellar Asset Contract): Issuer controls freeze/clawback; SAC upgrades via Stellar protocol upgrades
  • Stellar protocol upgrades: Validator quorum can upgrade the Soroban host environment, changing resource costs, semantics, or adding new host functions
  • XLM network fee market: Base reserve and minimum fee changes affect contract operation costs
  • External contract dependencies: Any contract this protocol calls via invoke_contract — if that contract upgrades, behavior changes

Check:

  • Can external governance changes break protocol invariants?
  • Does the protocol verify called contract IDs? (If not, an external upgrade = arbitrary behavior change)
  • Are external governance timelines aligned with this protocol's operational timelines?
  • Does the protocol have circuit breakers for unexpected external changes?

Show full SKILL.md (446 more words)Show less

Step 5: Emergency Powers

Document emergency/pause capabilities:

Emergency FunctionWho Can CallWhat It AffectsRecovery PathTime to Recover
{function}{authority}{scope}{how to resume}{estimate}
Soroban Emergency Patterns
PatternDescriptionRisk
Global pause flagInstance storage has paused: bool. All user functions check it.Standard — check: can users emergency-withdraw when paused?
SAC freezeSAC admin freezes user balances for the protocol's token.HIGH if no unfreeze path independent of admin
Admin-only withdrawalAdmin can drain contract token accounts.CRITICAL if single keypair
TTL expiry as implicit pauseContract Instance TTL expires; all instance().get() calls panic. Protocol effectively pauses if not extended.MEDIUM — check: who can call extend_ttl() and under what conditions?

Check:

  • Can pausing strand user funds permanently? (Rule 9 — stranded asset severity floor: minimum MEDIUM)
  • Is there a maximum pause duration enforced on-chain?
  • Can users exit during pause (emergency withdraw function)?
  • If Instance storage TTL expires: does the contract degrade gracefully or panic?
  • If no exit during pause → apply Rule 9

Step 6: Authority Revocation Assessment

For each authority type, assess revocation status and path:

AuthorityCurrent StateRevocation PathShould Be Revoked?Risk If Not Revoked
Upgrade authority{active/none — function present?}Remove update_current_contract_wasm call or gate to Address::zero(){assessment}{risk level}
Admin (FUND_CONTROL){active}Two-step transfer to burn address or DAO{assessment}{risk level}
SAC admin/freeze{active/none}Stellar issuer account deauthorization{assessment}{risk level}
Operator/keeper{active}Setter function to zero/None{assessment}{risk level}

Rule 13 check: Is the authority retention documented? If the protocol claims to be "decentralized" or "trustless" but retains upgrade or fund-control authority, apply the 5-question test:

  1. Who is harmed by this authority retention?
  2. Can affected users avoid the harm?
  3. Is the authority retention documented in protocol docs?
  4. Could the protocol achieve the same goal without this authority?
  5. Does the protocol fulfill its stated trustlessness completely?

Output Schema

markdown
## Finding [CR-N]: Title

**Verdict**: CONFIRMED / PARTIAL / REFUTED
**Step Execution**: check1,2,3,4,5,6 | skip(reason) | uncertain
**Severity**: Critical/High/Medium/Low/Info
**Location**: contract name or function name

**Centralization Type**: FUND_CONTROL / PARAMETER_CONTROL / OPERATIONAL_CONTROL / UPGRADE_CONTROL / MINT_CONTROL
**Affected Role**: {authority_name} (Address type: keypair / multisig / contract)
**Mitigation Present**: {Stellar multisig / DAO contract / timelock / Immutable / NONE}

**Description**: What is wrong
**Impact**: What can happen if authority is compromised or acts maliciously
**Recommendation**: How to mitigate (add timelock, remove upgrade function, use multisig, separate roles)

Step Execution Checklist (MANDATORY)

StepRequiredCompleted?Notes
1. Privilege Inventory (all functions with require_auth)YES
2. Role Hierarchy and SeparationYES
3. Single Points of Failure (per role)YES
4. External Governance DependenciesYES
5. Emergency Powers and Recovery PathsYES
6. Authority Revocation AssessmentYES
Cross-Reference Markers

After Step 1: Cross-reference with auth validation — is require_auth() called on the stored admin, or on the transaction signer directly (bypassing stored admin check)?

After Step 2: If upgrade authority is a single keypair → immediate finding (minimum HIGH).

After Step 3: If admin Address is itself a contract, trace that contract's upgrade path — severity inherits.

After Step 5: If no emergency withdraw exists AND pause is possible → Rule 9 stranded asset finding.

After Step 6: If protocol claims trustlessness but retains mutable authorities → Rule 13 anti-normalization finding.

© PlamenTSV, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in agents/skills/soroban/centralization-risk of PlamenTSV/plamen.

Open the folder on GitHubat commit 795962b

Compare with similar skills

Centralization Risk 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.

Centralization Risk compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Centralization Risk this skillPlamenTSV/plamen303—~3kAutomated safety check: PassMIT
Smart Contract Upgrade Governancesickn33/agentic-awesome-skills47k1 repos~1.4kAutomated safety check: PassMIT
Soroban Contract Auditsickn33/agentic-awesome-skills47k1 repos~1.4kAutomated safety check: PassMIT
Soroban Liquidity Poolsickn33/agentic-awesome-skills47k1 repos~1.3kAutomated safety check: PassMIT
Soroban Storage Ttl Lifecyclesickn33/agentic-awesome-skills47k1 repos~1.3kAutomated safety check: PassMIT
Soroban Token Mintersickn33/agentic-awesome-skills47k1 repos~1.3kAutomated safety check: PassMIT

Similar skills

  • Smart Contract Upgrade Governance

    sickn33/agentic-awesome-skills

    Soroban WASM upgrade governance register: executable bytecode hash, timelocked migration delays, and multi-sig authorization quorum.

    47k GitHub starsUsed in 1 repo~1.4k tokens
    Backend & APIsAuto-check passed
  • Soroban Contract Audit

    sickn33/agentic-awesome-skills

    Soroban smart contract security audit register: authorization checks, panic pathways, integer overflows, and storage footprint verification for Stellar.

    47k GitHub starsUsed in 1 repo~1.4k tokens
    SecurityAuto-check passed
  • Soroban Liquidity Pool

    sickn33/agentic-awesome-skills

    Automated market maker liquidity pool register: constant-product invariant curves, swap fee tiers, and LP token shares for Soroban DeFi.

    47k GitHub starsUsed in 1 repo~1.3k tokens
    SecurityAuto-check passed
  • Soroban Storage Ttl Lifecycle

    sickn33/agentic-awesome-skills

    Soroban ledger state rent and TTL extension register: live state tracking, bump thresholds, rent fee reserves, and archive boundaries.

    47k GitHub starsUsed in 1 repo~1.3k tokens
    SecurityAuto-check passed
  • Soroban Token Minter

    sickn33/agentic-awesome-skills

    Soroban SEP-41 token contract architecture register: admin control, supply caps, metadata standard, and transfer event emissions on Stellar.

    47k GitHub starsUsed in 1 repo~1.3k tokens
    SecurityAuto-check passed
  • Stellar Dev

    VelaPayments/vela-payments

    End-to-end Stellar development playbook. An agent skill from VelaPayments/vela-payments.

    131 GitHub stars~1.8k tokensUpdated 2 days ago
    Backend & APIsAuto-check passed

More from PlamenTSV/plamen

All 87 skills in this repo
  • Audit Prep

    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…

    303 GitHub stars~3.7k tokensUpdated 12 days ago
    Auto-check passed
  • Verification Protocol

    PlamenTSV/plamen

    Trigger Pattern Always (used by all verifier agents) - Inject Into security-verifier agents (Phase 5)

    303 GitHub stars~3.5k tokensUpdated 12 days ago
    Auto-check passed
  • Ability Analysis

    PlamenTSV/plamen

    Trigger Pattern Always (Aptos Move) - foundational security check - Inject Into Breadth agents, depth agents

    303 GitHub stars~3.3k tokensUpdated 12 days ago
    Auto-check passed
  • Ability Analysis

    PlamenTSV/plamen

    Trigger Pattern Always (Sui Move) -- foundational security check - Inject Into Breadth agents, depth agents

    303 GitHub stars~3.2k tokensUpdated 12 days ago
    Auto-check passed
  • Account Lifecycle

    PlamenTSV/plamen

    Trigger Pattern ACCOUNTCLOSING flag detected (close/CloseAccount usage) - Inject Into Breadth agents, depth agents

    303 GitHub stars~1.2k tokensUpdated 12 days ago
    Auto-check passed
  • Account Validation

    PlamenTSV/plamen

    Trigger Pattern Always required for Solana audits - Inject Into Breadth agents, depth agents

    303 GitHub stars~1.7k tokensUpdated 12 days ago
    Auto-check passed

Categories

Questions about Centralization Risk

What does Centralization Risk do?

Trigger Pattern Protocol has privileged authorities (admin, operator, upgrade authority, governance) - Inject Into Breadth agents (optional), depth-state-trace. Centralization Risk is an agent skill from PlamenTSV/plamen.

When should I use Centralization Risk?

Centralization Risk fits situations like: pattern Protocol has privileged authorities (admin; upgrade authority; governance) - Inject Into Breadth agents (optional); depth-state-trace.

How do I install Centralization Risk in Claude Code?

Run `npx skills add PlamenTSV/plamen --skill centralization-risk -a claude-code`. Or copy the skill folder (agents/skills/soroban/centralization-risk in PlamenTSV/plamen) into .claude/skills/centralization-risk in your project. Claude Code loads it when a task matches its description.

How do I install Centralization Risk in Codex?

Run `npx skills add PlamenTSV/plamen --skill centralization-risk -a codex`. Or copy the skill folder (agents/skills/soroban/centralization-risk in PlamenTSV/plamen) into .agents/skills/centralization-risk in your project. Codex loads it when a task matches its description.

Can I use Centralization Risk in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add PlamenTSV/plamen --skill centralization-risk -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/centralization-risk, .gemini/skills/centralization-risk, .github/skills/centralization-risk and .opencode/skills/centralization-risk in your project.

What does Centralization Risk need to run?

SKILL.md names no scripts, command-line tools or credentials: Centralization Risk is instructions for the agent only.

Does Centralization Risk access the network?

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.

Is Centralization Risk safe to install?

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.

What licence does Centralization Risk use?

Centralization Risk is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Centralization Risk use?

About 3k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Centralization Risk?

Skills that share tags, products or a category with Centralization Risk: 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.

Who maintains Centralization Risk?

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.