claude-force: Skill for Claude Code

.claude/skills/secrets-management-production/SKILL.md

secrets-management-production is a skill for Claude Code from khanh-vu/claude-force. It costs 0 tokens per session (3,161 once invoked), scanned A, original, MIT.

Production guidance for storing and retrieving cryptocurrency trading secrets through AWS Secrets Manager, a cloud service for protected credentials.

In plain words
What is it for?
Use it to fetch secrets from AWS, cache them for a limited time, and force a fresh retrieval when needed.
Why use it?
It keeps sensitive values out of application code and supports cached retrieval with optional refreshes.

Skill for Claude Code

Written for Claude Code: installed under .claude/. Also seen: positional $N argument.

This is khanh-vu/claude-force's own configuration. It tells Claude Code how to work on claude-force itself, so it is not a mod to install elsewhere. Copy it as a starting point and replace the rules that are about this project. Everything claude-force configures →

Reuse

Borrowing it

Nothing to install: this file belongs to khanh-vu/claude-force. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.

Copy the file
curl -O https://raw.githubusercontent.com/khanh-vu/claude-force/main/.claude/skills/secrets-management-production/SKILL.md
Clone the repo
git clone --depth 1 https://github.com/khanh-vu/claude-force

Made for: Claude Code.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for secrets-management-production

