bookmark — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited bookmark (Agent Skill) and scored it 45/100 (orange). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 1 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
A base64 string of 128+ characters appears in a documentation file. Encoded prompt injection hides the hostile instruction in base64 — invisible to keyword filters — and relies on the agent's ability to decode it at runtime. There is no normal authoring reason to embed a multi-hundred-byte base64 blob in skill docs.
*.sig, SIGNATURES) outside the documentation.Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
<!-- Trigger phrases: bookmark, save this link, store this URL, remember this page, /bookmark <url> [#tags] -->
Fetches a URL, generates a concise summary, checks for duplicates, and stores the result as a bookmark entry.
/bookmark <url> [#tags]See CONVENTIONS.md — skip if already confirmed this conversation.
Example: /bookmark https://example.com/article #caching #architecture
Use WebFetch to retrieve content at the URL.
If WebFetch fails, prompt for a manual summary:
Could not fetch URL: <url>
Error: <error message>
Please provide a manual summary of the page content:
>Continue to Step 4 with the manual summary.
Synthesize content into a summary: 2-4 sentences on main topic and takeaways, followed by 3-5 bullet points.
Show preview before storing:
## Bookmark Summary (preview)
<summary text>
Key points:
- <point 1>
- <point 2>
- <point 3>
Ready to store? (yes / edit / skip)If the user edits, accept their revision. If they skip, confirm "Skipped. No entry was stored."
Call distillery_find_similar(content="<url> <summary>", dedup_action=true). Handle by action field:
`"create"`: No similar entries. Proceed to Step 6.
`"skip"`: Near-exact duplicate. Show similarity table and offer: (1) Store anyway, (2) Skip.
`"merge"` or `"link"`: Related entry exists. Show similarity table and offer: (1) Store anyway, (2) Skip.
Similar entries found:
| Entry ID | Similarity | URL | Preview |
|----------|-----------|-----|---------|
| <id> | 92% | <url> | <first 80 chars> |
1. Store anyway 2. SkipOn skip, confirm "Skipped. No new entry was stored." and stop.
See CONVENTIONS.md for resolution order. Cache for the session.
Combine explicit #tag arguments with 2-5 auto-extracted keywords from the summary. Tag format rules:
source/bookmark/{domain} — derived from URL domain (drop www., dots to hyphens)domain/{topic} — subject-area tagsproject/{repo-name}/references — if project is knownwww., replace non-[a-z0-9-] with hyphens, collapse consecutive hyphens, trim leading/trailing hyphens. Must match [a-z0-9][a-z0-9\-]*.# from user-provided tagsdistillery_store(
content="<summary>\n\nKey points:\n- ...",
entry_type="bookmark",
author="<author>",
project="<project>",
tags=[...],
metadata={"url": "<the-url>", "summary": "<2-4 sentence summary>"}
)[bookmark] Stored: <entry-id>
Project: <project> | Author: <author>
Summary: <first 200 chars>...
Tags: tag1, tag2, tag3Stored:
[bookmark] Stored: <entry-id>
Project: <project> | Author: <author>
Summary: <first 200 chars>...
Tags: tag1, tag2, tag3Skipped:
Skipped. No new entry was stored.metadata.url, even if content was manually provided~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.