Manage secrets
project_secretStore encrypted API tokens or credentials with expiry and rotation metadata, then inject them into commands without exposing plaintext; expired secrets are refused.
Instructions
Manage API tokens/credentials without leaking them: values are encrypted at rest and never returned by default. Inject them into commands with project_shell_run secret_env=["NAME"] instead of pasting them into a command line. Rotation metadata (expiry, last use, use count) is tracked by default and expired secrets are refused. Use when: storing a token (action=set), checking whether one exists or is due for rotation (action=get / action=list), removing one (action=delete). Then use secret_env on project_shell_run or the built-in GitHub tools. Avoid when: the value is a normal, non-secret config (put it in .env or the config file); or you need the plaintext printed (only with reveal=true + VENIRA_SECRET_ALLOW_REVEAL=1). Speed: fast; encrypted AES-256-GCM store, atomic writes, values decrypted only when injected. Expiry/use fields are metadata only. Output: secret_set: name, length, sha256_12, updated_at, expires_at, days_left, created, rotated; secret_get/list: metadata only (expires_at, expired, days_left, last_used_at, use_count, rotated_at); secret_delete: deleted. Batch-safe: no
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Env-var style name, e.g. GITHUB_TOKEN (required for get/set/delete). | |
| value | No | Secret value for action=set. Prefer value_env so it never appears in the transcript. | |
| action | No | list | |
| reason | No | Why this change is made (e.g. "sua loi null pointer o dong 45"). Recorded in the audit trail so later sessions know the intent. Single line, max 400 chars, secrets are redacted. | |
| reveal | No | action=get: return the plaintext value. Requires VENIRA_SECRET_ALLOW_REVEAL=1 on the host; prefer secret_env injection. | |
| value_env | No | Read the value from this host environment variable instead of `value` (never logged). | |
| expires_at | No | action=set: absolute expiry (epoch ms or ISO-8601), instead of expires_in_days. | |
| expires_in_days | No | action=set: expiry in days (e.g. 90 for quarterly rotation). Expired secrets are not injected. |