skills$openclaw/janee
rsdouglas1.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.

1.0k stars2.6k forksSecurity L1
Updated Feb 7, 2026Created Feb 7, 2026ai ml

Skill Snapshot

namejanee
descriptionSecrets management for AI agents. Never expose your API keys again. OpenClaw Skills integration.
ownerrsdouglas
repositoryrsdouglas/janee
languageMarkdown
licenseMIT
topics
securityL1
installopenclaw add @rsdouglas/janee
last updatedFeb 7, 2026

Maintainer

rsdouglas

rsdouglas

Maintains janee in the OpenClaw Skills directory.

View GitHub profile
File Explorer
39 files
.
docs
CHANGELOG.md
947 B
POLICIES.md
9.9 KB
packages
openclaw-plugin
src
index.ts
4.1 KB
openclaw.plugin.json
265 B
package.json
1.0 KB
README.md
3.2 KB
tsconfig.json
401 B
src
cli
commands
add.ts
5.2 KB
init.ts
3.6 KB
list.ts
1.6 KB
logs.ts
2.0 KB
remove.ts
2.0 KB
revoke.ts
1.8 KB
serve-mcp.ts
4.3 KB
serve.ts
232 B
sessions.ts
2.2 KB
config-yaml.ts
6.5 KB
index.ts
1.8 KB
core
audit.ts
5.4 KB
crypto.ts
2.4 KB
mcp-server.test.ts
3.5 KB
mcp-server.ts
9.3 KB
rules.test.ts
6.1 KB
rules.ts
4.4 KB
sessions.ts
3.8 KB
_meta.json
265 B
package-lock.json
39.7 KB
package.json
1.1 KB
README.md
7.0 KB
SKILL.md
3.2 KB
tsconfig.json
461 B
SKILL.md

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 APIs
  • janee_execute β€” make requests through Janee
  • janee_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
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  AI Agent   │─────▢│  Janee   │─────▢│   API   β”‚
β”‚             β”‚ MCP  β”‚          β”‚ HTTP β”‚         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
      β”‚                   β”‚
   No key           Injects key
                    + logs request
README.md

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:

  1. Store your API keys β€” encrypted locally in ~/.janee/
  2. Run janee serve β€” starts MCP server
  3. Agent requests access β€” via execute MCP tool
  4. Janee injects the real key β€” agent never sees it
  5. 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.


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 APIs
  • janee_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:

ToolDescription
list_servicesDiscover available APIs and their policies
executeMake 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:

  1. deny patterns are checked first β€” explicit deny always wins
  2. Then allow patterns are checked β€” must match to proceed
  3. No rules defined β†’ allow all (backward compatible)
  4. Rules defined but no match β†’ denied by default

Pattern format: METHOD PATH

  • GET * β†’ any GET request
  • POST /v1/charges/* β†’ POST to /v1/charges/ and subpaths
  • * /v1/customers β†’ any method to /v1/customers
  • DELETE /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
  1. Agent calls execute MCP tool with service, method, path
  2. Janee looks up service config, decrypts the real key
  3. Makes HTTP request to real API with key
  4. Logs: timestamp, service, method, path, status
  5. 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 revoke or 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.