Career Kb
Security Notice
This extension includes AI agent skills that can modify AI assistant behavior. Review the skill files before installing.
Retrieval, routing, and triage over a career-research knowledge base — 22
career-psychology extractions (1 practitioner AMA + 21 academic papers) across
the ama, inaction, and success-outcomes clusters, each with YAML
frontmatter (title, topics, key_constructs, summary) and a standardized
section layout. The corpus ships as bundled reference files (read at runtime
via context.extensionFile), so the model is self-contained and needs no
configuration.
Methods:
index— scan the cluster folders and build a queryable catalog from frontmattersearch— route a question or keywords to the most relevant sources (optional cluster filter)read— return a source's frontmatter plus its full body or one named sectionassess— triage a described situation into its problem family (inaction / indecision / indecisiveness / success-derailer / shock-transition), name the validated instrument (CARINAS, SCCI, EPCD), point to the sources to read, and give coping guidance; optionally score self-rated CARINAS items against published benchmarks
Ships the career skill for routing career questions to grounded sources.
2026.08.01.1
Fixes the HIGH latent bug characterized (pinned, not fixed) by the test backfill
below, tracked and resolved via the local career-kb-latent-bugs
issue-lifecycle model:
- Path traversal via
read'sfileargument (HIGH): whenfilecontained a/, it flowed verbatim throughreadRef()intocontext.extensionFile(references/${rel})thenDeno.readTextFile(...)with zero sanitization, so a value with..segments (e.g.../outside/some-file.md) escaped thereferences/directory into a sibling directory. Added a pureassertWithinRefs(rel)guard (next toslugifyin the Helpers section) that rejects absolute paths (leading/), any.././empty path segment, and backslashes, and calls it at the singlereadRef()chokepoint BEFORE building the on-disk path -- this confinesread,loadRaw,loadSources, andsourceListin one place, independent of (and regardless of) any downstreamcontext.extensionFileconfinement, as defense in depth. Legitimatecluster/file.mdrelative reads and the bareindex.jsonlookup are unaffected. - Bumped
manifest.yamlandmodel.versionto CalVer2026.08.01.1, in sync. - Flipped the LB1 pin in
career_kb_adversarial_test.tsfrom success-characterization toassertRejects(asserting zero resource writes on rejection), and added a second pin for four extra synthetic traversal shapes (absolute/etc/passwd, nested../.., mixeda/../../b,./x) -- both assert the rejection is the guard's own"Invalid reference path"message specifically (not an incidental filesystem error), verified genuinely RED against the unmodified source before the guard was wired in. Added focused unit tests forassertWithinRefsincareer_kb_test.ts(acceptsinaction/career-inaction.mdandindex.json; rejects../x,/etc/passwd,a/../../b,./x, and a backslash variant, naming the offending input in each thrown message). The committedfixtures/outside/fixture-escape-target.mdstays as the now-unreachable synthetic attack target. LB2-LB7 pins are unchanged -- they remain deferred and still characterize current behavior, still tracked by the localcareer-kb-latent-bugsissue-lifecycle model (NEVER filed to the swamp.club Lab).
Global Arguments
| Argument | Type | Description |
|---|---|---|
| clusters | array | Optional filter restricting index/search to these bundled clusters. |
| Argument | Type | Description |
|---|---|---|
| query | string | A question or keywords to route |
| cluster? | string | Restrict to one cluster: ama | inaction | success-outcomes |
| topK? | number | How many hits to return (default 6) |
| Argument | Type | Description |
|---|---|---|
| file | string | Relative path (inaction/career-inaction.md), filename, or slug |
| section? | string | Optional section name to extract (case-insensitive, partial match) |
| Argument | Type | Description |
|---|---|---|
| situation | string | Free-text description of the career situation to triage |
| carinas? | array | Optional self-ratings for the 8 CARINAS items, each 1–5 (see inaction/career-inaction-scale.md for the items) |
Resources
Release 2026.07.16.2 — align model versions with manifests
Maintenance release across the @magistr extensions. For most packages this
carries no functional change: the only edit is the model's version: field,
brought back in line with its manifest version so the published model type
version and the package version no longer drift.
Functional changes in this release are limited to:
anime-cron: normalizeTitle now strips a ": subtitle" suffix and a trailing parenthesized year before comparison, fixing dedup false-misses where the torrent title carries a subtitle or year that the AniList romaji does not.
arckit: first publish. Standalone ArcKit port — a 12-phase architecture governance state machine with 65 bundled templates, driven by a bundled skill.
Also tracks three extensions (kaiten, observability-agent, music-library) that previously existed only as untracked working-tree directories, recovered from stashes.
Merge pull request #37 from umag/feat/career-kb-extension
Add @magistr/career-kb extension
- Has README or module doc2/2earned
- README has a code example1/1earned
- README is substantive1/1earned
- Most symbols documented1/1earned
- No slow types (deprecated)1/1earned
- Dependencies pass trust audit2/2earned
- Has description1/1earned
- Platform support declared (or universal)2/2earned
- License declared1/1earned
- Verified public repository2/2earned