CF article-archiver
Automatically archive web articles and Twitter Articles to Feishu documents. ALWAYS trigger when user shares URLs from x.com (Twitter), mp.weixin.qq.com (WeChat articles), or says "保存/记录/收藏 [链接]". Handles long articles (600+ lines), multiple images (20+ images), preserves formatting (bold, code blocks, lists), and sends success notification to user. Use immediately when detecting article URLs, don't ask for confirmation.
As a process F 43/100 · Will not run — References files that are not bundled: url, image_url
What is at stake
Medium-severity findings: the skill is probably honest, but read what alarmed the scanner.
Below is the worst case for this category. The finding here is medium: the guard saw a sign, not a proof.
The files contain someone else's key or token. If it is live, your agent will call third-party services under a stranger's identity; if it was revoked, the skill's scripts simply fail. Such a key often arrives with the author's whole workspace, personal data included.
The key is visible to everyone who downloaded the skill and has likely been copied by catalog-scanning bots already. Revoke it now, check bills and access logs, then reissue.
How to improve
- The SKILL.md body is over 5,000 tokens: move reference detail into references/ and load it when needed.
- The text references files that are not there: add them or drop the references.
- A spec.yaml with trigger phrases and assertions — a behaviour contract for CI; `skilltest init` writes a template.
Guard findings · 10
✓ No critical or high findings
Medium and low: 10
-
medium Secrets in code
secret-labelled-tokenconfig/twitter-cookies.txt:1Labelled token / key literal (vendor format unknown — verify it is not a live credential)auth_token=170c…988; ct0=7659…e80
-
medium Secrets in code
secret-labelled-tokenscripts/archive-long-article.js:17Labelled token / key literal (vendor format unknown — verify it is not a live credential)app_secret: 'gdEs…Vtg'
-
low Secrets in code
secret-high-entropy-tokenpackage-lock.json:26High-entropy token-like string (may be an id, hash or a credential) (quoted — discussed, not commanded)"integrity": "sha5…uWm+fFRcIOgKBMiOBP+eXiy…9ab+DDKA==",
quoted -
low Secrets in code
secret-high-entropy-tokenscripts/archive-long-article-v2.py:62High-entropy token-like string (may be an id, hash or a credential) (quoted — discussed, not commanded)-d '{{"app_id":"cli_…bcb","app_secret":"gdEs…Vtg"}}' | jq -r '.tenant_access_token')quoted -
low Secrets in code
secret-high-entropy-tokenscripts/archive-long-article.js:17High-entropy token-like string (may be an id, hash or a credential) (quoted — discussed, not commanded)app_secret: 'gdEs…Vtg'
quoted -
low Secrets in code
secret-high-entropy-tokenscripts/archive-long-article.py:18High-entropy token-like string (may be an id, hash or a credential) (quoted — discussed, not commanded)'app_secret': 'gdEs…Vtg'
quoted -
low Secrets in code
secret-high-entropy-tokenscripts/archive-simple.py:27High-entropy token-like string (may be an id, hash or a credential) (quoted — discussed, not commanded)-d '{"app_id":"cli_…bcb","app_secret":"gdEs…Vtg"}' | jq -r '.tenant_access_token'quoted -
low Dangerous commands
cmd-privilegescripts/fetch-twitter-article.js:13Privilege escalation / world-writable permissions (detector / deny-list definition; string literal in code, not executed)args: ['--no-sandbox', '--disable-setuid-sandbox']
detectorcode literal -
low Secrets in code
secret-labelled-tokentest_image_insert.py:6Labelled token / key literal (vendor format unknown — verify it is not a live credential) (test fixture / example file)APP_SECRET = "gdEs…Vtg"
fixture -
low Secrets in code
secret-high-entropy-tokentest_image_insert.py:6High-entropy token-like string (may be an id, hash or a credential) (test fixture / example file; quoted — discussed, not commanded)APP_SECRET = "gdEs…Vtg"
fixturequoted
Files scanned: 40. Evidence is masked. Grey chips explain why severity was lowered.
Against the Agent Skills spec
- warning
body-longSKILL.md body ≈ 5301 tokens (recommended < 5000); move details to references/ - warning
missing-refreference to a missing file: url - warning
missing-refreference to a missing file: image_url
Process rating: all ten parameters 43/100
- 0Tools and files. 2 referenced file(s) missing: url, image_url
- 0Result and completion. Does not say what the result is
- 0Inputs and preconditions. Does not say what the process needs to start
- 0Progress reporting. Says nothing while it works
- 30Running it twice. 8 mutating operations with no state check
- 60Failures and branches. 2 branches
- 70When it triggers. States when to use, but not when not to
- 70Execution cost. Instruction body is 5301 tokens
- 100Steps. 161 steps
- 100Consistency. Name and required fields are in place
- low 10 top-level sections: this looks like several domains in one skill
- medium 4 test cases, all positive: not one "should refuse" or "should ask first"
- low No test case covers injection arriving through data
Everything here is measured from the skill text rather than judged by a model, so the numbers are checkable. A parameter weighs more when it is a more common reason for the process to stall.
Quality signals
- +5Description has no quoted example phrases that should trigger the skill
- +4Description does not say when NOT to use the skill (false activations)
- +3Output format is not stated: the model decides each time
- -223 emoji in the instructions: noise for the model
- -325 of 30 scripts are never mentioned in SKILL.md
- +1No license
- +2Single-language instructions
- +3Description length 424: enough signal without eating the budget
- +4Structure: 54 headings
- +3Step-by-step instructions: 161 items
- +4Has examples (45 code blocks)
Quality base 70; lint remarks subtract, signals add up to 100. Result: 60.