Skip to main content

Secure token management library for CLI tools, using two-layer encryption with local key and 1Password vault integration.

Project description

KeySentinel 🔐

KeySentinel is a lightweight, secure token encryption library and CLI tool for managing sensitive credentials with strong Zero Trust principles.

📖 Read the full article explaining the Two-Layer Security Architecture here


✨ Features

  • 🔐 Two-layer token encryption: local symmetric key + vault storage
  • 🚀 Developer-friendly CLI (keysentinel) with zero plaintext leakage
  • 🔥 Predefined profiles for common APIs (AWS, GitHub, OpenAI, GCP, etc.)
  • 🛡️ Extensible custom profiles via JSON
  • 💩 Zero Trust Local Environment Enforcement
  • 🗋 Secure clipboard copy with automatic timeout cleaning
  • ❌ Export to plaintext files (.env, .json) intentionally blocked for safety

🚀 Why KeySentinel?

Most CLI tools expose credentials through .env files or unsecured memory spaces.

KeySentinel breaks this insecure paradigm:

  • No unencrypted secrets on disk.
  • No unguarded outputs without user consent.
  • Ephemeral secrets that self-destroy after a timeout.
  • Clear warnings to educate developers about security risks.

"If it’s not encrypted, it’s exposed. If it’s on disk, it’s compromised." — The Zen of Zero Trust


⚡ Quick Usage

Encrypt and store a token via Python

from keysentinel import upsert_encrypted_fields

upsert_encrypted_fields(
    fields={"github_token": "ghp_xxx123"},
    item_title="GitHub CLI Token",
)

Retrieve and decrypt a token via Python

from keysentinel import retrieve_and_decrypt_fields

fields = retrieve_and_decrypt_fields("GitHub CLI Token")
print(fields["github_token"])

Using the CLI (Recommended)

# Encrypt and store fields securely (values prompted securely)
keysentinel encrypt-token --title "AWS CLI Credentials" --fields aws_access_key_id --fields aws_secret_access_key

# Or use a predefined profile
keysentinel encrypt-token --title "GitHub Token" --profile github

# Retrieve and decrypt fields
keysentinel get-token --title "AWS CLI Credentials"

⚠️ Credentials will be cleared from your terminal and memory automatically after a short timeout.


🛡️ Security Model

Aspect Behavior
Local Encryption AES256/Fernet with a user-local symmetric key
Vault Transport Secrets stored inside 1Password CLI (“op”)
Decryption Memory-only, no disk writes
Export Blocked by default (no .env, no .json)
User Awareness Visual warnings on decrypted output
Secret Lifecycle Timeout auto-clears memory and screen

📂 Token Profiles (Built-in)

KeySentinel supports predefined profiles to simplify common API credential handling:

Profile Fields
aws aws_access_key_id, aws_secret_access_key
github github_token
gcp gcp_client_email, gcp_private_key, gcp_project_id
openai openai_api_key
azure azure_client_id, azure_client_secret, azure_tenant_id, azure_subscription_id
slack slack_token

and many others… (30+ profiles supported!)

You can list and use these profiles by passing --profile <profile_name>.


🛠️ Extend with Custom Profiles

You can extend KeySentinel by creating a file at:

~/.keysentinel_profiles.json

Example content:

{
  "huggingface": {
    "description": "Hugging Face API Token",
    "fields": ["hf_token"]
  },
  "figma": {
    "description": "Figma Personal Access Token",
    "fields": ["figma_token"]
  }
}

When running encrypt-token, your custom profiles will be automatically available!


❌ Why Export is Blocked

KeySentinel blocks plaintext exports (--export-env, --export-json) intentionally.

Attempting to use them shows this educational warning:

⚠️ Do NOT store or copy them into plaintext files or version control.

"If it's not encrypted, it's exposed. If it's on disk, it's compromised."

from "The Zen of Zero Trust"

For more info:


📜 Zero Trust Manifest

You can load the philosophy inside Python:

import zero_trust

Or read it online:

👉 Zero Trust Local Environment Manifesto


🔗 Related Reading


🛃️ Roadmap

  • Secure CLI operations
  • Custom and extensible token profiles
  • Memory-timeout auto-clear after exposure
  • Multi-vault support (future)
  • Bitwarden CLI integration (future)

⚖️ License

MIT License


👨‍💼 Author

Built with ❤️ by Davi Luiz Guides


KeySentinel: Secure your tokens, secure your workflows. 🔐

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

keysentinel-0.2.6.tar.gz (18.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

keysentinel-0.2.6-py3-none-any.whl (15.3 kB view details)

Uploaded Python 3

File details

Details for the file keysentinel-0.2.6.tar.gz.

File metadata

  • Download URL: keysentinel-0.2.6.tar.gz
  • Upload date:
  • Size: 18.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for keysentinel-0.2.6.tar.gz
Algorithm Hash digest
SHA256 e4f1daffba88e5d13ff411fda7879e97d5b2657673ae586f270113570bac2762
MD5 cf7106837dd9848c86820620b084e7d6
BLAKE2b-256 dc056025d73567ee4e079a4c82ec1dd18f3b5ced359368771c4667e58ba7eada

See more details on using hashes here.

Provenance

The following attestation bundles were made for keysentinel-0.2.6.tar.gz:

Publisher: publish-pypi.yml on daviguides/keysentinel

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file keysentinel-0.2.6-py3-none-any.whl.

File metadata

  • Download URL: keysentinel-0.2.6-py3-none-any.whl
  • Upload date:
  • Size: 15.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for keysentinel-0.2.6-py3-none-any.whl
Algorithm Hash digest
SHA256 c8e453c42f0c0c8d0c2a7148732451d3d9f37ba7c6b61df88813fe55257a520f
MD5 7c6714990f8afe22f22723dc74dacca8
BLAKE2b-256 c538b924641c225bf153b819c906874d3374b04f9b6fc5ad9285a9e5316de0b9

See more details on using hashes here.

Provenance

The following attestation bundles were made for keysentinel-0.2.6-py3-none-any.whl:

Publisher: publish-pypi.yml on daviguides/keysentinel

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page