Technical Job Search
github/awesome-copilot
A skill your agent uses when a software engineer asks for help with job search tasks: parsing or analyzing a job description, tailoring a CV/resume, writing a cover letter, evaluating a job offer…
Delegate a big or high-stakes job to a fleet of parallel subagents, orchestrated deterministically; runs unattended and reports back
$ npx skills add vellum-ai/vellum-assistant --skill workflows -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install vellum-ai/vellum-assistant workflows --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/vellum-ai/vellum-assistant.git skills-src && mkdir -p .claude/skills && cp -r skills-src/assistant/src/config/bundled-skills/workflows .claude/skills/workflows && 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 "workflows" agent skill from https://github.com/vellum-ai/vellum-assistant/tree/main/assistant/src/config/bundled-skills/workflows into .claude/skills/workflows/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "workflows", 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/vellum-ai/vellum-assistant/tree/main/assistant/src/config/bundled-skills/workflowsType 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 vellum-ai/vellum-assistant --skill workflows -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install vellum-ai/vellum-assistant workflows --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vellum-ai/vellum-assistant.git skills-src && mkdir -p .agents/skills && cp -r skills-src/assistant/src/config/bundled-skills/workflows .agents/skills/workflows && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "workflows" agent skill from https://github.com/vellum-ai/vellum-assistant/tree/main/assistant/src/config/bundled-skills/workflows into .agents/skills/workflows/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "workflows", 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 vellum-ai/vellum-assistant --skill workflows -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install vellum-ai/vellum-assistant workflows --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vellum-ai/vellum-assistant.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/assistant/src/config/bundled-skills/workflows .cursor/skills/workflows && 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 "workflows" agent skill from https://github.com/vellum-ai/vellum-assistant/tree/main/assistant/src/config/bundled-skills/workflows into .cursor/skills/workflows/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "workflows", 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/vellum-ai/vellum-assistant.git --path assistant/src/config/bundled-skills/workflows--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 vellum-ai/vellum-assistant --skill workflows -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install vellum-ai/vellum-assistant workflows --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vellum-ai/vellum-assistant.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/assistant/src/config/bundled-skills/workflows .gemini/skills/workflows && 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 "workflows" agent skill from https://github.com/vellum-ai/vellum-assistant/tree/main/assistant/src/config/bundled-skills/workflows into .gemini/skills/workflows/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "workflows", 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 vellum-ai/vellum-assistant workflowsInstalls 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 vellum-ai/vellum-assistant --skill workflows -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/vellum-ai/vellum-assistant.git skills-src && mkdir -p .github/skills && cp -r skills-src/assistant/src/config/bundled-skills/workflows .github/skills/workflows && 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 "workflows" agent skill from https://github.com/vellum-ai/vellum-assistant/tree/main/assistant/src/config/bundled-skills/workflows into .github/skills/workflows/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "workflows", 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 vellum-ai/vellum-assistant --skill workflows -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install vellum-ai/vellum-assistant workflows --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vellum-ai/vellum-assistant.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/assistant/src/config/bundled-skills/workflows .opencode/skills/workflows && 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 "workflows" agent skill from https://github.com/vellum-ai/vellum-assistant/tree/main/assistant/src/config/bundled-skills/workflows into .opencode/skills/workflows/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "workflows", 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.
workflowsDelegate a big or high-stakes job to a fleet of parallel subagents, orchestrated deterministically; runs unattended and reports back
Workflows is an agent skill from vellum-ai/vellum-assistant. Delegate a big or high-stakes job to a fleet of parallel subagents, orchestrated deterministically; runs unattended and reports back
Its SKILL.md is about 3.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files (for example `TOOLS.json`, `tools/manage-workflows.ts` and `tools/run-workflow.ts`). Compatibility notes: Designed for Vellum personal assistants
The repository describes itself as: An AI Assistant that’s easy to setup, does your work 24/7, knows your preferences and gets better over time. The licence is MIT.
Read from SKILL.md and the folder at commit 844117a. 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.
Ships script files (TypeScript), which the agent can run.
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.
Designed for Vellum personal assistants
From compatibility in the SKILL.md frontmatter.
Workflows loads about 3.2k tokens when it runs. Until then it costs about 36 tokens; SKILL.md has 1,196 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 vellum-ai/vellum-assistant at commit 844117a, republished under its MIT licence (© vellum-ai). 1,196 words, ~3,168 tokens.
.claude/skills/workflows/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.A workflow is a short JS/TS script you author that runs in a sandbox and fans work
out across many short-lived leaf agents, orchestrated deterministically. Launch
one with run_workflow (inline script OR saved name, exactly one). It returns a
runId immediately; the run is asynchronous and you are notified in this
conversation when it completes — do NOT poll.
Reach for one when a job is too big, too parallel, or too important for one inline pass. That is more than batch/map-reduce over many items — it also covers exhaustively sweeping or auditing a large surface, researching across many sources and synthesizing, and generating several independent attempts to judge or adversarially verify before trusting the result. For a single task or a quick lookup, do it inline.
These are the load-bearing invariants. Get them wrong and the run misbehaves silently.
awaitHost functions block and return their result directly. Write straight-line code.
const r = agent("Summarize this thread."); // r is the result, right hereDo not write await agent(...), and do not make the script async. An
async script deadlocks on its second host call — the sandbox can suspend the main
evaluation stack but not a promise continuation.
metaThe first statement must be a pure-literal export — no computed values, template strings, or concatenation:
export const meta = {
name: "triage-inbox",
description: "Triage and label inbox messages",
};meta is extracted statically, without executing the script, so it must be a
plain object literal with string name and description. The name is how a saved
workflow is referenced by workflow(name) and the scheduler.
return the resultThe script body runs as a function. Its result is whatever it returns at the top
level — a bare trailing expression (e.g. result;) is discarded and the run
finishes with no result. Always return the value you want surfaced.
const result = agent(`Write the final summary: ${JSON.stringify(parts)}`);
return result;Every leaf call is journaled by sequence number and input hash, so a resumed run can
replay the unchanged prefix instead of re-spawning agents. That only holds if the
script is deterministic, so Date.now(), Math.random(), and argless new Date()
throw. Pass any timestamps or random seeds in through args.
All functions are synchronous from the script's perspective.
| Function | Returns | Notes |
|---|---|---|
agent(prompt, opts?) | the leaf's result | Runs ONE leaf. Throws on leaf failure (fails the whole run). |
leaf(prompt, opts?) | a leaf descriptor | Runs nothing on its own; used inside parallel/map/pipeline. |
parallel(specs) | results[] | Runs an array of leaf(...) descriptors concurrently, results in input order. A failed leaf becomes null (never throws). |
map(items, build) | results[] | build(item, i) returns a leaf(...) descriptor per item; runs them like parallel. |
pipeline(items, ...stages) | results[] | Each stage(prev, i) returns a leaf(...) descriptor (run an agent) OR a plain value (pass through unchanged — filter/transform locally, no agent spent). Per-stage barrier: stage N+1 starts only after all of stage N finishes. |
phase(title) | — | Marks a named phase for progress reporting. |
log(msg) | — | Emits a progress log line. |
usage() | { agentsSpawned, inputTokens, outputTokens } | Live snapshot so a script can self-moderate. |
workflow(name, args?) | the child's result | Runs a SAVED workflow inline, depth 1 only (a child may not call workflow()). |
args | the run input | The args object passed to run_workflow. |
Use agent for a single sequential leaf (throws on failure). Use parallel/map/
pipeline for fan-out (a failed leaf is null, so a batch survives a few bad items).
opts for agent / leaf)| Option | Type | Effect |
|---|---|---|
schema | JSON Schema object literal | Forces structured output via a tool. A schema leaf runs with no tools — no file_read/file_list/recall/web_search, so it cannot read files or recall memory (pure judge/extractor). Pass anything it must judge inline in the prompt; a schema leaf told to "read these files" answers from the model's prior, not real data. Use a plain JSON Schema literal, not Zod. |
label | string | Short display/diagnostic label for the leaf. |
profile | string | Overrides the model profile. Must exist in llm.profiles or the leaf throws. See Listing profiles. |
persona | boolean | true makes the leaf speak AS the assistant (identity + memory) — use for output meant to be in the assistant's voice. Default is anonymous — use for impartial judging/extraction. |
persona: true is the costly path (it runs the full memory-injection pipeline). Use
it only for the few leaves whose output must be in the assistant's voice; keep bulk
judging/extraction anonymous.
The capabilities argument to run_workflow declares once, up front, what the
run's leaves may do. There are no per-call permission prompts inside a running
workflow.
{
"tools": ["file_write", "gmail_send"], // side-effecting tools granted to leaves
"hostFunctions": [], // host-function names the run may invoke
"persona": true // grant leaves persona (identity + memory)
}file_read, file_list, recall, web_search. A schema leaf gets none of these
(it runs as a single forced-tool-choice call) — pass it inline content, never tell it to read.web_fetch is NOT in the baseline — an outbound fetch is side-effecting (its
URL can exfiltrate read data), so a leaf that must fetch a URL has to declare
"web_fetch" in capabilities.tools.web_fetch, …) or
host function makes the LAUNCH prompt the user for approval once — that single
approval covers the whole run. A read-only run (no declared tools) launches with no
prompt. Declare the minimum you need.Runs are autonomous but BOUNDED by a per-run agent cap — spend is structurally capped and you cannot exceed it.
Before choosing a profile for a leaf, look up the valid values rather than guessing
— an unknown profile throws.
manage_workflows with action
list_profiles. It returns the profile names defined in llm.profiles plus the
workspace-wide active profile.GET config/llm/profiles (operationId
llm_profiles_list), which clients use to populate profile dropdowns.Omit profile to use the default: a persona leaf mirrors the main agent (the active
profile floats above the call-site default); an anonymous leaf uses the cost-optimized
workflowLeaf default.
Use manage_workflows to inspect and control runs:
| Action | Requires | Purpose |
|---|---|---|
status | run_id | Status + agent/token counts for one run (NOT the result). |
get_result | run_id | The full result of a finished run. |
list_runs | — | Recent runs, newest first. |
abort | run_id | Signal an in-flight run to abort. |
resume | run_id | Resume an interrupted run (see below). |
list_profiles | — | List defined profiles + the active profile (for leaf profile). |
The completion notification injected when a run finishes carries a truncated
preview of the result (large results are cut off). To read the complete result,
call manage_workflows with action get_result and the run_id — status
deliberately omits the result to stay lightweight.
Resume is not automatic. If the assistant restarts mid-run, the run is reconciled
to status interrupted (the agent/token accounting is preserved so the agent cap
still carries across the restart). It sits there until you explicitly resume it by
run_id via manage_workflows action resume. Resuming re-invokes the engine with
the same runId: the journal replays the completed prefix without re-spawning (or
re-paying for) finished leaves, then continues from the first unfinished leaf under the
run's originally-declared capabilities. Only interrupted runs are resumable; a
completed / failed / aborted run is terminal.
Score each inbox item in parallel (anonymous schema leaves), then write one summary in
the assistant's voice (a single persona leaf). The item list comes in via args —
never fetched inside the script.
export const meta = {
name: "triage-inbox",
description: "Score and summarize inbox items",
};
phase("score");
const scored = map(args.items, (item) =>
leaf(`Rate this message's urgency 0-10 with a one-line reason:\n${item.subject}\n${item.body}`, {
label: `score:${item.id}`,
schema: {
type: "object",
properties: { urgency: { type: "number" }, reason: { type: "string" } },
required: ["urgency", "reason"],
},
}),
);
phase("summarize");
const summary = agent(
`Here are scored inbox items. Write a short triage summary, highlighting anything urgent:\n${JSON.stringify(scored)}`,
{ persona: true },
);
return summary;A failed scoring leaf shows up as null in scored; the run continues.
© vellum-ai, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 3 other files in assistant/src/config/bundled-skills/workflows of vellum-ai/vellum-assistant.
Open the folder on GitHubat commit 844117a
Workflows 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 |
|---|---|---|---|---|---|---|
| Workflows this skillvellum-ai/vellum-assistant | 1.4k | — | ~3.2k | Automated safety check: Pass | MIT | |
| Technical Job Searchgithub/awesome-copilot | 40k | — | ~1.2k | Automated safety check: Pass | MIT | |
| Job Application AssistantMadsLorentzen/ai-job-search | 45k | — | ~1.2k | Automated safety check: Notes | MIT | |
| Parallels Discord Roundtripopenclaw/openclaw | 392k | — | ~788 | Automated safety check: Pass | MIT | |
| Python Background Jobswshobson/agents | 40k | — | ~1.8k | Automated safety check: Pass | MIT | |
| Openclaw Parallels Smokeopenclaw/openclaw | 392k | — | ~8.4k | Automated safety check: Notes | MIT |
github/awesome-copilot
A skill your agent uses when a software engineer asks for help with job search tasks: parsing or analyzing a job description, tailoring a CV/resume, writing a cover letter, evaluating a job offer…
MadsLorentzen/ai-job-search
Evaluates job postings against your profile, then tailors a LaTeX CV and cover letter and prepares interview answers for the roles you pursue.
openclaw/openclaw
Run macOS Parallels smoke with Discord send, host verification, host reply, and guest readback proof.
wshobson/agents
Python background job patterns including task queues, workers, and event-driven architecture.
openclaw/openclaw
Prepare, snapshot, run, rerun, debug, or interpret OpenClaw Parallels guest install, onboarding, gateway smoke, and upgrade checks across macOS, Windows, and Linux.
paperclipai/paperclip
Delegate user-requested work to an existing Paperclip agent, with a durable task reference and clear execution expectations.
vellum-ai/vellum-assistant
Create and configure a GitHub App so the assistant can push commits, open PRs, and comment under its own bot identity.
vellum-ai/vellum-assistant
Connect a Discord bot to the assistant via the Discord Gateway with guided application creation and intent configuration
vellum-ai/vellum-assistant
Create and configure a Sentry internal integration so the assistant can manage issues, alerts, and releases under its own identity
vellum-ai/vellum-assistant
Ingest a large dataset into memory as a skimmed map. An agent skill from vellum-ai/vellum-assistant.
vellum-ai/vellum-assistant
A skill your agent uses when the user wants to build, scaffold, ship, or edit a Vellum plugin that bundles multiple surfaces (hooks, tools, skills, and more) into one installable package.
vellum-ai/vellum-assistant
Connect a Slack app to the Vellum Assistant via Socket Mode.
Delegate a big or high-stakes job to a fleet of parallel subagents, orchestrated deterministically; runs unattended and reports back. Workflows is an agent skill from vellum-ai/vellum-assistant.
Run `npx skills add vellum-ai/vellum-assistant --skill workflows -a claude-code`. Or copy the skill folder (assistant/src/config/bundled-skills/workflows in vellum-ai/vellum-assistant) into .claude/skills/workflows in your project. Claude Code loads it when a task matches its description.
Run `npx skills add vellum-ai/vellum-assistant --skill workflows -a codex`. Or copy the skill folder (assistant/src/config/bundled-skills/workflows in vellum-ai/vellum-assistant) into .agents/skills/workflows 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 vellum-ai/vellum-assistant --skill workflows -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/workflows, .gemini/skills/workflows, .github/skills/workflows and .opencode/skills/workflows in your project.
Going by SKILL.md and its folder, Workflows needs TypeScript for the scripts in its folder. Our summary lists: Node.js. Compatibility (from SKILL.md): Designed for Vellum personal assistants.
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.
Workflows 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.2k tokens (SKILL.md is roughly 13k 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 Workflows: Technical Job Search (github/awesome-copilot, 40k stars), Job Application Assistant (MadsLorentzen/ai-job-search, 45k stars), Parallels Discord Roundtrip (openclaw/openclaw, 392k stars) and Python Background Jobs (wshobson/agents, 40k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
vellum-ai (a GitHub organization) maintains it in vellum-ai/vellum-assistant, which has 1,400 GitHub stars. The repository holds 108 skills in this directory. The repository was last updated on October 9, 2026.
Source: vellum-ai/vellum-assistant on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.