linkedin-post — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited linkedin-post (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
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.
Write English LinkedIn posts that build Chan Meng's personal brand and expand her network, then draft them straight into the LinkedIn composer for one-click review. You never click Post — Chan reviews and publishes.
references/brand.md — colors, fonts, logo, voice do/don'ts, imagery direction.references/voice-and-structure.md — post anatomy + mechanics (read every run).references/hashtag-bank.md — curated hashtag sets + rules.references/recap-playbook.md — recap research, verification, @mention mechanics.examples/post.txt + examples/diagram.mmd — a real reference idea post + its diagram./linkedin-post <idea|recap> arg, else infer, else ask once.takeaways. Don't block on completeness — gather what she has.
Follow references/recap-playbook.md:
LinkedIn profile/company URL for each person/org Chan named.
output/<YYYY-MM-DD>-<slug>/MENTIONS.md (the role/name/title/URL/tag-yes table).references/voice-and-structure.md and the voice rules inreferences/brand.md: strong hook, emoji-led structure, mental-shift/takeaway, CTA question, then 8–12 hashtags (idea) or 6–10 (recap) from references/hashtag-bank.md.
Write assets into the same output folder. Visual priority (Chan's stated preference): (1) Mermaid diagram → (2) HTML-rendered image (card or bespoke) → (3) OpenAI image only as a last resort. Default idea posts to a Mermaid diagram; reach for HTML to craft more beautiful bespoke visuals. Ask Chan only if genuinely unsure.
a) Brand Mermaid diagram — PREFERRED (frameworks, before/after, concept maps — great for idea posts):
output/<date>-<slug>/diagram.mmd. Do NOT add a --- config ---frontmatter block (the brand config is applied via the CLI). Use the brand classDefs for accents:
classDef accent fill:#FC5000,stroke:#070607,color:#fff; %% the ONE orange block
classDef ink fill:#070607,stroke:#070607,color:#fff;
classDef glare fill:#F5F28E,stroke:#070607,color:#070607;
classDef surface fill:#F7F6F2,stroke:#070607,color:#070607; %% default-ishKeep one orange accent per diagram (brand rule). Un-classed nodes already render on-brand.
node scripts/render-mermaid.mjs output/<date>-<slug>/diagram.mmd→ produces diagram.png on a basalt background at 2× scale.
b) HTML-rendered image — PREFERRED for richer visuals. Two ways:
b1) Quick branded card (quotes, theses, recap "field-note" cards):
node scripts/render-card.mjs output/<date>-<slug>/card.png \
--eyebrow "EVENT RECAP" \
--headline "<short punchy line — the thesis or a quote>" \
--sub "<one-line context / attribution>" \
--size square # or: landscapeHeadline auto-fits; keep it short (a quote or thesis), not a paragraph.
b2) Bespoke HTML — author a custom on-brand layout when the card is too plain. Write an HTML file that links the brand CSS and wraps content in a .stage element, then screenshot it:
<!-- output/<date>-<slug>/visual.html -->
<link rel="stylesheet" href="../../templates/brand.css"> <!-- ../ depth: output/<slug>/ → repo root -->
<div class="stage square"> …your Caldera layout using --orange/--ink, .display, .rule, blocks… </div> node scripts/render-html.mjs output/<date>-<slug>/visual.html output/<date>-<slug>/visual.png --selector ".stage"templates/brand.css gives tokens + helpers (.stage, .eyebrow, .display, .rule, .block/.px, .card, logo at templates/assets/chan-monkey-logo-black.svg). Honor the brand: basalt ground, one orange accent per unit, Anton display + DM Sans body, flat (no shadows/gradients). Use templates/post-card.html as a worked reference.
c) OpenAI image — FALLBACK ONLY (use when neither a diagram nor an HTML layout fits):
node scripts/gen-image.mjs "<prompt>" output/<date>-<slug>/image.png --size landscapePrompt from references/brand.md → Imagery direction (risograph halftone, orange→violet, flat, abstract — NO portraits of Chan, no stock scenes). Exit code 2 = no key; tell Chan how to set it (.env.local) and fall back to a Mermaid/HTML visual.
d) Plain text — some posts need no visual. Skip this step.
Show Chan the rendered asset (Read the PNG) and confirm before drafting into LinkedIn.
Load the browser tools, then:
tabs_context_mcp to see current tabs; create a new tab and navigate tohttps://www.linkedin.com/feed/. If not logged in, ask Chan to log in, then continue.
post.txt into the editor.@ + name,wait for the dropdown, and click the matching entry so the tag turns into a real linked chip. Verify each chip is linked. Only tag verified entries.
find/read_page for an <input type="file"> ref and use file_upload.Known limitation (LinkedIn web): the composer injects no usable file input into the accessibility tree, and clicking the photo icon opens a native OS file picker you must NOT drive (it can block the session). So by default, hand the image attach to Chan: tell her the exact PNG path and ask her to click the photo icon and select it. Don't risk the native dialog.
image (if not done) and publish.
Browser note: this environment auto-resizes the window between actions, which can close the composer. Type the full post (body + hashtags) in ONE type call, screenshot once to confirm, and avoid extra round-trips while the modal is open.Optional: record the composer steps with gif_creator if Chan wants a replay. Caution: avoid clicking anything that triggers a browser dialog (see global browser guidance).Leave the folder output/<YYYY-MM-DD>-<slug>/ containing:
post.txt — the final copy (copy-paste-ready fallback).diagram.mmd+diagram.png, card.png, or image.png).MENTIONS.md — recap only.npm install done (playwright + openai + mermaid-cli local); npx playwright install chromium done..env.example → .env and set OPENAI_API_KEY. Without it,image mode falls back to Mermaid/card — everything else works.
mmdc reuses the existing puppeteer-config.json; the brand theme lives intemplates/mermaid-brand-config.json + templates/mermaid-brand.css.
recap-playbook.md).output/ (gitignored); never write drafts to the repo root.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.