{"id":34605954,"url":"https://github.com/forest6511/secretctl","last_synced_at":"2026-05-01T08:33:07.726Z","repository":{"id":327131018,"uuid":"1106753437","full_name":"forest6511/secretctl","owner":"forest6511","description":"The simplest AI-ready secrets manager. Local-first, single-binary CLI \u0026 Desktop app with MCP integration. Never expose secrets to AI agents.","archived":false,"fork":false,"pushed_at":"2026-01-20T02:20:48.000Z","size":17906,"stargazers_count":1,"open_issues_count":3,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-20T09:11:31.594Z","etag":null,"topics":["aes-256","ai-agents","claude-code","cli","credential-management","developer-tools","devtools","dotenv","encryption","environment-variables","golang","local-first","mcp","password-manager","secrets-management","security"],"latest_commit_sha":null,"homepage":"https://forest6511.github.io/secretctl/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/forest6511.png","metadata":{"files":{"readme":"README-ja.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"forest6511"}},"created_at":"2025-11-29T21:48:08.000Z","updated_at":"2026-01-20T02:20:49.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/forest6511/secretctl","commit_stats":null,"previous_names":["forest6511/secretctl"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/forest6511/secretctl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/forest6511%2Fsecretctl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/forest6511%2Fsecretctl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/forest6511%2Fsecretctl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/forest6511%2Fsecretctl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/forest6511","download_url":"https://codeload.github.com/forest6511/secretctl/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/forest6511%2Fsecretctl/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32490811,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"online","status_checked_at":"2026-05-01T02:00:05.856Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aes-256","ai-agents","claude-code","cli","credential-management","developer-tools","devtools","dotenv","encryption","environment-variables","golang","local-first","mcp","password-manager","secrets-management","security"],"created_at":"2025-12-24T13:45:37.215Z","updated_at":"2026-05-01T08:33:07.720Z","avatar_url":"https://github.com/forest6511.png","language":"Go","funding_links":["https://github.com/sponsors/forest6511"],"categories":[],"sub_categories":[],"readme":"# secretctl\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"README.md\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/🇺🇸_English-blue\" alt=\"English\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"README-ja.md\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/🇯🇵_日本語-green\" alt=\"日本語\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n**AIチャットにAPIキーを貼り付けるのはやめましょう。**\n\n`sk-proj-xxx`をClaude Codeに貼り付けると、そのシークレットは会話履歴、Anthropicのログ、そしてプロンプトインジェクション攻撃に晒される可能性があります。\n\nsecretctlがこれを解決します。AIはコマンド結果を取得しますが、シークレットの値は決して見えません。\n\n[![Go Version](https://img.shields.io/badge/Go-1.24+-00ADD8?style=flat\u0026logo=go)](https://go.dev/)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE)\n[![Documentation](https://img.shields.io/badge/docs-website-blue)](https://forest6511.github.io/secretctl/ja/)\n[![Codecov](https://codecov.io/gh/forest6511/secretctl/branch/main/graph/badge.svg)](https://codecov.io/gh/forest6511/secretctl)\n\n![secretctl demo](docs/assets/demo.gif)\n\n---\n\n## 問題\n\n毎日、開発者がAIコーディングアシスタントにシークレットを貼り付けています：\n\n```\nあなた: 「このAWSエラーをデバッグして」\nあなた: 「設定はこれ: AWS_ACCESS_KEY_ID=AKIA...」\n```\n\n**これはセキュリティインシデントが起きるのを待っているようなものです。**\n\n- 会話履歴に残るシークレット\n- クラウドログに残るシークレット\n- プロンプトインジェクションに晒されるシークレット\n- ローテーションや失効が不可能\n\n## 解決策\n\nsecretctlはシークレットを環境変数として注入します。AIはコマンドを実行して結果を見ますが、**実際の認証情報は決して見えません**。\n\n- **シングルバイナリ** — サーバー不要、設定不要、サブスクリプション不要\n- **ローカルファースト** — シークレットはマシンから出ません\n- **MCP統合** — Claude Codeですぐに使える\n- **多層防御** — AES-256-GCM + Argon2id + 出力サニタイズ\n\n```\n# これだけで完了。\nsecretctl init\nsecretctl set API_KEY\nsecretctl get API_KEY\n```\n\n### なぜローカルファースト＆AIセーフ？\n\n1. **あなたのシークレット、あなたのマシン** — クラウド同期なし、第三者サーバーなし、サブスクリプション料金なし。認証情報はあなたのデバイスに留まります。\n\n2. **AIエージェントに平文は不要** — Claudeが`aws s3 ls`を実行する時、必要なのは*結果*であって、AWSキーではありません。secretctlはコマンドに直接認証情報を注入します—AIはシークレットを見ることがありません。\n\n3. **多層防御** — AES-256-GCM暗号化、Argon2idキー導出、MCPポリシー制御、自動出力サニタイズ。単一障害点ではなく、複数のレイヤーで保護。\n\n```mermaid\nflowchart LR\n    subgraph Flow[\"仕組み\"]\n        AI[\"🤖 AIエージェント\u003cbr/\u003e(Claude)\"]\n        MCP[\"🔐 secretctl\u003cbr/\u003eMCPサーバー\"]\n        CMD[\"⚡ コマンド\u003cbr/\u003e(aws等)\"]\n\n        AI --\u003e|\"1. aws s3 ls実行\u003cbr/\u003eaws/*で\"| MCP\n        MCP --\u003e|\"2. シークレットを\u003cbr/\u003e環境変数として注入\"| CMD\n        CMD --\u003e|\"3. 実行\"| MCP\n        MCP --\u003e|\"4. サニタイズ済み出力\u003cbr/\u003e[REDACTED]\"| AI\n    end\n\n    AI ~~~ NOTE[\"✓ コマンド結果を取得\u003cbr/\u003e✗ シークレット値は見えない\"]\n```\n\n## インストール\n\n### ソースから\n\n```bash\n# Go 1.24+ が必要\ngit clone https://github.com/forest6511/secretctl.git\ncd secretctl\ngo build -o secretctl ./cmd/secretctl\n```\n\n### バイナリリリース\n\n最新リリースは [GitHub Releases](https://github.com/forest6511/secretctl/releases) からダウンロードできます。\n\n**CLI:**\n- `secretctl-linux-amd64` — Linux (x86_64)\n- `secretctl-linux-arm64` — Linux (ARM64)\n- `secretctl-darwin-amd64` — macOS (Intel)\n- `secretctl-darwin-arm64` — macOS (Apple Silicon)\n- `secretctl-windows-amd64.exe` — Windows (x86_64)\n\n**デスクトップアプリ:**\n- `secretctl-desktop-macos` — macOS (Universal)\n- `secretctl-desktop-linux` — Linux (AppImage)\n- `secretctl-desktop-windows.exe` — Windows (Installer)\n\n#### ダウンロードの検証\n\n```bash\n# checksums.txt をダウンロードして検証\nsha256sum -c checksums.txt\n```\n\n#### macOS: Gatekeeper警告\n\nmacOSは署名されていないアプリに対してセキュリティ警告を表示することがあります。許可するには：\n\n```bash\n# オプション1: 隔離属性を削除\nxattr -d com.apple.quarantine secretctl-darwin-arm64\n\n# オプション2: アプリを右クリックして「開く」を選択\n```\n\n#### Windows: SmartScreen警告\n\nWindows SmartScreenが警告を表示することがあります。許可するには：\n\n1. 「詳細情報」をクリック\n2. 「実行」をクリック\n\n## クイックスタート\n\n### 1. Vaultを初期化\n\n```bash\nsecretctl init\n# マスターパスワードを入力（8文字以上）\n```\n\n### 2. シークレットを保存\n\n```bash\necho \"sk-your-api-key\" | secretctl set OPENAI_API_KEY\n```\n\n### 3. シークレットを取得\n\n```bash\nsecretctl get OPENAI_API_KEY\n```\n\n### 4. すべてのシークレットを一覧表示\n\n```bash\nsecretctl list\n```\n\n### 5. シークレットを削除\n\n```bash\nsecretctl delete OPENAI_API_KEY\n```\n\n## 機能\n\n### コア機能\n\n- **AES-256-GCM暗号化** — 業界標準の認証付き暗号化\n- **Argon2idキー導出** — ブルートフォース攻撃に対するメモリハード保護\n- **SQLiteストレージ** — 信頼性が高く、ポータブル、外部依存なし\n- **監査ログ** — 改ざん検出のためのHMACチェーン付きログ\n- **AIセーフ設計** — MCP統合でAIエージェントに平文シークレットを公開しない\n\n### メタデータサポート\n\n```bash\n# シークレットにメモとタグを追加\nsecretctl set DB_PASSWORD --notes=\"本番データベース\" --tags=\"prod,db\"\n\n# URL参照を追加\nsecretctl set API_KEY --url=\"https://console.example.com/api-keys\"\n\n# 有効期限を設定\nsecretctl set TEMP_TOKEN --expires=\"30d\"\n\n# タグでフィルター\nsecretctl list --tag=prod\n\n# 期限切れ間近のシークレットを表示\nsecretctl list --expiring=7d\n\n# フルメタデータを表示\nsecretctl get API_KEY --show-metadata\n```\n\n### シークレットでコマンド実行\n\nシェル履歴に公開せずにシークレットを環境変数として注入：\n\n```bash\n# 単一のシークレットでコマンド実行\nsecretctl run -k API_KEY -- curl -H \"Authorization: Bearer $API_KEY\" https://api.example.com\n\n# ワイルドカードで複数のシークレットを注入\n# パターン aws/* は aws/access_key, aws/secret_key にマッチ（単一レベル）\nsecretctl run -k \"aws/*\" -- aws s3 ls\n\n# 出力は自動的にサニタイズされシークレット漏洩を防止\nsecretctl run -k DB_PASSWORD -- ./deploy.sh\n# deploy.shがDB_PASSWORDを出力すると [REDACTED:DB_PASSWORD] として表示\n\n# タイムアウトとプレフィックス付き\nsecretctl run -k API_KEY --timeout=30s --env-prefix=APP_ -- ./app\n```\n\n\u003e **注意**: 出力サニタイズは完全一致を使用します。エンコードされたシークレット（Base64、hex）や部分一致は検出されません。\n\n### シークレットのエクスポート\n\nDocker、CI/CD、その他のツールで使用するためにシークレットをエクスポート：\n\n```bash\n# .envファイルとしてエクスポート（デフォルト）\nsecretctl export -o .env\n\n# 特定のキーをJSONとしてエクスポート\nsecretctl export --format=json -k \"db/*\" -o config.json\n\n# パイプ用にstdoutにエクスポート\nsecretctl export --format=json | jq '.DB_HOST'\n```\n\n### シークレットのインポート\n\n既存の`.env`またはJSONファイルからシークレットをインポート：\n\n```bash\n# .envファイルからインポート\nsecretctl import .env\n\n# JSONファイルからインポート\nsecretctl import config.json\n\n# インポート内容をプレビュー（ドライラン）\nsecretctl import .env --dry-run\n\n# 競合処理: スキップ、上書き、またはエラー\nsecretctl import .env --on-conflict=skip\nsecretctl import .env --on-conflict=overwrite\n```\n\n### パスワード生成\n\n安全なランダムパスワードを生成：\n\n```bash\n# 24文字のパスワードを生成（デフォルト）\nsecretctl generate\n\n# 記号なしの32文字パスワードを生成\nsecretctl generate -l 32 --no-symbols\n\n# 複数のパスワードを生成\nsecretctl generate -n 5\n```\n\n### バックアップとリストア\n\n暗号化バックアップを作成しVaultをリストア：\n\n```bash\n# 暗号化バックアップを作成\nsecretctl backup -o vault-backup.enc\n\n# 監査ログ付きでバックアップを作成\nsecretctl backup -o full-backup.enc --with-audit\n\n# バックアップの整合性を検証\nsecretctl restore vault-backup.enc --verify-only\n\n# 新しいVaultにリストア（まずドライラン）\nsecretctl restore vault-backup.enc --dry-run\n\n# 競合処理付きでリストア\nsecretctl restore vault-backup.enc --on-conflict=skip    # 既存キーをスキップ\nsecretctl restore vault-backup.enc --on-conflict=overwrite  # 既存を上書き\n\n# パスワードの代わりにキーファイルを使用（自動化用）\nsecretctl backup -o backup.enc --key-file=backup.key\nsecretctl restore backup.enc --key-file=backup.key\n```\n\n\u003e **セキュリティ**: バックアップは新しいソルトを使用したAES-256-GCMで暗号化されます。HMAC-SHA256整合性チェックで改ざんを検出します。\n\n### 監査ログ\n\n```bash\n# 最近の監査イベントを表示\nsecretctl audit list --limit=50\n\n# ログの整合性を検証\nsecretctl audit verify\n\n# 監査ログをエクスポート\nsecretctl audit export --format=csv -o audit.csv\n\n# 古いログを削除（まずプレビュー）\nsecretctl audit prune --older-than=12m --dry-run\n```\n\n### AIセーフアクセス\n\nsecretctlは**AIセーフアクセス**を実装しています — AIエージェントが平文シークレットを受け取ることがないセキュリティ原則です。\n\n従来のシークレットマネージャーがAIに直接認証情報を公開する可能性があるのとは異なり、secretctlは根本的に異なるアプローチを使用します：\n\n```mermaid\nflowchart LR\n    subgraph \"従来のアプローチ ❌\"\n        AI1[AIエージェント] --\u003e|\"シークレット取得\"| SM1[シークレットマネージャー]\n        SM1 --\u003e|\"平文: sk-xxx...\"| AI1\n    end\n\n    subgraph \"AIセーフアクセス ✅\"\n        AI2[AIエージェント] --\u003e|\"コマンド実行\"| SM2[secretctl]\n        SM2 --\u003e|\"環境変数注入\"| CMD[コマンド]\n        CMD --\u003e|\"サニタイズ済み出力\"| SM2\n        SM2 --\u003e|\"[REDACTED]\"| AI2\n    end\n```\n\nこれは1PasswordやHashiCorp Vaultなどの業界リーダーが使用する**「公開なしアクセス」**哲学に従っています。\n\n### AI統合（MCPサーバー）\n\nsecretctlにはClaude CodeなどのAIコーディングアシスタントとの安全な統合のためのMCPサーバーが含まれています：\n\n```bash\n# MCPサーバーを起動（SECRETCTL_PASSWORDが必要）\nSECRETCTL_PASSWORD=your-password secretctl mcp-server\n```\n\n**利用可能なMCPツール:**\n- `secret_list` — メタデータ付きでシークレットキーを一覧表示（値は公開されない）\n- `secret_exists` — メタデータ付きでシークレットの存在を確認\n- `secret_get_masked` — マスクされた値を取得（例：`****WXYZ`）\n- `secret_run` — 環境変数としてシークレットを注入してコマンド実行\n- `secret_list_fields` — マルチフィールドシークレットのフィールド名を一覧表示（値なし）\n- `secret_get_field` — 非機密フィールドの値のみ取得\n- `secret_run_with_bindings` — 事前定義された環境バインディングで実行\n\n**Claude Codeでの設定** (`~/.claude.json`):\n```json\n{\n  \"mcpServers\": {\n    \"secretctl\": {\n      \"command\": \"/path/to/secretctl\",\n      \"args\": [\"mcp-server\"],\n      \"env\": {\n        \"SECRETCTL_PASSWORD\": \"your-master-password\"\n      }\n    }\n  }\n}\n```\n\n**ポリシー設定** (`~/.secretctl/mcp-policy.yaml`):\n```yaml\nversion: 1\ndefault_action: deny\nallowed_commands:\n  - aws\n  - gcloud\n  - kubectl\n```\n\n\u003e **セキュリティ**: AIエージェントは平文シークレットを受け取りません。`secret_run`ツールはシークレットを環境変数として注入し、出力は自動的にサニタイズされます。\n\n### デスクトップアプリ\n\nsecretctlにはWails v2で構築されたネイティブデスクトップアプリケーションが含まれています：\n\n![secretctl Desktop App](docs/images/gui-screenshot.png)\n\n*テンプレート付きマルチフィールドシークレット（データベース、APIキー、ログイン、SSHキー）を表示するデスクトップアプリ*\n\n```bash\n# デスクトップアプリをビルド\ncd desktop \u0026\u0026 wails build\n\n# または開発モードで実行\ncd desktop \u0026\u0026 wails dev\n```\n\n**機能:**\n- ネイティブmacOS/Windows/Linuxアプリケーション\n- マスターパスワードでVaultを作成・アンロック\n- 完全なシークレットCRUD操作（作成、読取、更新、削除）\n- キーでシークレットを検索・フィルター\n- シークレット値をクリップボードにコピー（自動クリア付き）\n- メタデータサポート（URL、タグ、メモ）\n- パスワード表示切り替え\n- アイドルタイムアウト時の自動ロック\n- **監査ログビューア** — すべてのVaultアクティビティを表示・分析\n  - アクション、ソース、キー、日付範囲でフィルター\n  - 大量ログ用のページネーション\n  - チェーン整合性検証\n  - CSV/JSON形式でエクスポート\n  - 詳細ログエントリモーダル\n- モダンなReact + TypeScript + Tailwind CSSフロントエンド\n\n**開発:**\n```bash\n# E2Eテストを実行（Playwright）\ncd desktop/frontend\nnpm run test:e2e\n\n# ブラウザ表示付きで実行\nnpm run test:e2e:headed\n\n# Playwright UIで実行\nnpm run test:e2e:ui\n```\n\n## セキュリティ\n\nsecretctlはセキュリティを真剣に考えています：\n\n- **ゼロ知識設計** — マスターパスワードは保存・送信されません\n- **AES-256-GCM暗号化** — 業界標準の認証付き暗号化\n- **Argon2idキー導出** — ブルートフォースに対するメモリハード保護\n- **安全なファイルパーミッション** — Vaultファイルは0600パーミッションで作成\n- **ネットワークアクセスなし** — 完全オフライン動作\n- **改ざん検出ログ** — HMACチェーンでログ操作を検出\n- **出力サニタイズ** — コマンド出力でシークレットを自動リダクト\n\nセキュリティ脆弱性の報告については、[SECURITY.md](SECURITY.md)をご覧ください。\n\n## ドキュメント\n\n📚 **[完全なドキュメント](https://forest6511.github.io/secretctl/ja/)** — 入門、ガイド、リファレンス\n\n- [はじめに](https://forest6511.github.io/secretctl/ja/docs/getting-started/) - インストールとクイックスタート\n- [CLIガイド](https://forest6511.github.io/secretctl/ja/docs/guides/cli/) - コマンドライン使用法\n- [MCP統合](https://forest6511.github.io/secretctl/ja/docs/guides/mcp/) - AIエージェント統合\n- [デスクトップアプリ](https://forest6511.github.io/secretctl/ja/docs/guides/desktop/) - ネイティブアプリケーションガイド\n- [コントリビューションガイド](CONTRIBUTING.md)\n- [セキュリティポリシー](SECURITY.md)\n\n## ライセンス\n\nApache License 2.0 — 詳細は[LICENSE](LICENSE)をご覧ください。\n\n---\n\nシンプルさとセキュリティを重視する開発者のために心を込めて作りました。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fforest6511%2Fsecretctl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fforest6511%2Fsecretctl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fforest6511%2Fsecretctl/lists"}