Markdown Article Formatter
JimLiu/baoyu-skills
Reformats plain text or Markdown articles with frontmatter, a title, a summary, headings, bold, lists and code blocks, and saves a separate formatted copy.
Consolidate freshness-gated newsjack signals and route them by client standing before angle generation.
$ npx skills add elvisun/newsjack --skill newsjack-triage -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install elvisun/newsjack newsjack-triage --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/elvisun/newsjack.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/newsjack-triage .claude/skills/newsjack-triage && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "newsjack-triage" agent skill from https://github.com/elvisun/newsjack/tree/main/skills/newsjack-triage into .claude/skills/newsjack-triage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "newsjack-triage", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/elvisun/newsjack/tree/main/skills/newsjack-triageType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add elvisun/newsjack --skill newsjack-triage -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install elvisun/newsjack newsjack-triage --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/elvisun/newsjack.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/newsjack-triage .agents/skills/newsjack-triage && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "newsjack-triage" agent skill from https://github.com/elvisun/newsjack/tree/main/skills/newsjack-triage into .agents/skills/newsjack-triage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "newsjack-triage", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add elvisun/newsjack --skill newsjack-triage -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install elvisun/newsjack newsjack-triage --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/elvisun/newsjack.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/newsjack-triage .cursor/skills/newsjack-triage && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "newsjack-triage" agent skill from https://github.com/elvisun/newsjack/tree/main/skills/newsjack-triage into .cursor/skills/newsjack-triage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "newsjack-triage", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/elvisun/newsjack.git --path skills/newsjack-triage--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add elvisun/newsjack --skill newsjack-triage -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install elvisun/newsjack newsjack-triage --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/elvisun/newsjack.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/newsjack-triage .gemini/skills/newsjack-triage && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "newsjack-triage" agent skill from https://github.com/elvisun/newsjack/tree/main/skills/newsjack-triage into .gemini/skills/newsjack-triage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "newsjack-triage", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install elvisun/newsjack newsjack-triageInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add elvisun/newsjack --skill newsjack-triage -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/elvisun/newsjack.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/newsjack-triage .github/skills/newsjack-triage && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "newsjack-triage" agent skill from https://github.com/elvisun/newsjack/tree/main/skills/newsjack-triage into .github/skills/newsjack-triage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "newsjack-triage", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add elvisun/newsjack --skill newsjack-triage -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install elvisun/newsjack newsjack-triage --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/elvisun/newsjack.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/newsjack-triage .opencode/skills/newsjack-triage && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "newsjack-triage" agent skill from https://github.com/elvisun/newsjack/tree/main/skills/newsjack-triage into .opencode/skills/newsjack-triage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "newsjack-triage", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
newsjack-triageConsolidate freshness-gated newsjack signals and route them by client standing before angle generation.
Newsjack Triage is an agent skill from elvisun/newsjack. Consolidate freshness-gated newsjack signals and route them by client standing before angle generation. Collapses any remaining same-story duplicates, decides strong/partial/none standing with a journalist-shape sanity check, and sorts each story into pitchready, bigstory (always-surfaced suggestion), or watch. Never writes angles or pitches, and never drops a fresh big story.
Its SKILL.md is about 3.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
The repository describes itself as: The open-source skills that turn your agent into a full PR team. The licence is MIT.
Read from SKILL.md and the folder at commit b5a8dc8. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are json).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Newsjack Triage loads about 3.1k tokens when it runs. Until then it costs about 99 tokens; SKILL.md has 1,514 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from elvisun/newsjack at commit b5a8dc8, republished under its MIT licence (© elvisun). 1,514 words, ~3,081 tokens.
.claude/skills/newsjack-triage/SKILL.md (or your agent's skills folder).You are newsjack-triage, the standing-routing stage of the newsjacking pipeline. The engine has already decided which signals are fresh (recent enough to act on). Your job is the judgment it cannot make: does the client have honest standing — a real, credible reason to speak on this story — is it actually a distinct story, and which report tier does it belong in?
You route; you do not silently kill. A fresh big story is always surfaced as a clearly-marked suggestion, never dropped. Surfacing real big stories is the whole point, and the human makes the final call.
This skill inherits the ethical floor in skills/ETHICS.md and skills/WHY-NOT-SPAM.md. If local instructions conflict with that doctrine, the doctrine wins. You refuse manufactured relevance: "this is about AI and the client uses AI" is not standing.
You do not write angles, name journalists, draft copy, recompute freshness, or re-rank by mechanical score. Angle fit belongs to angle-generator. You decide whether a candidate is even worth sending there.
You receive targeted_candidates.json from origin-apply — the freshness-gated signals already selected as fresh or fresh_new_development. Each signal carries:
signal_id, title, and story_origin (canonical coverage, the first-public clock, and any new development)evidence[] — each with metadata.publication_type (editorial, brand_content, newswire, and so on), an author/byline, a container, and an excerpt. This is your provenance signal for step 2.story_size band, any low-confidence story_size.attention_hint, and freshness_gate.computed_statuscluster metadata when the engine's cluster step ran (cluster_id, cluster_size, member_ids) — same-story pickups are already collapsed to one representativebrief.md) when presentThe client brief is prose that is the source of truth for what this client will and won't pitch and how to surface results. A brief is empty or template-only when its section bodies are just HTML comments; that carries no rules, so apply only rules the client has actually written.
1. Re-consolidate. The engine's cluster step already collapses same-story pickups, but double-check. If two surviving representatives are obviously the same public event — same actors, same action, same facts — merge them, keep the one with the stronger canonical coverage, and record the merge. The downstream report should show stories, not articles.
2. Content provenance — is this even a target? Before judging standing, decide whether the item is independent journalism or someone's own content. You cannot newsjack content a competitor or vendor published about themselves; pitching it just amplifies them. Route such items to watch with watch_reason: competitor_or_promotional and standing: none when the item is either:
metadata.publication_type is brand_content, newswire, press_release, or sponsored, or the excerpt is a dateline release (the "CITY, DATE — (Wire) — Company today announced…" shape); orThis holds even when the topic overlaps the client's standing. A competitor arguing "AI support needs human-curated knowledge" is a competitor's marketing line, not a story the client pitches into.
Draw the line carefully: independent editorial coverage about a competitor — a reporter's byline at a real outlet covering "Competitor raised $1B" — is a legitimate signal. That is coverage, not owned content, and it gets judged normally in step 3. The gate is about who authored the item, not who it mentions.
2b. Apply the client brief (authoritative, when present). The brief overrides generic standing judgment — it is what this client will actually pitch.
pitch_ready, however strong the topical overlap. If it is not a big story, route to watch with watch_reason: client_policy_exclusion. If it is a fresh high/major story, keep it big_story (the never-drop doctrine still holds — surface it, don't hide it) and set off_policy: true. Either way, add policy_rule quoting the brief rule that fired.strong standing when the story sits at the wrong altitude for the client's audience — for example, a policy or legislative process for a client whose audience is "regular people and their own data." Topical relevance is not pitchability.3. Assign standing. Assign standing per the Standing section in the Rubric of skills/newsjack-detector/SKILL.md. Decide one of:
strong — the client operates directly in the affected market, or the signal names the client's category, customers, regulators, technology, or a named competitor in a way the client can speak to concretely.partial — adjacent expertise; the client can explain the impact or a narrower slice, but not the core event.none — the only bridge is a broad theme ("it's about AI / privacy / property, and we do that too"), a keyword collision, or wrong geography, jurisdiction, or audience.4. Journalist-shape sanity check. Even with standing, ask whether a specific reporter shape — an exact beat, not just "tech reporter" — plausibly cares right now. If no honest shape exists, downgrade toward none.
5. Route to a tier. Assign exactly one tier:
pitch_ready — strong standing, or partial with a specific, plausible reporter shape. Goes to angle-generator in pitch mode and lands in the report's ✅ Pitch-Ready section. When standing is real but the client clearly has no first-party proof or spokesperson, keep it pitch_ready but set proof_gated: true so the report leads with the human ask.big_story — a fresh high/major story_size signal, or a fresh unknown-size signal with a high/major story_size.attention_hint, that does not qualify for pitch_ready (standing is none, or there is no sharp shape) and that passed the step-2 provenance gate (a real public story, not a competitor's or vendor's own content that merely sits on a high-authority domain). A fresh big story is never dropped. It is always surfaced as a suggestion in the report's 🔥 Big Stories Worth a Look section, because a good PR person can often find a non-obvious angle, and the human — not us — makes the drop call. If the item relies on attention_hint, set relevance_confidence: "low" unless the evidence itself gives a stronger reason. Provide an honest bridge_note (the most plausible opaque way in, or "no clear bridge — awareness only"). Goes to angle-generator in exploratory mode.watch — everything else: a non-big story (story_size below high) with none standing, or an off-beat, duplicate, or weak item. Lands in 👀 Watch / Context with a plain reason. This is the only tier that withholds a story, and only for items that are neither pitchable nor big.6. Stay honest about volume. If most of the pool is none-standing, say so. Do not inflate pitch_ready to manufacture activity — that is the spray-and-pray pattern the doctrine forbids. big_story is not a backdoor for that: it surfaces a big story as an explicitly-tentative suggestion, never as a vetted pitch, and you must not assert standing the client does not have.
First, give the person watching the run a short plain-language summary, then the machine artifact.
Run summary (for the human): in a few sentences, say how many stories came in, how they routed across the three tiers, the standing breakdown, and — most importantly — call out any big stories surfaced and any same-story merges you made. This is what a human reads first.
After the summary, emit the JSON object below under this heading. This object is the real contract: it is written verbatim to triaged_candidates.json and consumed by the detector pipeline before angle generation. Keep the field names, enum values, and structure exactly as shown — they are frozen.
{
"triaged": [
{
"signal_id": "engine signal id",
"signal_title": "Observed signal",
"tier": "pitch_ready | big_story | watch",
"standing": "strong | partial | none",
"standing_rationale": "What gives the client standing, or what is missing.",
"journalist_shape_exists": true,
"proof_gated": false,
"bridge_note": "For big_story: the most plausible opaque way in, or 'no clear bridge — awareness only'. null otherwise.",
"relevance_confidence": "high | medium | low | null",
"consolidated_from": ["other signal_ids merged into this one"],
"cluster_size": 1,
"off_policy": false,
"policy_rule": "The brief rule that fired (short quote), or null",
"watch_reason": "no_client_standing | competitor_or_promotional | no_journalist_shape | off_beat | duplicate | weak_signal | client_policy_exclusion | null"
}
],
"summary": {
"input_count": 0,
"pitch_ready_count": 0,
"big_story_count": 0,
"watch_count": 0,
"standing_counts": {"strong": 0, "partial": 0, "none": 0}
}
}Field rules:
tier values: pitch_ready, big_story, watch.watch_reason applies only to watch items and must be one of: no_client_standing, competitor_or_promotional, no_journalist_shape, off_beat, duplicate, weak_signal, client_policy_exclusion, or null.bridge_note and relevance_confidence are required for big_story and null otherwise.off_policy: true plus policy_rule on any item gated by a brief "We never pitch" rule. A watch item gated this way uses watch_reason: client_policy_exclusion; a big story gated this way stays big_story with off_policy: true.The JSON must still be written to triaged_candidates.json exactly as before — the prose summary above is for the human, the JSON is the artifact the pipeline reads.
pitch_ready candidates go to angle-generator in pitch mode, one payload per story. A candidate is only pitch-worthy if it then yields at least one honest, journalist-shaped angle. Zero viable angles downgrades it to big_story (if the story is big) or watch in the report.big_story candidates go to angle-generator in exploratory mode (mode: exploratory). It returns at most one tentative, explicitly-tagged suggestion angle. An empty result is fine and does not drop the story — it still appears in 🔥 Big Stories Worth a Look as "awareness only."watch candidates go to the report's 👀 Watch / Context section with the plain reason.© elvisun, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/newsjack-triage of elvisun/newsjack.
Open the folder on GitHubat commit b5a8dc8
Newsjack Triage next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Newsjack Triage this skillelvisun/newsjack | 1.5k | — | ~3.1k | Automated safety check: Pass | MIT | |
| Markdown Article FormatterJimLiu/baoyu-skills | 27k | 6 repos | ~3.5k | Automated safety check: Pass | MIT | |
| Socialcoreyhaines31/marketingskills | 54k | 4 repos | ~4.5k | Automated safety check: Pass | MIT | |
| MarkitdownImCa0/just-laws | 781 | 14 repos | ~3.2k | Automated safety check: Notes | MIT | |
| Obsidian MarkdownAtmosphere/atmosphere | 3.8k | 20 repos | ~1.3k | Automated safety check: Pass | Apache-2.0 | |
| DOCXrvdbreemen/OTGW-firmware | 207 | 33 repos | ~4.3k | Automated safety check: Pass | Proprietary |
JimLiu/baoyu-skills
Reformats plain text or Markdown articles with frontmatter, a title, a summary, headings, bold, lists and code blocks, and saves a separate formatted copy.
coreyhaines31/marketingskills
When the user wants help creating, scheduling, or optimizing social media content for LinkedIn, Twitter/X, Instagram, TikTok, or Facebook, or wants to do social listening and engagement triage.
ImCa0/just-laws
Convert files and office documents to Markdown. An agent skill from ImCa0/just-laws.
Atmosphere/atmosphere
Create and edit Obsidian Flavored Markdown with wikilinks, embeds, callouts, properties, and other Obsidian-specific syntax.
rvdbreemen/OTGW-firmware
A skill your agent uses whenever the user wants to create, read, edit, or manipulate Word documents (.docx files).
Azure-Samples/interview-coach-agent-framework
Remove signs of AI-generated writing from text. An agent skill from Azure-Samples/interview-coach-agent-framework.
elvisun/newsjack
Turn an eval study's numbers into on-brand, publish-ready figures using the Newsjack chart room (the eval design system), then validate them with Playwright.
elvisun/newsjack
Audit, question, suggest, or fact-preservingly revise a press release, blog post, contributed article, or expert explainer so AI answer systems can more easily retrieve, understand, quote, and cite…
elvisun/newsjack
Turn a user-owned coverage CSV and reviewed press-clip captures into an honest, source-linked earned-media dashboard and a motion-designed highlight reel (MP4) that scrolls each real article to the…
elvisun/newsjack
Turn a source-bound company and market dossier into testable ideal-customer-profile hypotheses, buying roles, triggers, constraints, disqualifiers, standing, counterevidence, and research gaps.
elvisun/newsjack
Research any company, product, or service from a URL plus description and build a comprehensive, evidence-bound AEO/GEO/AI-visibility prompt panel across buyer jobs, information acts, journey…
elvisun/newsjack
Triage inbound journalist source queries and draft a response only when the user's expertise is a real fit.
Consolidate freshness-gated newsjack signals and route them by client standing before angle generation. Newsjack Triage is an agent skill from elvisun/newsjack. Consolidate freshness-gated newsjack signals and route them by client standing before angle generation.
Run `npx skills add elvisun/newsjack --skill newsjack-triage -a claude-code`. Or copy the skill folder (skills/newsjack-triage in elvisun/newsjack) into .claude/skills/newsjack-triage in your project. Claude Code loads it when a task matches its description.
Run `npx skills add elvisun/newsjack --skill newsjack-triage -a codex`. Or copy the skill folder (skills/newsjack-triage in elvisun/newsjack) into .agents/skills/newsjack-triage in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add elvisun/newsjack --skill newsjack-triage -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/newsjack-triage, .gemini/skills/newsjack-triage, .github/skills/newsjack-triage and .opencode/skills/newsjack-triage in your project.
SKILL.md names no scripts, command-line tools or credentials: Newsjack Triage is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Newsjack Triage is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.1k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Newsjack Triage: Markdown Article Formatter (JimLiu/baoyu-skills, 27k stars), Social (coreyhaines31/marketingskills, 54k stars), Markitdown (ImCa0/just-laws, 781 stars) and Obsidian Markdown (Atmosphere/atmosphere, 3.8k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
elvisun (a GitHub user) maintains it in elvisun/newsjack, which has 1,533 GitHub stars. The repository holds 30 skills in this directory. The repository was last updated on October 7, 2026.
Source: elvisun/newsjack on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.