Install
openclaw skills install token-managementClawHub Security found sensitive or high-impact capabilities. Review the scan results before using.
Centralized API token management workflow. Store tokens in .env with expiration dates, test permissions via script battery, document capabilities in connections/, set calendar renewal reminders. Prevents re-asking for credentials, ensures token security, tracks expiration.
openclaw skills install token-managementPublished: https://clawhub.com/skills/token-management
Purpose: Centralize API token management - storage, testing, documentation, expiration tracking.
Triggers:
ALWAYS check ~/Documents/life/.env FIRST before asking for tokens!
Git commit (if applicable)
cd ~/Documents/life && git add -A && git commit -m "Before updating TOKEN_NAME"Ask for expiration date
Store in .env
~/Documents/life/.env (canonical location)SERVICE_NAME_TOKEN=value # Expires: YYYY-MM-DDWILEY_JIRA_TOKEN=abc123 # Expires: 2027-02-12Create calendar reminder (if expires)
gog calendar create primary \
--summary "⚠️ Renew SERVICE token" \
--from "YYYY-MM-DDT00:00:00-05:00" \
--to "YYYY-MM-DDT23:59:59-05:00" \
--description "Token expires YYYY-MM-DD. Renew at: [RENEWAL_URL]"
Test token permissions
# Test Jira token
import requests, base64
TOKEN = "..."
EMAIL = "user@example.com"
auth = base64.b64encode(f"{EMAIL}:{TOKEN}".encode()).decode()
tests = [
("Get user", "GET", "/rest/api/3/myself"),
("List projects", "GET", "/rest/api/3/project"),
("Search issues", "GET", "/rest/api/3/search", {"jql": "assignee=currentUser()"}),
]
for name, method, endpoint, *params in tests:
r = requests.get(f"https://DOMAIN{endpoint}",
headers={'Authorization': f'Basic {auth}'},
params=params[0] if params else None)
print(f"{'✅' if r.ok else '❌'} {name}: {r.status_code}")
Document in connections/
~/Documents/life/connections/SERVICE.md## Token Info
- **Obtained:** 2026-02-12
- **Expires:** 2027-02-12
- **Renew at:** https://id.atlassian.com/manage-profile/security/api-tokens
- **Scope:** read-write
- **Variable:** `WILEY_JIRA_TOKEN` (~/Documents/life/.env)
Update token index
~/Documents/life/.envLocation: ~/Documents/life/.env
Example tokens:
| Service | Variable | Scope | Expires | Connection Doc |
|---|---|---|---|---|
| Figma | FIGMA_TOKEN | read-write | YYYY-MM-DD | figma.md |
| Jira | JIRA_TOKEN | read-write | YYYY-MM-DD | jira.md |
| Slack | SLACK_TOKEN | bot permissions | Never | slack.md |
| GitHub | GITHUB_TOKEN | repo, gist | YYYY-MM-DD | github.md |
Your index: Keep your own list in this section (local copy of skill).
# Append to .env (skill will automate)
echo "SERVICE_TOKEN=value" >> ~/Documents/life/.env
grep SERVICE_TOKEN ~/Documents/life/.env
cat ~/Documents/life/.env
Canonical location: ~/Documents/life/.env
Why here:
Python usage:
from dotenv import load_dotenv
load_dotenv('~/Documents/life/.env') # Or absolute path
Shell usage:
source ~/Documents/life/.env
echo $YOUR_TOKEN_NAME
Created: 2026-02-12
Updated: 2026-02-13 (sanitized for publication)