Skip to content

Senpai-Sama7/check-please

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

65 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation


Python 3.10+ License: MIT Tests Self-Test Security Audit

Providers Interfaces Zero Dependencies* MCP Badge MCP Badge


The credential broker that other tools wish they were. While some projects (cough, OpenClaw, cough) think "security" means printing your API key to stdout and hoping for the best, we built session-authenticated, PBKDF2-encrypted, HMAC-verified, rate-limited, scoped, logged, and revocable credential management. You know β€” actual security.


  ╔══════════════════════════════════════════════════════════════╗
  β•‘                                                              β•‘
  β•‘   πŸ”  Encrypted vault (PBKDF2 Β· 200K iterations Β· HMAC)     β•‘
  β•‘   πŸ€–  AI agent broker (scoped Β· logged Β· revocable)         β•‘
  β•‘   πŸ”  16-provider audit pipeline (live API validation)       β•‘
  β•‘   πŸ–₯️  6 interfaces (CLI Β· TUI Β· Web Β· Desktop Β· API Β· MCP)  β•‘
  β•‘   πŸ›‘οΈ  Hostile security audit: PASSED                        β•‘
  β•‘                                                              β•‘
  β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•

⚑ 30-Second Setup

git clone https://github.com/Senpai-Sama7/check-please.git
cd check-please
./start.sh --web    # opens browser UI

That's it. No config files. No Docker. No 47-step setup guide. No "please install our custom CLI tool first."

πŸ’‘ Some tools require you to read a novel before you can validate a single key. We respect your time.


πŸ€– Connect Your AI Agent

Agent Command Setup Time
./start.sh --agent-env codex ~5s
MCP config (see below) ~15s
eval $(./start.sh --agent-export) ~5s
eval $(./start.sh --agent-export) ~5s
./start.sh --agent-env interpreter ~5s
HTTP API / env inject / MCP ~10s
πŸ“‹ Step 1: Set permissions (click to expand)

Create .check_please_agent_permissions.json in your project root:

{
  "allowed": [
    "OPENAI_API_KEY",
    "ANTHROPIC_API_KEY",
    "GITHUB_TOKEN"
  ],
  "token_ttl": "1h"
}
πŸ”Œ Step 2: Connect your agent (click to expand)

Claude Code (MCP): Add to ~/.claude/claude_desktop_config.json:

{
  "mcpServers": {
    "credentials": {
      "command": "python",
      "args": ["/absolute/path/to/check_please/agent_api.py", "--mcp"]
    }
  }
}

Any agent (4 options):

./start.sh --agent-env <command>          # inject env vars
eval $(./start.sh --agent-export)         # export to shell
./start.sh --agent-write-env /tmp/.env    # write .env file
./start.sh --agent-api                    # HTTP API + bearer token

πŸ”’ Scoped Permissions β€” Because "Allow All" Is Not a Security Model

Unlike certain tools that give agents a skeleton key to your entire .env and call it a feature...

{
  "allowed": [
    "OPENAI_API_KEY",
    {"name": "ANTHROPIC_API_KEY", "max_uses": 50, "expires": "2h", "rpm_limit": 60},
    {"name": "GITHUB_TOKEN", "max_uses": 10, "expires": "30m"}
  ],
  "token_ttl": "1h",
  "alerts": {
    "token_threshold": 100000,
    "webhook": "https://hooks.slack.com/services/YOUR/WEBHOOK/URL"
  }
}
Feature check_please "Other tools"
Per-credential max uses βœ… ❌
Time-based expiry βœ… ❌
RPM rate limiting βœ… ❌
Bearer token TTL βœ… ❌
Slack/Discord alerts βœ… ❌
Per-agent usage tracking βœ… ❌
Session-authenticated API βœ… 😬
Encrypted vault βœ… PBKDF2 200K 🀷 plaintext?

πŸ“Š Usage Tracking & Alerts

Every credential request is counted. Every token is tracked. Every agent is logged.

# Real-time monitoring
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:8458/usage

