Claude responded: Send this:Send this:
"I have a skill that runs Node.js scripts via exec. My current setup is:
API keys stored as plaintext in skills.entries.icp-hunter.env in openclaw.json:
json"icp-hunter": {
"enabled": true,
"env": {
"NOTION_API_KEY": "ntn_actual_key_here",
"NOTION_DATABASE_ID": "34f0487c...",
"CLAY_WEBHOOK_URL": "https://api.clay.com/...",
"CLAY_WEBHOOK_TOKEN": "actual_token_here"
}
}
Scripts in ~/.openclaw/workspace/scripts/ that read keys via process.env.NOTION_API_KEY
SKILL.md tells the agent to run node fetch-leads.js, node update-status.js, node push-to-clay.js
The agent reads SKILL.md, runs scripts via exec (scripts handle API calls), and the agent handles reasoning/scoring
My concerns:
API keys are in plaintext in openclaw.json — is this safe enough or should I use SecretRef?
Is storing keys in skills.entries.env the right place or should they be in ~/.openclaw/.env or secrets.json?
Is the overall pattern (SKILL.md + scripts + LLM reasoning) the recommended way to build skills that combine external API calls with LLM intelligence?
Any security or structural improvements I should make before running this in production?"