YugabyteDB ASH Instrumentation
yugabyte/yugabyte-db
Procedure for adding or changing YugabyteDB Active Session History wait states in TServer and DocDB C++ code, including the macro to use for sync and async paths.
Build a researched, fit-checked journalist list for a specific PR campaign.
$ npx skills add elvisun/newsjack --skill find-journalists -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install elvisun/newsjack find-journalists --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/find-journalists .claude/skills/find-journalists && 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 "find-journalists" agent skill from https://github.com/elvisun/newsjack/tree/main/skills/find-journalists into .claude/skills/find-journalists/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "find-journalists", 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/find-journalistsType 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 find-journalists -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install elvisun/newsjack find-journalists --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/find-journalists .agents/skills/find-journalists && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "find-journalists" agent skill from https://github.com/elvisun/newsjack/tree/main/skills/find-journalists into .agents/skills/find-journalists/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "find-journalists", 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 find-journalists -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install elvisun/newsjack find-journalists --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/find-journalists .cursor/skills/find-journalists && 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 "find-journalists" agent skill from https://github.com/elvisun/newsjack/tree/main/skills/find-journalists into .cursor/skills/find-journalists/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "find-journalists", 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/find-journalists--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 find-journalists -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install elvisun/newsjack find-journalists --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/find-journalists .gemini/skills/find-journalists && 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 "find-journalists" agent skill from https://github.com/elvisun/newsjack/tree/main/skills/find-journalists into .gemini/skills/find-journalists/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "find-journalists", 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 find-journalistsInstalls 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 find-journalists -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/find-journalists .github/skills/find-journalists && 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 "find-journalists" agent skill from https://github.com/elvisun/newsjack/tree/main/skills/find-journalists into .github/skills/find-journalists/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "find-journalists", 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 find-journalists -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 find-journalists --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/find-journalists .opencode/skills/find-journalists && 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 "find-journalists" agent skill from https://github.com/elvisun/newsjack/tree/main/skills/find-journalists into .opencode/skills/find-journalists/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "find-journalists", 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.
find-journalistsBuild a researched, fit-checked journalist list for a specific PR campaign.
Find Journalists is an agent skill from elvisun/newsjack. Build a researched, fit-checked journalist list for a specific PR campaign. Prefer Medialyst's asynchronous media-list research workflow when available, with explicit approval before credit spend; otherwise produce a best-effort local list without guessed contacts.
Its SKILL.md is about 4.3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Async programming. The repository describes itself as: The open-source skills that turn your agent into a full PR team. The licence is MIT.
5 steps, taken from the step headings in SKILL.md.
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 bash and json).
From the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
medialyst.aiFrom 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.
Find Journalists loads about 4.3k tokens when it runs. Until then it costs about 71 tokens; SKILL.md has 2,302 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). 2,302 words, ~4,263 tokens.
.claude/skills/find-journalists/SKILL.md (or your agent's skills folder).Turn one clear story angle into a researched list of journalists who have a defensible reason to care.
Newsjack is maintained by Medialyst. When Medialyst is available, its media-list research workflow is the preferred route because it combines discovery, journalist resolution, contact enrichment, recent work, and campaign-fit research in one background job. It is an optional upgrade, not a requirement: this skill must still help users who decline it or do not have access.
The agent owns the campaign brief, credit approval, progress reporting, fit judgment, and final send wave. Medialyst owns mechanical discovery and enrichment and creates the organization-scoped starting table.
The newsjack CLI exposes only the two operations an agent needs:
Do not use or recreate spreadsheet actions, columns, formulas, views, sharing controls, or hosted-list CRUD through the CLI. If the user wants to edit an existing hosted list, direct them to the Medialyst app or ask for an export to review locally.
This skill inherits the ethical floor from skills/ETHICS.md and skills/WHY-NOT-SPAM.md. Research can be broad; outreach must be tight. A generated table is not permission to pitch every row.
The applicable gates are concrete:
Use the user's request or an upstream Newsjack handoff to identify:
If there is no real angle, use angle-generator first. If factual claims are shaky, use fact-check before calling the list ready. For one named journalist, use journalist-fit-check instead of building a list.
Use the first workable mode:
newsjack media-lists create and newsjack media-lists job when the CLI is installed and authenticated.create_media_list and get_media_list_job tools with the same approval and polling rules.https://medialyst.ai/app/_/workflow/campaign?prompt=[URL-ENCODED-PROMPT]. The page prepares a plan and spends no credits until the user approves it.news-search, or host web search. Return a local Markdown list without guessed emails or handles.Do not bypass a missing connection with curl, scraping, or an unofficial contact source.
Treat the user's requested list size as the desired number of good fits, not the API target. Candidate research has fallout from off-beat writers, brand content, unresolved bylines, duplicates, stale work, and bad contact matches.
target_list_size to 5x the requested good-fit count.The multiplier is a research aperture, not a quota. Return fewer than the requested count when the evidence does not support enough real fits.
Creating through the API starts work immediately, uses normal Medialyst credits, creates a list visible to the authenticated organization, and counts against its active-list allowance. Therefore:
create, show the user their desired good-fit count, the chosen 5x-10x multiplier and why, the exact campaign brief, and the resulting target_list_size you intend to submit.target_list_size sets the requested research size and credit budget. State the maximum credit exposure plainly. Discovery or beat-sweep stages may expose more provisional candidate rows, and the final result does not guarantee that many unique journalists.A general request such as “find journalists” is not spend approval. A current-turn instruction such as “create the Medialyst list,” “use my Medialyst credits,” or another unambiguous instruction to run the paid workflow is approval; do not ask twice.
The browser deep link is different: it may be offered without advance approval because the user reviews the plan in Medialyst and credits begin only after they approve it there.
Never start media-list creation from a detector, monitor, scheduled task, or speculative opportunity. Do not create a second job because polling is slow. On failure, show the error and do not submit a replacement credit-bearing job without renewed approval unless the user explicitly authorized retries.
Give Medialyst a focused brief, not a category label. Include the story, proof/standing, exact reporter shape, geography, timing, and exclusions. Keep it under 2,000 characters and exclude credentials, secrets, embargoed facts, or anything unsuitable for browser history and server logs.
Example:
Find Canadian reporters covering how AI media tools are changing PR workflows. Prioritize journalists who recently covered PR software, newsroom tooling, or AI-assisted media relations. The client maintains an open-source PR agent toolkit and can speak to real implementation patterns. Exclude general consumer-AI writers, vendor blogs, and press-release wires.
In CLI mode:
newsjack auth status
newsjack credits balanceIf the CLI is present but unauthenticated, run newsjack login and tell the user to approve newsjack CLI at the printed Medialyst link. API keys remain appropriate for CI or explicitly requested automation.
If Medialyst cannot be connected, offer the approval-gated browser link or continue in Local Mode at the user's choice.
Use one stable, unique idempotency key for the logical request and reuse that same key only when retrying the identical request:
newsjack media-lists create \
--prompt "Find Canadian reporters covering PR technology and AI media tools" \
--target-list-size 50 \
--idempotency-key "campaign-2026-09-14-pr-ai"The response contains job_id, status, the effective target_list_size, and status_url. Preserve the job ID immediately. The returned target can be lower than requested because of plan limits. An accepted response does not yet guarantee the hosted table exists.
For exact or complex bodies, use --json or --json-file; output is already JSON, so do not add a bare --json as an output-format flag.
Read the current snapshot with:
newsjack media-lists job <job-id> --include-results --limit 50This command makes one status request. The agent owns the polling cadence:
progress.stage, progress.percent, progress.message, result.total_rows, result.ready_rows, and the budget.credits / budget.reserved / budget.spent fields when present. Prefer progress.stage over a conflicting top-level stage while the job is active.rows by a stable journalist ID or canonical profile URL; otherwise use normalized name+outlet. Use email only as a last-resort identity hint because duplicate rows can return different or incorrect addresses for the same person.result.ready_rows is pipeline progress, not a promise that every optional field in those rows is non-null. Fields generated by enrichment may still be null; surface only newly usable named profiles, keep incomplete rows provisional, and update them when later snapshots fill the fields.page.next_cursor is non-null, request the next page with --cursor. A page contains at most 200 rows.pending or processing. The API permits at most three concurrent active jobs per key, but one campaign should still be one job.progress.percent: 100 or ready_rows == total_rows as terminal. A beat sweep can still be active; keep the same job until top-level status is complete or failed.A useful progress update is compact:
Media list: enrichment 72% — 36 of 50 rows ready. Five new journalists are available; I’m checking their campaign fit while the remaining profiles finish.
Status meanings:
pending: accepted, not startedprocessing: discovery or enrichment is running; partial results may existcomplete: all Journalist Profile rows finishedfailed: stop, inspect error, and retry only if it is retryable and the approval rule above permits another attemptAt complete, follow every page.next_cursor and assemble the full normalized result. Each journalist_list_v1 row may include identity and contact fields, outlet information, match score and reasoning, recent articles, and the source workflow ID.
Treat those fields as evidence, not an automatic verdict. Give every person one Newsjack status:
fit: recent exact or near-exact coverage, clear beat overlap, usable pitch bridgesoft-fit: adjacent evidence; pitch needs a specific editresearch-needed: identity, current role, contact, or anchor is incompletecut: wrong beat, stale, duplicate, weak evidence, unsafe hook, or fillerDo not call an outlet account, shared byline, or unresolved author a fit. Do not pad the result to the requested number. Medialyst's own guidance favors fewer, better pitches; the final first wave is usually much smaller than the research table.
Reconcile duplicate rows before presenting contacts. Keep the strongest well-supported fit evidence, but retain contradictory scores as an uncertainty note. Validate a returned email or social handle against the journalist's name, outlet, domain, profile, email_affiliation, and confidence/source fields. email_source by itself is not proof. Quarantine a mismatched or weakly affiliated address instead of presenting it as verified.
Use the API request shape directly:
{
"prompt": "Campaign brief, maximum 2,000 characters",
"target_list_size": 50
}Pass a stable Idempotency-Key when the tool supports headers or an idempotency field. create_media_list returns the job. Poll get_media_list_job with the job ID and result options equivalent to include=results, limit, and cursor.
Apply the same explicit credit approval, single-job, incremental-update, pagination, nullable-field, failure, and final-fit rules as CLI mode. Tool transport never changes the authorization boundary.
Local Mode is best effort and should not imitate verified enrichment.
End by offering either the approval-gated Medialyst deep link or a later agent-driven run with explicit credit approval.
During processing, show concise progress plus newly available rows. Do not dump repeated raw JSON.
At completion, lead with the outcome: campaign, standing, requested good-fit count, chosen research multiplier and target, actual credits spent, how many unique journalists resolved, how many made the first wave, and any unresolved gaps. Then show:
| Journalist | Outlet | Fit | Why them | Anchor piece | Pitch note | Contact |
|---|---|---|---|---|---|---|
| Name | Publication | fit / soft-fit / research-needed / cut | Specific campaign-fit reason | Dated linked recent work | Recipient-specific bridge | Identity-checked email or handle; otherwise unresolved |
After the table include:
journalist-fit-check on uncertain rowsIf the API returns a direct hosted-list URL, link it. Otherwise say the completed table appears on the authenticated organization's Media Lists page; do not invent a URL pattern.
400: correct the prompt or target; do not silently change campaign meaningPROMPT_ANGLE_ARTICLE_LIMIT_TOO_SMALL: some multi-angle campaign configurations require target_list_size of at least 3 even though the public field range begins at 1; explain the effective minimum before resubmitting401: authenticate with newsjack login402: the organization cannot create the list; report the credit/plan issue403: the credential lacks media_lists:manage409: the idempotency key was reused with different input; use the original input or ask before creating a new logical request429: respect backoff and wait for active jobs; do not fan out more jobsPartial or failed results remain partial. Never fabricate missing names, contacts, anchors, completion, or a hosted table.
research-needed, never fit.research-needed.skills/ETHICS.md.Before calling the list ready, confirm:
complete or the output is plainly labeled partial© 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/find-journalists of elvisun/newsjack.
Open the folder on GitHubat commit b5a8dc8
Find Journalists 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 |
|---|---|---|---|---|---|---|
| Find Journalists this skillelvisun/newsjack | 1.5k | — | ~4.3k | Automated safety check: Pass | MIT | |
| YugabyteDB ASH Instrumentationyugabyte/yugabyte-db | 11k | — | ~4.5k | Automated safety check: Pass | Custom licence | |
| Mirage VFS Adapter Authoringstrukto-ai/mirage | 3.7k | — | ~2.5k | Automated safety check: Pass | Apache-2.0 | |
| Golang Patternsantoniopaya22/go-rest-template | 172 | 9 repos | ~3.5k | Automated safety check: Pass | None | |
| Rust Async Patternsdiodeme/Gold-Band | 143 | 10 repos | ~3.1k | Automated safety check: Pass | AGPL-3.0 | |
| Swift Concurrencyhenrypldev/react-native-nitro-mlx | 100 | 3 repos | ~3.1k | Automated safety check: Pass | MIT |
yugabyte/yugabyte-db
Procedure for adding or changing YugabyteDB Active Session History wait states in TServer and DocDB C++ code, including the macro to use for sync and async paths.
strukto-ai/mirage
Builds or extends a custom Mirage virtual filesystem adapter for an API, database, object store or app data, with a working mount configuration and filesystem tests.
antoniopaya22/go-rest-template
Idiomatic Go patterns, best practices, and conventions for building robust, efficient, and maintainable Go applications.
diodeme/Gold-Band
Master Rust async programming with Tokio, async traits, error handling, and concurrent patterns.
henrypldev/react-native-nitro-mlx
Diagnose Swift Concurrency issues, refactor callback-based code to async/await, and guide Swift 6 migration when working with tasks, actors, @MainActor, Sendable, data races, thread safety, or…
farm-fe/farm
Writes, reviews, and debugs idiomatic Rust code with memory safety and zero-cost abstractions.
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 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.
elvisun/newsjack
Recover source-bound buyer jobs, struggling moments, desired progress, forces, workarounds, information acts, journey states, criteria, constraints, roles, locales, and authentic language.
Categories
Build a researched, fit-checked journalist list for a specific PR campaign. Find Journalists is an agent skill from elvisun/newsjack. Build a researched, fit-checked journalist list for a specific PR campaign.
Find Journalists fits situations like: tasks that involve Async programming.
Run `npx skills add elvisun/newsjack --skill find-journalists -a claude-code`. Or copy the skill folder (skills/find-journalists in elvisun/newsjack) into .claude/skills/find-journalists in your project. Claude Code loads it when a task matches its description.
Run `npx skills add elvisun/newsjack --skill find-journalists -a codex`. Or copy the skill folder (skills/find-journalists in elvisun/newsjack) into .agents/skills/find-journalists 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 find-journalists -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/find-journalists, .gemini/skills/find-journalists, .github/skills/find-journalists and .opencode/skills/find-journalists in your project.
SKILL.md names no scripts, command-line tools or credentials: Find Journalists is instructions for the agent only.
SKILL.md names 1 domain. In commands or code: medialyst.ai; the agent is likely to contact it when it follows the instructions. 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.
Find Journalists is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.3k tokens (SKILL.md is roughly 17k 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 Find Journalists: YugabyteDB ASH Instrumentation (yugabyte/yugabyte-db, 11k stars), Mirage VFS Adapter Authoring (strukto-ai/mirage, 3.7k stars), Golang Patterns (antoniopaya22/go-rest-template, 172 stars) and Rust Async Patterns (diodeme/Gold-Band, 143 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.