# Per-key breakdown
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:8458/usage/OPENAI_API_KEY

Alerts fire automatically:

  • 🚨 Agent exceeds RPM limit β†’ 429 + terminal warning + webhook
  • πŸ’° Token threshold exceeded β†’ terminal warning + webhook
  • πŸ“ All access logged to agent_usage.log (append-only JSON)

πŸ–₯️ Interfaces

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                                                             β”‚
β”‚   CLI ──── check-please --env .env        (table output)    β”‚
β”‚   TUI ──── ./start.sh --tui              (rich terminal)    β”‚
β”‚   Web ──── ./start.sh --web              (browser SPA)      β”‚
β”‚   Desktop  ./start.sh --desktop          (native GTK app)   β”‚
β”‚   API ──── ./start.sh --agent-api        (HTTP broker)      β”‚
β”‚   MCP ──── ./start.sh --agent-mcp        (Claude/Copilot)   β”‚
β”‚                                                             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
Lock Screen Dashboard Audit Results
Lock Screen Dashboard Audit
Password Vault Settings Build .env
Vault Settings Build

πŸ“Έ Screenshots coming soon. Run ./start.sh --web to see the live UI.


πŸ” Providers (16)

Provider Key Pattern Provider Key Pattern
OpenAI sk-* Anthropic sk-ant-*
Google AIza* GitHub ghp_* gho_*
Stripe sk_live_* Slack xox[bpas]-*
HuggingFace hf_* Groq gsk_*
Mistral alphanumeric NVIDIA nvapi-*
DeepSeek sk-* (hex) Together hex (64)
OpenRouter sk-or-v1-* Cerebras csk-*
SendGrid SG.*.* Twilio hex (32)

Adding a provider? Drop a single file in credential_auditor/providers/. Auto-discovered. Zero config. No registration. Some frameworks make you write a plugin manifest, register a factory, and sacrifice a goat. We don't.


πŸ›‘οΈ Security

  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚                    SECURITY LAYERS                       β”‚
  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
  β”‚                                                          β”‚
  β”‚  πŸ”‘  PBKDF2-HMAC-SHA256 Β· 200,000 iterations            β”‚
  β”‚  πŸ§‚  16-byte random salt per account                     β”‚
  β”‚  βœ…  HMAC-SHA256 integrity verification                  β”‚
  β”‚  πŸͺ  HttpOnly + SameSite=Strict session cookies          β”‚
  β”‚  🚫  Exponential backoff (1s β†’ 2s β†’ 4s β†’ ... β†’ 30s)     β”‚
  β”‚  πŸ“  Content-Security-Policy enforced                    β”‚
  β”‚  πŸ”’  chmod 600 on all vault/account files                β”‚
  β”‚  πŸ›‘  10MB request body limit (anti-DoS)                  β”‚
  β”‚  🏠  localhost-only binding                              β”‚
  β”‚  πŸ“  All access logged (append-only)                     β”‚
  β”‚  πŸ”—  Symlink/hardlink attack detection                   β”‚
  β”‚  🚫  No raw keys in any output β€” ever                    β”‚
  β”‚                                                          β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ”΄ Hostile security audit: PASSED β€” 10-part adversarial audit covering crypto, auth, input validation, network security, file system, and dependencies. All critical findings fixed. Read the full report β†’

Security Headers

Every response includes:

  • X-Frame-Options: DENY β€” clickjacking protection
  • X-Content-Type-Options: nosniff β€” MIME sniffing prevention
  • Content-Security-Policy β€” script/style source restrictions
  • Referrer-Policy: no-referrer β€” zero URL leakage
  • X-XSS-Protection: 1; mode=block β€” legacy XSS filter

Brute Force Protection

Attempt 1 β†’ 1s lockout
Attempt 2 β†’ 2s lockout
Attempt 3 β†’ 4s lockout
Attempt 4 β†’ 8s lockout
Attempt 5 β†’ 16s lockout
Attempt 6+ β†’ 30s lockout (capped)

πŸ” Password Vault