README.md
[![agentmods](https://agentmods.dev/badge/skills/khanh-vu/claude-force/secrets-management-production/github.svg)](https://agentmods.dev/skills/khanh-vu/claude-force/secrets-management-production)
Your own site
<a href="https://agentmods.dev/skills/khanh-vu/claude-force/secrets-management-production"><img src="https://agentmods.dev/badge/skills/khanh-vu/claude-force/secrets-management-production/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for secrets-management-production

Your own site · 80×15
<a href="https://agentmods.dev/skills/khanh-vu/claude-force/secrets-management-production"><img src="https://agentmods.dev/badge/skills/khanh-vu/claude-force/secrets-management-production.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 0 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 3,161 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00000 $0.03161
Opus 5 $0.00000 $0.01580
Sonnet 5 $0.00000 $0.00632
Haiku 4.5 $0.00000 $0.00316

Measured 12d ago against content hash a7a0eded4930, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-12, from the pricing page.

Security

Grade A, and why

secrets-management-production scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 12d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

.claude/skills/secrets-management-production/SKILL.md · 464 lines

How it starts

The opening of the file, as written. The whole thing — 464 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Secrets Management Production

Production-grade secrets management for cryptocurrency trading systems.

AWS Secrets Manager Integration

import boto3
import json
from typing import Dict, Optional
from functools import lru_cache
from datetime import datetime, timedelta

class SecretsManager:
    """
    AWS Secrets Manager integration for production secrets
    NEVER use python-dotenv or environment variables in production!
    """

    def __init__(
        self,
        region_name: str = 'us-east-1',
        cache_ttl_seconds: int = 300  # 5 minutes
    ):
        self.client = boto3.client('secretsmanager', region_name=region_name)
        self.cache_ttl = timedelta(seconds=cache_ttl_seconds)
        self._cache = {}
        self._cache_timestamps = {}

    async def get_secret(self, secret_name: str, force_refresh: bool = False) -> Dict:
        """
        Retrieve secret from AWS Secrets Manager with local caching

        Args:
            secret_name: Name of secret in AWS Secrets Manager
            force_refresh: Bypass cache and fetch fresh secret

        Returns:
            Secret data as dictionary
        """
        # Check cache first (unless force refresh)
        if not force_refresh and secret_name in self._cache:
            cache_age = datetime.utcnow() - self._cache_timestamps[secret_name]

            if cache_age < self.cache_ttl:
                logger.debug(f"Using cached secret: {secret_name}")
                return self._cache[secret_name]

        # Fetch from AWS
        try:
            logger.info(f"Fetching secret from AWS: {secret_name}")

            response = self.client.get_secret_value(SecretId=secret_name)

            # Parse secret
            if 'SecretString' in response:
                secret_data = json.loads(response['SecretString'])
            else:
                secret_data = json.loads(response['SecretBinary'].decode('utf-8'))

            # Update cache
            self._cache[secret_name] = secret_data
            self._cache_timestamps[secret_name] = datetime.utcnow()

            return secret_data

        except self.client.exceptions.ResourceNotFoundException:
            logger.error(f"Secret not found: {secret_name}")
            raise
        except Exception as e:
            logger.error(f"Failed to retrieve secret {secret_name}: {e}")
            raise

    async def get_exchange_credentials(self, exchange_id: str) -> Dict:
        """
        Retrieve exchange API credentials

        Secret format in AWS Secrets Manager:
        {
            "api_key": "...",
            "secret": "...",
            "passphrase": "...",  // Optional (for some exchanges)
            "subaccount": "..."   // Optional
        }
        """
        secret_name = f"trading-bot/{exchange_id}/credentials"
        return await self.get_secret(secret_name)

    async def get_telegram_token(self) -> str:
        """Retrieve Telegram bot token"""
        secret = await self.get_secret("trading-bot/telegram/token")
        return secret['token']

    async def get_database_credentials(self) -> Dict:
        """Retrieve database credentials"""
        return await self.get_secret("trading-bot/database/credentials")

    async def rotate_exchange_credentials(
        self,
        exchange_id: str,
        new_api_key: str,
        new_secret: str,
        new_passphrase: Optional[str] = None
    ):
        """
        Rotate exchange API credentials

        Steps:
        1. Create new credentials on exchange
        2. Update AWS Secrets Manager
        3. Wait for cache expiry or force refresh
        4. Revoke old credentials on exchange
        """
        secret_name = f"trading-bot/{exchange_id}/credentials"

        # Prepare new secret
        new_secret_data = {
            "api_key": new_api_key,
            "secret": new_secret,
        }

        if new_passphrase:
            new_secret_data["passphrase"] = new_passphrase

        # Update secret in AWS
        try:
            self.client.update_secret(
                SecretId=secret_name,
                SecretString=json.dumps(new_secret_data)
            )

            logger.info(f"Rotated credentials for {exchange_id}")

            # Force cache refresh
            await self.get_secret(secret_name, force_refresh=True)

        except Exception as e:
            logger.error(f"Failed to rotate credentials for {exchange_id}: {e}")
            raise

Read the full file on GitHub · 464 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 12d ago First seen · 464 lines · 0 tokens per session scan A a7a0eded4930

Subscribe to this mod's changes

secrets-management-production is a skill published in the GitHub repository khanh-vu/claude-force (5 stars, last pushed 9mo ago), licensed MIT. It costs nothing until one of its globs matches a file; then it loads 3,161 tokens. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.

Related

Other skills, from other repositories

sector-rotation

An analysis framework for comparing industries in the Chinese A-share stock market, using business conditions, price momentum, valuation, and money flows. It produces rankings and higher- or lower-allocation suggestions.

HKUDS/Vibe-Trading · 39 tokens

strategy-pivot-designer

Detect backtest iteration stagnation and generate structurally different strategy pivot proposals when parameter tuning reaches a local optimum.

tradermonty/claude-trading-skills · 28 tokens

twitter-reader

Read Twitter/X for financial research using opencli (read-only). Use this skill whenever the user wants to read their Twitter feed, search for financial tweets, view bookmarks, look up user profiles, or gather market sentiment from Twitter/X. Triggers include: "check my feed", "search Twitter for", "show my…

himself65/finance-skills · 161 tokens

chenhao-limit-up

A framework for judging Chinese A-share stocks that have reached the daily price-rise limit, using market mood, sector leadership, and trading momentum.

questflowai/investorskills · 44 tokens

furusato

A Japanese hometown-tax donation manager for furusato nozei, a system where donations to municipalities can qualify for an income-tax or local-tax deduction. It reads donation receipts, stores donation records, and calculates deduction limits.

kazukinagata/shinkoku · 102 tokens

reading-receipt

An image-reading workflow for extracting structured information from receipts, invoices, and hometown-tax donation certificates. It can first extract text from PDFs and otherwise read their images.

kazukinagata/shinkoku · 64 tokens