agentCLAWHUBUnverified

JD - Triage

Scores a job posting on two independent dimensions — how much you want it (five weighted axes against your own criteria) and how likely you are to get it (your skills vs its stated requirements) — then returns one action. Any market, language, or profession.

OpenClaw

Rank

62

Safety

84

Downloads

1.1k

Updated

Oct 11, 2026

Version

1.1.1

Source

CLAWHUB

About

What it does, and when to use it.

Capability contract not published. No trust telemetry is available yet. 1.1K downloads reported by the source. Last updated 10/11/2026.

Avoid when

  • Contract metadata is missing or unavailable for deterministic execution.

Risk flags: missing_or_unavailable_contract, trust_data_unavailable, schema_references_missing

Public facts

Every fact links back to the source it came from.

Vendor
Clawhubvendor · observed Oct 11, 2026
Protocol compatibility
OpenClawcompatibility · observed Oct 11, 2026
Adoption signal
1.1K downloadsadoption · observed Oct 11, 2026
Latest release
1.1.1release · observed Jul 27, 2026
Handshake status
UNKNOWNsecurity

Install and run

Setup complexity: low.

clawhub skill install s17fej7x2x0thkvnqzpvzkakh1872tj1:jd-triage
  1. Install using `clawhub skill install s17fej7x2x0thkvnqzpvzkakh1872tj1:jd-triage` in an isolated environment before connecting it to live workloads.
  2. No published capability contract is available yet, so validate auth and request/response behavior manually.
  3. Review the upstream CLAWHUB listing at https://clawhub.ai/bwancoding/jd-triage before using production credentials.

Contract: missing

curl -s "https://www.xpersona.co/api/v1/agents/clawhub-bwancoding-jd-triage/snapshot"

Documentation

CLAWHUB

131,821 characters of source documentation, loaded on request.

Extracted files

5 files captured from the source.

SKILL.md

---
name: jd-triage
description: "Career decision system for job seekers. Scores a job description on two independent dimensions — how much you want it (5 weighted axes against your stored criteria) and how likely you are to get it (your skills vs the JD's stated requirements) — then returns one concrete action. Use when (1) the user pastes a job description or recruiter message, (2) the user invokes /jd-triage or asks 'should I apply for this role', (3) the user asks to list, compare, or analyze previously evaluated roles, (4) the user asks what to learn next for a target role, (5) the user asks to set up, update, or reset their career criteria. Market-, language-, and profession-neutral; bootstraps a criteria profile on first run."
---

# jd-triage · v1.1.1

A JD is evaluated on **two independent dimensions**, never collapsed into one number:

- **Desirability** — do you want this? Five weighted axes scored against the user's stored criteria.
- **Candidacy** — can you get this? The JD's stated must-have requirements vs the user's skills inventory.

A role you want but can't get is a *stretch*, not a *skip*. A role you can get but don't want is a *backup*, not an *apply*. Collapsing both into one star rating destroys that distinction — which is the whole decision.

Responsibilities:

1. **Bootstrap & maintain** a criteria profile at `~/.openclaw/workspace/jd_criteria.md`.
2. **Evaluate** a JD → two-dimension verdict + one action.
3. **Log** every evaluation to `~/.openclaw/workspace/jd_history.md`.
4. **Analyze / Plan** over accumulated history (see `references/analysis-commands.md`).

## Language

**Default to English.** If the user writes in another language, respond entirely in that language for the rest of the session.

| Surface | Language |
|---|---|
| All conversational output — bootstrap Q&A, verdicts, tables, **and the verdict tier as displayed** | User's language (English by default) |
| `jd_criteria.md` field keys, `jd_history.md` structural labels, verdict tier names **in storage** | **Always English** — grep-friendly, stable across language switches |
| Stored free-text values (org names, summaries, red-line rationales, JD quotes) | The language the user wrote them in, at write time |

**Never auto-translate stored content.** When listing or comparing entries written in different languages, render structural labels in the current language and show stored free text verbatim. Quotes pulled from a JD keep the JD's original language even when the surrounding output is translated — a translated quote is no longer evidence.

## State machine

On every invocation, read `~/.openclaw/workspace/jd_criteria.md` and branch:

