1.0kβ
by rsdouglas
janee β OpenClaw Skill
janee is an OpenClaw Skills integration for ai ml workflows. Secrets management for AI agents. Never expose your API keys again.
Skill Snapshot
| name | janee |
| description | Secrets management for AI agents. Never expose your API keys again. OpenClaw Skills integration. |
| owner | rsdouglas |
| repository | rsdouglas/janee |
| language | Markdown |
| license | MIT |
| topics | |
| security | L1 |
| install | openclaw add @rsdouglas/janee |
| last updated | Feb 7, 2026 |
Maintainer

name: janee version: 0.1.0 description: Secrets management for AI agents. Never expose your API keys again. homepage: https://github.com/rsdouglas/janee metadata: {"category": "security", "emoji": "π"}
Janee
Secrets management for AI agents. Store API keys encrypted, make requests through Janee, never touch the real key.
Why Use Janee?
Most skills tell you to store API keys in plaintext config files. One prompt injection, one leaked log, one compromised session β and your keys are exposed.
Janee fixes this:
- Keys encrypted at rest β not plaintext JSON
- Agent never sees the real key β requests go through Janee
- Path-based policies β restrict what endpoints can be called
- Full audit trail β every request logged
- Kill switch β revoke access without rotating keys
Install
npm install -g @true-and-useful/janee
janee init
Add a Service
janee add
Follow the prompts to add your API credentials. Keys are encrypted automatically.
Use in Your Agent
Instead of calling APIs directly with your key, call them through Janee:
# Old way (dangerous):
curl -H "Authorization: Bearer sk_live_xxx" https://api.stripe.com/v1/balance
# Janee way (safe):
# Agent calls execute(capability, method, path) via MCP
# Janee injects the key, agent never sees it
OpenClaw Integration
Install the OpenClaw plugin for native tool support:
openclaw plugins install @true-and-useful/janee-openclaw
Your agent now has:
janee_list_servicesβ see available APIsjanee_executeβ make requests through Janeejanee_reload_configβ hot-reload after config changes
Example: Secure Moltbook Access
Instead of storing your Moltbook key in ~/.config/moltbook/credentials.json:
janee add moltbook -u https://www.moltbook.com/api/v1 -k YOUR_KEY
Then use Janee to post:
# Your agent calls:
janee_execute(service="moltbook", method="POST", path="/posts", body=...)
Your Moltbook key stays encrypted. Even if your agent is compromised, the key can't be exfiltrated.
Config Example
services:
stripe:
baseUrl: https://api.stripe.com
auth:
type: bearer
key: sk_live_xxx # encrypted
moltbook:
baseUrl: https://www.moltbook.com/api/v1
auth:
type: bearer
key: moltbook_sk_xxx # encrypted
capabilities:
stripe_readonly:
service: stripe
rules:
allow: [GET *]
deny: [POST *, DELETE *]
moltbook:
service: moltbook
ttl: 1h
autoApprove: true
Architecture
βββββββββββββββ ββββββββββββ βββββββββββ
β AI Agent βββββββΆβ Janee βββββββΆβ API β
β β MCP β β HTTP β β
βββββββββββββββ ββββββββββββ βββββββββββ
β β
No key Injects key
+ logs request
Links
Janee π
Secrets management for AI agents via MCP
The Problem
AI agents need API access to be useful. The current approach is to give them your keys and hope they behave.
- π Agents have full access to Stripe, Gmail, databases
- π No audit trail of what was accessed or why
- π« No kill switch when things go wrong
- π One prompt injection away from disaster
The Solution
Janee is an MCP server that manages API secrets for AI agents:
- Store your API keys β encrypted locally in
~/.janee/ - Run
janee serveβ starts MCP server - Agent requests access β via
executeMCP tool - Janee injects the real key β agent never sees it
- Everything is logged β full audit trail
Your keys stay on your machine. Agents never see them. You stay in control.
Quick Start
Install
npm install -g @true-and-useful/janee
Initialize
janee init
This creates ~/.janee/config.yaml with example services.
Add Services
Option 1: Interactive (recommended for first-time users)
janee add
Janee will guide you through adding a service:
Service name: stripe
Base URL: https://api.stripe.com
Auth type (bearer/hmac/headers): bearer
API key: sk_live_xxx
β Added service "stripe"
Create a capability for this service? (Y/n): y
Capability name (default: stripe):
TTL (e.g., 1h, 30m): 1h
Auto-approve? (Y/n): y
β Added capability "stripe"
Done! Run 'janee serve' to start.
Option 2: Edit config directly
Edit ~/.janee/config.yaml:
services:
stripe:
baseUrl: https://api.stripe.com
auth:
type: bearer
key: sk_live_xxx
capabilities:
stripe:
service: stripe
ttl: 1h
autoApprove: true
Start the MCP server
janee serve
Use with your agent
Agents that support MCP (Claude Desktop, Cursor, OpenClaw) can now call the execute tool to make API requests through Janee:
// Agent calls the execute tool
execute({
service: "stripe",
method: "GET",
path: "/v1/balance",
reason: "User asked for account balance"
})
Janee decrypts the key, makes the request, logs everything, and returns the response.
OpenClaw Integration
If you're using OpenClaw, install the plugin for native tool support:
npm install -g @true-and-useful/janee
janee init
# Edit ~/.janee/config.yaml with your services
# Install the OpenClaw plugin
openclaw plugins install @true-and-useful/janee-openclaw
Enable in your agent config:
{
agents: {
list: [{
id: "main",
tools: { allow: ["janee"] }
}]
}
}
Your agent now has these tools:
janee_list_servicesβ Discover available APIsjanee_executeβ Make API requests through Janee
The plugin spawns janee serve automatically. All requests are logged to ~/.janee/logs/.
See docs/OPENCLAW.md for full integration guide.
MCP Tools
Janee exposes two MCP tools:
| Tool | Description |
|---|---|
list_services | Discover available APIs and their policies |
execute | Make an API request through Janee |
Agents discover what's available, then call APIs through Janee. Same audit trail, same protection.
Configuration
Config lives in ~/.janee/config.yaml:
server:
host: localhost
services:
stripe:
baseUrl: https://api.stripe.com
auth:
type: bearer
key: sk_live_xxx # encrypted at rest
github:
baseUrl: https://api.github.com
auth:
type: bearer
key: ghp_xxx
capabilities:
stripe:
service: stripe
ttl: 1h
autoApprove: true
stripe_sensitive:
service: stripe
ttl: 5m
requiresReason: true
Services = Real APIs with real keys
Capabilities = What agents can request, with policies
Request Policies
Control exactly what requests each capability can make using rules:
capabilities:
stripe_readonly:
service: stripe
ttl: 1h
rules:
allow:
- GET *
deny:
- POST *
- PUT *
- DELETE *
stripe_billing:
service: stripe
ttl: 15m
requiresReason: true
rules:
allow:
- GET *
- POST /v1/refunds/*
- POST /v1/invoices/*
deny:
- POST /v1/charges/* # Can't charge cards
- DELETE *
How rules work:
denypatterns are checked first β explicit deny always wins- Then
allowpatterns are checked β must match to proceed - No rules defined β allow all (backward compatible)
- Rules defined but no match β denied by default
Pattern format: METHOD PATH
GET *β any GET requestPOST /v1/charges/*β POST to /v1/charges/ and subpaths* /v1/customersβ any method to /v1/customersDELETE /v1/customers/*β DELETE any customer
This makes security real: Even if an agent lies about its "reason", it can only access the endpoints the policy allows. Enforcement happens server-side.
CLI Reference
janee init # Set up ~/.janee/ with example config
janee add # Add a service (interactive)
janee add stripe -u https://api.stripe.com -k sk_xxx # Add with args
janee remove <service> # Remove a service
janee list # List configured services
janee serve # Start MCP server
janee logs # View audit log
janee logs -f # Tail audit log
janee sessions # List active sessions
janee revoke <id> # Kill a session
You can also edit ~/.janee/config.yaml directly if you prefer.
How It Works
βββββββββββββββ ββββββββββββ βββββββββββ
β AI Agent βββββββΆβ Janee βββββββΆβ Stripe β
β β MCP β MCP β HTTP β API β
βββββββββββββββ ββββββββββββ βββββββββββ
β β
No key Injects key
+ logs request
- Agent calls
executeMCP tool with service, method, path - Janee looks up service config, decrypts the real key
- Makes HTTP request to real API with key
- Logs: timestamp, service, method, path, status
- Returns response to agent
Agent never touches the real key.
Security
- Encryption: Keys stored with AES-256-GCM
- Local only: MCP server over stdio (no network exposure)
- Audit log: Every request logged to
~/.janee/logs/ - Sessions: Time-limited, revocable
- Kill switch:
janee revokeor delete config
Integrations
Works with any agent that speaks MCP:
- OpenClaw β Native plugin (
@true-and-useful/janee-openclaw) - Claude Desktop β MCP client
- Cursor β MCP client
- Any MCP client β just point at
janee serve
License
MIT β Built by True and Useful LLC
Stop giving AI agents your keys. Start controlling access. π
Permissions & Security
Security level L1: Low-risk skills with minimal permissions. Review inputs and outputs before running in production.
Requirements
- OpenClaw CLI installed and configured.
- Language: Markdown
- License: MIT
- Topics:
Configuration
```yaml services: stripe: baseUrl: https://api.stripe.com auth: type: bearer key: sk_live_xxx # encrypted moltbook: baseUrl: https://www.moltbook.com/api/v1 auth: type: bearer key: moltbook_sk_xxx # encrypted capabilities: stripe_readonly: service: stripe rules: allow: [GET *] deny: [POST *, DELETE *] moltbook: service: moltbook ttl: 1h autoApprove: true ```
FAQ
How do I install janee?
Run openclaw add @rsdouglas/janee in your terminal. This installs janee into your OpenClaw Skills catalog.
Does this skill run locally or in the cloud?
OpenClaw Skills execute locally by default. Review the SKILL.md and permissions before running any skill.
Where can I verify the source code?
The source repository is available at https://github.com/openclaw/skills/tree/main/skills/rsdouglas/janee. Review commits and README documentation before installing.
