OnePathToFreedom

n8n Publish Check — Data skill for Claude Code

Data community

Scan n8n workflow exports for secrets and private data before publishing.

How to install n8n Publish Check

This entry records only its repository, not the path inside it, so there is no exact command to give. Open OnePathToFreedom/n8n-publish-check and copy the folder into ~/.claude/skills/, or the file into ~/.claude/agents/.

What n8n Publish Check does

Scan n8n workflow exports for secrets and private data before publishing. Claude skill, Python CLI and git pre-commit hook.

Alternatives in Data

  • Private GPT — Complete API layer for private AI applications on local models: RAG, skills, tools, MCP, text-to-sql, and more 57.5k ★
  • Financial Services — Reference agents, skills, and data connectors for the financial-services workflows we see most — investment ba 34.5k ★
  • n8n Code JavaScript — JavaScript in n8n Code nodes with data access patterns 3.6k ★

README

n8n-publish-check

Check an exported n8n workflow (JSON) for secrets and private data **before** it is committed to GitHub, posted publicly or shared with a client. Works as a Claude skill, as a standalone Python script, or as a git pre-commit hook.

It is a heuristic scanner plus a manual review, not a guarantee. "No findings" means the known patterns did not match, nothing more.

![Scanner output on the example workflow](docs/img/scan-output.png)

Values are masked in the report (first 3 and last 2 characters), so the report itself is safe to paste into a ticket or a chat.

What it checks

It knows the structure of an n8n export and looks in the places where data actually leaks:

Where Severity
pinData (real sample data from executions) high
Literal values in Authorization / API-key-like fields, secrets in ?api_key= / ?token= high
Known token formats (OpenAI/Anthropic, GitHub, Slack, Telegram, AWS, Google, Stripe, JWT, private keys) high
IBANs (checksum-validated) high
Your own deny-list terms (client names, internal domains) high
Emails, phone numbers, IP addresses medium
Resource IDs (chatId, documentId, ...), cachedResultName medium
Webhook path, staticData, shared / homeProject medium
Credential id/name, webhookId, meta.instanceId low

Expressions that read `$env`, `$credentials`, `$secrets` or `$vars` are treated as safe.

Usage

Standard library only, Python 3.8+.

# scan
python3 scripts/scan.py workflow.json

# write a sanitized copy (the original is never modified), then re-scan it
python3 scripts/scan.py workflow.json --sanitize workflow.public.json
python3 scripts/scan.py workflow.public.json

Exit codes: `0` nothing at or above the threshold, `1` findings, `2` invalid JSON. Use `--fail-on low|medium|high` to change the threshold. Raw secret values are never printed in full.

![Before and after sanitizing](docs/img/sanitize-before-after.p