| State | Condition | Action |
|---|---|---|
| **S1: Missing** | File does not exist | **Quick Start** (5 questions) → proceed to the requested command |
| **S2: Schema gap** | File exists, `schema_version` < 3 | Migrate silently where possible, ask only for fields that cannot be inferred (see `references/bootstrap.md § Mig

README.md

# jd-triage

**Two questions, kept apart: do you want it, and can you get it?**

Paste a job posting. Get a verdict against the criteria *you* defined — plus an
honest read on whether you'd clear the bar. Most JD filters collapse both into
one score, which is exactly the information you needed.

A skill for [OpenClaw](https://github.com/openclaw). Works in any market, any
language, any profession.

---

## What it does

- **Scores two independent dimensions.** Desirability from five weighted axes
  against your stored criteria; Candidacy from the posting's stated must-haves
  against your skills. A role you want but can't get is a **stretch**, not a
  skip. A role you can get but don't want is a **backup**, not an apply.
- **Weights red lines by where they appear.** "Owns revenue targets" in the title
  is an instant no. The same phrase in the last bullet, framed as *support*, is a
  question to ask the recruiter — not a rejection.
- **Makes vibe judgments inspectable.** Every vibe rating quotes the posting and
  names the anchor it reasoned from. Anchors carry your *reason*, so the skill
  works on a 12-person studio nobody has heard of, not just famous logos.
- **Turns unknowns into questions.** Missing comp, ambiguous scope, unclear
  remote policy — each becomes a line you can paste into a reply to the recruiter.
- **Logs everything, including rejections.** Over time, `analyze` shows which
  patterns keep reaching you and which requirement you keep almost meeting.

## Starting up

Five questions. Not thirteen.

Quick Start asks for your role family and market, what titles you want, your
floors (comp with basis, locations, remote), your automatic no's, and one to
three organizations you admire *with a line on why each*. That is enough to
evaluate. Everything else is asked once, at the moment it first matters.

Prefer showing over telling? `/jd-triage learn` reads a handful of postings you
liked and a handful you passed on, then proposes your red lines and anchors for
you to accept or edit.

## Commands

| Command | What it does |
|---|---|
| Paste a posting, or `/jd-triage` | Evaluate |
| `/jd-triage quickstart` | The 5-question setup |
| `/jd-triage learn` | Derive criteria from example postings |
| `/jd-triage update` \| `reset` | Edit criteria, current values pre-filled |
| `/jd-triage history [apply\|out]` | Last 10 evaluations |
| `/jd-triage compare <id1> [<id2>]` | Side by side |
| `/jd-triage analyze` | Patterns across everything you've evaluated (needs 8+) |
| `/jd-triage plan` | Which gap to close next, ranked by what postings actually ask for |

Natural language works too, in your language: "should I apply to this",
"和上次对比", "what should I learn next".

## Sample output

```
🎯 STRETCH APPLY        Desirability: Strong   Candidacy: Stretch

Want it
  Role fit     ★★★★★
  Domain       ★★★★★
  Org          ★★★★☆
  Vibe         ★★★★☆   anchor "Basecamp" — why: "small team, no growth theater"
                       triggered by: "we shi

_meta.json

{
  "ownerId": "kn7fsvwdsd1ktv3vdfztehe7mx821jdh",
  "slug": "jd-triage",
  "version": "1.1.1",
  "publishedAt": 1785122543293
}

references/analysis-commands.md

# Analyze & Plan

Both commands read accumulated history. Both refuse to run on too little data —
a trend drawn from four postings is a horoscope.

| Command | Needs | Below that |
|---|---|---|
| `/jd-triage analyze` | ≥ 8 entries in `jd_history.md` | Say how many exist and how many more are needed. Do not produce a partial report |
| `/jd-triage plan` | `skills` and at least one `target_roles` entry | Point at `/jd-triage update`. If history has ≥ 8 entries, use it to rank gaps; otherwise say the ranking is based on the role description alone |

**Report only what is in the data.** Empty category → "none yet". Never fill a
section by inference.

---

## `/jd-triage analyze`

Read every entry plus the criteria file.

```
📊 <N> roles evaluated, <first date> → <last date>

Where they came from
  <org trait>: <n>          ← grouped by the user's own org_traits vocabulary
  <org trait>: <n>
  unclassified: <n>

Titles that keep appearing
  <title pattern>: <n>

What they ask for
  <requirement>: <n>/<N> postings — you have it (mastered)
  <requirement>: <n>/<N> postings — you're learning it       ← highest ROI
  <requirement>: <n>/<N> postings — gap

Red lines
  "<pattern>": fired <n>× — <k> OUT, <m> CONDITIONAL

Your two dimensions
  Desirability: <n> Strong · <n> Good · <n> Weak · <n> Poor
  Candidacy:    <n> Likely · <n> Plausible · <n> Stretch
  Both high: <n>   ← the roles actually worth your time

Outcomes (of <n> entries with Outcome filled)
  <action tier>: applied <n>, interviewing <n>, rejected <n>, offer <n>

💡 <2-4 observations, each traceable to a number above>
```

### Rules

- **Group by the user's own vocabulary.** Bucket organizations using their
  `org_traits`, not a taxonomy of your own. Anything that fits none is
  `unclassified` — a large unclassified count is itself the finding, and means
  their trait list is missing something.
- **Requirement demand** is counted from stored requirement text across entries,
  cross-referenced with `skills`. Rank by `frequency × (1 − credit)`: something
  asked for constantly that the user is halfway through learning outranks
  something rarer they have not started.
- **Red-line review.** If a red line has fired ≥ 3 times and *never* produced an
  OUT — only CONDITIONAL — say so and offer to demote it to a negative vibe
  anchor. It is behaving like a preference, not a gate.
  If a red line has never fired at all across ≥ 15 entries, mention it once;
  it may be aimed at postings the user is not even seeing.
- **Calibration, only with outcomes.** If ≥ 5 entries have an `Outcome`, compare
  predicted Candidacy against what happened. Report it flatly:
  *"Of 6 rated Stretch, 3 got a first interview — the Candidacy read may be
  running pessimistic."* Fewer than 5 → skip the section entirely, do not hedge
  a guess.
- **Never infer market conditions.** The sample is the user's inbox, not the job
  market. Say "the roles reaching you", never "the market is".

---

## `/jd-triage plan`

Per target

references/bootstrap.md

# Bootstrap

Three ways in. Default to **Quick Start** — a profile that exists is worth more
than a perfect profile the user abandoned halfway through.

| Mode | When | Cost |
|---|---|---|
| **Quick Start** | S1 (no file), `/jd-triage quickstart` | 5 questions |
| **Derive from examples** | `/jd-triage learn`, or offered when a profile is thin | Paste a few JDs |
| **Full** | S5 (`update` / `reset`), or user asks | All fields |

Write to `~/.openclaw/workspace/jd_criteria.md` using `assets/criteria-template.yaml`.
Field keys English; values in the user's language.

## Using presets

`assets/presets/*.yaml` are **menus, never defaults**. Pick the preset matching
the user's `role_family`, show the suggested traits and red-line starters as a
numbered list, and write only the lines the user selects — reworded however they
like. Never silently write a preset value. `axis_weights` are the one exception:
they are a starting distribution, applied unless the user changes them, and
mentioned once so the user knows they exist.

---

## Quick Start — 5 questions

Ask one at a time. Accept "skip" on any of them.

**1. Context.** "What kind of role, what market, and which languages can you work
in?" → `context.role_family`, `context.market`, `context.languages`.
From the market, infer `context.comp_convention` and **state the inference for
confirmation** ("I'll assume comp is quoted as an all-in annual number — correct?").

**2. Target.** "What titles are you looking for, and what should the organization
actually do?" → `soft_axes.target_title_keywords`, `soft_axes.target_domains`.

**3. Floors.** "What's the lowest offer you'd accept — and is that base or
all-in? Where can you work, and is remote acceptable?" → `hard_gates.comp_floor`
(amount, currency, period, basis), `hard_gates.locations`, `hard_gates.remote_ok`.

**4. Automatic no's.** "Anything that makes a role an instant no — and why?"
→ `hard_gates.red_lines`. Push for the *why* on each one; it is what makes
matching work across languages and rewordings. "None" is a valid answer.

**5. Anchors.** Use the preset's `vibe_prompt`. Ask for 1–3 organizations, teams,
or products the user admires, **each with one line on why**.
→ `soft_axes.vibe_anchors_positive`.

Then write the file and say plainly what is not yet filled:

> Saved. Org fit and Candidacy will show *info insufficient* until you add org
> traits and your skills — I'll ask for those the first time they matter.

### Just-in-time capture

Do not front-load the rest. Ask for a field the first time an evaluation
actually needs it, once, inline:

- **Skills** — before scoring Candidacy for the first time: "To score whether you
  can get this, I need your skills. List what you could be interviewed on today,
  and separately what you're actively learning." → `skills.mastered`,
  `skills.learning`. Write them to the file so this is asked only once.
- **Org traits** — the first time a JD's org type looks decision-relevant.
- **Negative anchors** — the
Github ReposUpdated 2d agoRank 70

AionUi

Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!

MCPOPENCLAW
Github ReposUpdated 6mo agoRank 70

activepieces

AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents

OPENCLAW
Github ReposUpdated 6mo agoRank 70

cherry-studio

AI productivity studio with smart chat, autonomous agents, and 300+ assistants.

MCPOPENCLAW
Github ReposUpdated 7mo agoRank 70

CopilotKit

The Frontend for Agents & Generative UI. React + Angular

OPENCLAW

Machine-readable data

The same record, as JSON, for agents and crawlers.

{
  "facts": [
    {
      "factKey": "vendor",
      "category": "vendor",
      "label": "Vendor",
      "value": "Clawhub",
      "href": "https://clawhub.ai/bwancoding/skills/jd-triage",
      "sourceUrl": "https://clawhub.ai/bwancoding/skills/jd-triage",
      "sourceType": "profile",
      "confidence": "medium",
      "observedAt": "2026-10-11T11:15:45.112Z",
      "isPublic": true
    },
    {
      "factKey": "protocols",
      "category": "compatibility",
      "label": "Protocol compatibility",
      "value": "OpenClaw",
      "href": "https://www.xpersona.co/api/v1/agents/clawhub-bwancoding-jd-triage/contract",
      "sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-bwancoding-jd-triage/contract",
      "sourceType": "contract",
      "confidence": "medium",
      "observedAt": "2026-10-11T11:15:45.112Z",
      "isPublic": true
    },
    {
      "factKey": "traction",
      "category": "adoption",
      "label": "Adoption signal",
      "value": "1.1K downloads",
      "href": "https://clawhub.ai/bwancoding/jd-triage",
      "sourceUrl": "https://clawhub.ai/bwancoding/jd-triage",
      "sourceType": "profile",
      "confidence": "medium",
      "observedAt": "2026-10-11T11:15:45.112Z",
      "isPublic": true
    },
    {
      "factKey": "latest_release",
      "category": "release",
      "label": "Latest release",
      "value": "1.1.1",
      "href": "https://clawhub.ai/bwancoding/jd-triage",
      "sourceUrl": "https://clawhub.ai/bwancoding/jd-triage",
      "sourceType": "release",
      "confidence": "medium",
      "observedAt": "2026-07-27T03:22:23.293Z",
      "isPublic": true
    },
    {
      "factKey": "handshake_status",
      "category": "security",
      "label": "Handshake status",
      "value": "UNKNOWN",
      "href": "https://www.xpersona.co/api/v1/agents/clawhub-bwancoding-jd-triage/trust",
      "sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-bwancoding-jd-triage/trust",
      "sourceType": "trust",
      "confidence": "medium",
      "observedAt": null,
      "isPublic": true
    }
  ],
  "events": [
    {
      "eventType": "release",
      "title": "Release 1.1.1",
      "description": "Fixes a language leak: a non-English posting in a non-English conversation came back with its verdict and headings in English. The screen now takes the reader's language including the tier; the English token stays in jd_history.md where history and compare parse it. No schema or scoring change.",
      "href": "https://clawhub.ai/bwancoding/jd-triage",
      "sourceUrl": "https://clawhub.ai/bwancoding/jd-triage",
      "sourceType": "release",
      "confidence": "medium",
      "observedAt": "2026-07-27T03:22:23.293Z",
      "isPublic": true
    }
  ]
}

Record generated Oct 11, 2026.

Sponsored

Ads related to JD - Triage and adjacent AI workflows.