Your vault stores passwords, API keys, and credentials β€” all encrypted locally.

  • βœ… Add/edit/delete entries with site, username, password, notes
  • βœ… Password generator with configurable length and complexity
  • βœ… Import CSV from Chrome, 1Password, Bitwarden, LastPass, etc.
  • βœ… Export CSV for portability
  • βœ… Biometric unlock via phone (FIDO2/WebAuthn)
  • βœ… Encrypted backups (.cpbackup files)
  • βœ… Emergency recovery sheet (printable)
  • βœ… Multi-account support

Your data never leaves your machine. No cloud sync. No telemetry. No "anonymous" analytics. Just your secrets, encrypted, on your disk. Revolutionary concept, apparently.


πŸ“‘ HTTP API Reference

Method Path Description
GET /providers List providers and env var names (no values)
GET /credentials List allowed credential names (no values)
POST /credentials/{VAR} Get credential value (if permitted)
GET /health Server status
GET /usage Usage summary for all credentials
GET /usage/{VAR} Per-credential usage stats
POST /usage Agent reports token consumption

All requests require Authorization: Bearer <token>. Token displayed on startup.


πŸ§ͺ Self-Healing & Error Handling

πŸ’ͺ What auto-recovers (click to expand)
Scenario What Happens
Corrupt vault file Returns empty vault β€” no crash
Corrupt account file Returns "not found" β€” others unaffected
Missing data directory Auto-created on startup
Wrong backup password Clear error β€” file untouched
Invalid JSON in data Safe default returned
Legacy single-account data Auto-migrated to multi-account
WebAuthn not supported Falls back to browser
Downloads folder missing Auto-created
🚫 What doesn't recover (by design) (click to expand)
  • Lost password + lost recovery key + no backup = data is gone. No backdoors. That's the point.
  • Deleted data files = gone without backup. No shadow copies.
  • Corrupted encrypted backup = unrecoverable. Keep multiple backups.

πŸ—οΈ Adding a Provider

# credential_auditor/providers/myprovider_p.py β€” that's it. One file.
class MyProvider(Provider):
    name: ClassVar[str] = "myprovider"
    env_patterns: ClassVar[list[re.Pattern]] = [re.compile(r"^MY_API_KEY$")]
    key_format: ClassVar[re.Pattern] = re.compile(r"^mk-[a-z0-9]{32}$")

    async def validate(self, key, client):
        resp = await client.get("https://api.example.com/me",
                                headers={"Authorization": f"Bearer {key}"})
        if resp.status_code == 200:
            return "valid", "account info", None, None, None, None
        return "auth_failed", None, None, None, None, "Invalid key"

Drop the file. Run the tool. Provider auto-discovered. Zero registration, zero config, zero boilerplate.


πŸ“¦ Install

pip install .           # core (3 deps: httpx, rich, python-dotenv)
pip install ".[tui]"    # + Textual TUI

Or just run ./start.sh β€” handles venv, deps, and launch automatically.


πŸ† Why check_please?

check_please OpenClaw "Just use .env"
Encrypted vault βœ… PBKDF2 200K ❌ ❌
Session authentication βœ… HttpOnly cookies ❌ global state N/A
Per-credential scoping βœ… max_uses + TTL + RPM ❌ ❌
Brute force protection βœ… exponential backoff ❌ N/A
16 provider validation βœ… live API checks partial ❌
MCP support βœ… native ❌ ❌
Biometric unlock βœ… FIDO2/WebAuthn ❌ ❌
Security audit βœ… hostile audit passed 🀷 🀷
Request body limits βœ… 10MB cap ❌ OOM me N/A
Security headers βœ… CSP + HSTS + XFO ❌ N/A
Setup time ~30 seconds ??? instant (insecure)
Dependencies 3 🀷 0

We're not saying other tools are bad. We're saying we tested ours with a hostile security audit and published the results. Can they say the same? πŸ«–


About

Reliant AI's secure credential broker for AI coding agents + 16-provider API key audit pipeline. CLI, TUI, Web, Desktop, MCP, HTTP API.

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors