Install
$ agentstack add skill-jain777-jobclaw-skills-triage-inbox ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
triage-inbox
Tell the user (or JobClaw) what each email is and what to do about it. Hard rules: [../_shared/RULES.md](../_shared/RULES.md). All enums, the decision table, the extraction-fields shape, and the suggested-action vocabulary live in [../../knowledge/status/taxonomy.md](../../knowledge/status/taxonomy.md) — read it first; don't re-derive.
Inputs
Single mode
- A pasted email:
from,subject,body, optionalthread(prior messages), optionaldate.
Batch mode
--in inbox/incoming.json:
``jsonc { "emails": [ { "email_id": "...", "from": "...", "subject": "...", "body": "...", "date": "YYYY-MM-DD", "thread": ["..."] } ] } ``
If the input has only a body (no from/subject), warn but proceed — class confidence will be low unless body is decisive.
Method
- Read the taxonomy. [
../../knowledge/status/taxonomy.md](../../knowledge/status/taxonomy.md) — the 10 classes, the extraction-fields contract, the suggested-action vocab.
- For each email, classify into exactly one class. Mutually exclusive; pick the most specific match (e.g., a "we received your application" auto-message is
info, notscreen; a take-home request isassessment, notinterview-invite). Use the body + subject + sender domain together — sender alone is unreliable.
- Extract fields per the taxonomy's
Extraction fieldsblock (only fields the email genuinely provides — never invent):
company,role,job_iddates[]— proposed slots / deadlines / start dates (ISO + time + tz + label)links[]—{ url, kind ∈ schedule|assessment|portal|other }asks[]— verbatim recruiter asks ("send updated CV", "share notice period")deadline— single hard cutoff if explicitsentiment ∈ {neutral, positive, negative}confidence ∈ {high, medium, low}— your own confidence in the classification
- Suggest one action from the taxonomy's vocab (
reply-schedule | reply-accept | reply-decline | reply-ask | reply-info | acknowledge | ignore | escalate). Map per the decision table; always suggestescalatefor classotheror any classification withconfidence: low.
- Apply guardrails.
offeremails → suggestreply-ask(acknowledge + buy time + recommend/coach-negotiation). Never suggestreply-acceptdirectly.assessment/interview-inviteemails with a deadline within 48h → bump the email'spriorityfield tourgentin the output (extension on the schema; downstream tooling can sort by it).- If the body looks like phishing (suspicious domain, prize wording, urgency + a link) → class
spamregardless of subject.
Output
inbox/triage-.json
{
"as_of": "YYYY-MM-DD",
"triaged": [
{
"email_id": "...",
"from": "...",
"subject": "...",
"class": "rejection | screen | interview-invite | assessment | offer | recruiter-outbound | info | request-info | spam | other",
"extraction": {
"company": "...", "role": "...", "job_id": "...",
"dates": [...], "links": [...], "asks": [...],
"deadline": "YYYY-MM-DD | null",
"sentiment": "neutral | positive | negative",
"confidence": "high | medium | low"
},
"suggested_action": "...",
"priority": "normal | urgent",
"notes": "string | null"
}
]
}
Stdout
A concise table per email: id · class · company/role · action · priority · confidence. Highlight urgent rows and any escalate rows for the user to review.
Anti-patterns
- Treating "we received your application" as
screen(it'sinfo). - Collapsing
screenandinterview-invite— they trigger different downstream actions. - Inventing
job_id,dates, orcompanynot in the source text. - Setting
confidence: highon ambiguous emails just to clear the queue. Be honest —lowis more useful. - Suggesting
reply-acceptfor anoffer(must bereply-ask+ recommend/coach-negotiation). - Emoji.
Rubric
- [ ] Class is one of the 10 taxonomy values, exactly.
- [ ] Every
extraction.*field is sourced from the email (ornull/[]). - [ ] Suggested action is from the taxonomy vocab and consistent with the decision table.
- [ ] No
offeris paired withreply-accept. - [ ]
confidence: lowrows are flagged withsuggested_action: escalate. - [ ] Urgent items (assessment / interview-invite with ≤48h deadline) marked
priority: urgent.
Next steps
Triaged. Next: /infer-status to update the funnel, then /draft-reply for the suggested action.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: jain777
- Source: jain777/jobclaw-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.