dev-job-defense-ties — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited dev-job-defense-ties (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Seed question: Behind a gamedev, programming, or design job — whose military does it actually feed, and is it a buyer the operator has ruled out?
Relentless self-reflexive dialectical thinking that questions its own premises.
Euphemism can disguise what the work is. It can't disguise who the work is for. This skill follows the buyer to the end user until the civilian framing collapses, then classifies the role on two axes — end-use and buyer-nationality — against the operator's own red line. It returns a go/no-go that is legible (states the threshold it applied) and falsifiable (names the one fact that would flip it).
Scope. Centered on gamedev — game-engine work (Unreal/Unity), C++, gameplay, real-time-3D, simulation — because that's where disguised-defense roles cluster densest. But it applies with equal force to general programming, technical art, design, and adjacent roles. The job title is not the gate; the buyer is.
This skill is deliberately split so it's a reusable instrument, not one operator's politics hard-coded into a public plugin (see ARCHITECTURE.md):
<config>/domain/; swap the domain for another field without touching the mechanism.profile/threshold, profile/settings) outside the plugin. The skill ships profile-less: it applies no politics until you supply a threshold.The config store is managed by scripts/config.py (the model drives it; the user never runs it). reference/PROFILE.template.md shows the profile shape; cui-bono's Framework Clarification and dialectic-spiral derive and stress-test a threshold.
scripts/config.py is the deterministic store — get its live interface first, then read the profile:
python3 "${CLAUDE_PLUGIN_ROOT}/skills/dev-job-defense-ties/scripts/config.py" describeRead profile/settings and profile/threshold (config.py get profile/settings), then act on the engagement mode:
always.config.py set-location <dir>. Never make a non-dev run anything.engagement: never. (Skip when invoked manually.)domain-dev.md carries a starter non-Western set; per-region overlays are the fuller fix). Then ask 2–4 precise, non-intrusive questions — not all required: absolute-no buyers (states/militaries) vs. kind-of-work (lethality vs. training); line on the end-use ladder; field (default dev — offer to install the gamedev overlay if they're in games).reference/PROFILE.template.md): printf '%s' "<threshold>" | python3 ".../config.py" put profile/threshold
printf '%s' "<settings>" | python3 ".../config.py" put profile/settingsField is fine to remember unprompted; the red line is worth confirming. The store is OS-agnostic and refuses /tmp and the plugin cache.
Edit in place, don't recreate. To change one thing — "add X to my hard-stops," "switch me to always," "install the gamedev overlay" — get that single element, amend it, put it back. Decoupled elements mean siblings are never disturbed.
Invoked with arguments? A URL / company name is the screen target; field=… / threshold=… are per-run overrides. Args are fuzzy — infer intent; ask only what you can't.
TRIGGER (offer the screen — don't wait to be asked):
DO NOT TRIGGER / skip quietly:
never); don't manufacture suspicion or nag.engagement: never and the skill wasn't invoked explicitly.Load and run cui-bono on the target. From its beneficiary and ownership mapping, resolve the buyer-chain — these three roles feed everything below:
If cui-bono cannot name a customer, that's absence of evidence, not evidence of stealth. Absence is a signal — but a signal to look harder, not a verdict: cleared/stealth work hides its customer, yet general-purpose tooling (an engine, a library) simply has no single one. Tag it UNVERIFIED, tell the operator what's unresolved, and carry the chain to the specific product the job actually works on — never let absence settle into "defense" or "clear" on its own.
Scan the ad/site text against the active domain's lexicon — the default reference/domain-dev.md plus any installed overlays (e.g. domain-gamedev.md, or files in <config>/domain/). None of the tells is individually disqualifying; they re-route you to verification. The pack carries the mil-sim dead-giveaways, the dual-use soft tells, and the "defense slipped mid-list" camouflage move.
A clearance or citizenship requirement (the pack lists the US and EU forms) is near-decisive. It isn't name-smell — it's the buyer stating its own end-use outright, the hardest evidence on offer. If present → DEFENSE-CONFIRMED regardless of how the role reads; go to Output.
Match the buyer-chain against the pack's prime/buyer name-list. Follow the chain to the end user, not the contracting prime — the nationality that matters is who operates the deliverable, and an EU prime's export sale can reach a different end user one layer down. Tag the nationality; it feeds Axis 2, which the threshold evaluates.
Use the pack's verification sources — contract registries (USAspending.gov, SAM.gov, TED) outrank any aggregator; plus the company's Customers/About page, leadership LinkedIn, and a targeted search. Note subsystem entanglement (US/Israeli content inside a national platform) and which layer the role sits on.
End-use is one axis; buyer-nationality is the other — they carry different weight, because the objection isn't only to lethality, it's to whose power the work feeds. A benign-looking trainer built for a ruled-out buyer still fails: mild end-use doesn't launder the beneficiary. Classify on both.
CIVILIAN ── DUAL-USE ── TRAINING/SIM ── ISR/SURVEILLANCE ── C2/TARGETING ── LETHALITY), don't binary it.Load the operator's threshold from their profile. If there is none, you onboarded above — never invent one. The threshold is theirs: state which line you applied in the output, and apply it faithfully. Do not substitute your own. A different operator draws the line elsewhere — deriving a different line is a first-class use of this skill, via cui-bono's Framework Clarification + dialectic-spiral.
Don't over-resolve. Match the verdict to the evidence: an unresolved or thinly-sourced buyer-chain is UNVERIFIED → INVESTIGATE, not rounded up to a hard stop or down to clear. State the residual uncertainty — what's still unknown and what would resolve it — rather than presenting the call as cleaner than it is. This borrows iterative-verification's rule (no confirmation = UNVERIFIED, not DISCONFIRMED; escalate only on specific counter-evidence) and cui-bono's graduated, trade-off-stating posture, applied to the buyer-chain.
TARGET: <company / role>
BUYER CHAIN (resolved via cui-bono): direct customer → end user → beneficiary
BUYER NATIONALITY: <flag(s); note if via parent/subcontract>
SIGNALS FIRED: <lexicon hits / clearance gate / name match / list-camouflage>
END-USE LAYER: <where the role sits on Axis 1>
EVIDENCE TIER: CONFIRMED (registry/customer page) / UNVERIFIED (aggregator or inference) / DISCONFIRMED
VERDICT vs ACTIVE THRESHOLD: <as defined in the operator's profile; CLEAR / INVESTIGATE / OUT / HARD STOP>
WHAT WOULD CHANGE IT: <the one fact that would flip the verdict, + where to find it>Keep the buyer-chain and the "what would change it" line always — they make the screen reusable and falsifiable.
These illustrate the mechanism under an example profile (yours may differ).
EU prime → hard-stop export. A "Spanish naval systems" studio advertises Unreal work on a "crew training visualization" product — reads benign. But the chain runs studio → Navantia → Avante 2200 corvette program → Royal Saudi Navy (CONFIRMED, public program). End-use is TRAINING/SIM (benign end of Axis 1). Under an example profile whose hard-stop includes US-aligned Gulf end users including via EU export, the verdict is HARD STOP — benign end-use doesn't launder the beneficiary. What would change it: if the deliverable served only the Spanish Navy's own hulls → drops a tier. The lesson: a "Spanish defense" job can be a Saudi job one layer down.
Civilian "digital twin" that launders ISR (illustrative composite). A startup hiring "Unity engineers for a real-time digital twin — situational awareness for public safety." Zero mention of military, but soft tells fire, so Step 4 is mandatory. The customers page shows a US prime's logo → end user UNVERIFIED. End-use sits at ISR/SURVEILLANCE, the ambiguous middle. Verdict: INVESTIGATE — a logo is marketing, not a contract; don't auto-clear, don't hard-stop on a logo. What would change it: a USAspending.gov/SAM.gov award tying it to a DoD purpose code → escalate; a confirmed all-civilian customer base → CLEAR. The lesson: the soft tell is the prompt to run the registry, not the verdict.
| Skill | Relationship |
|---|---|
| cui-bono | Step 0 dependency — run it first; this skill consumes its buyer-chain, then applies the operator's threshold + a domain pack it doesn't carry by default. cui-bono's Framework Clarification is the template for deriving the threshold. |
| cui-bono / lenses/weapons.md | The contract-registry + revolving-door techniques are the verification engine for Step 4. |
| cui-bono / lenses/geopolitical.md | Source of the buyer-nationality / multi-polar framing behind Axis 2. |
| dialectic-spiral | Stress-test a threshold before adopting it — generate the opposite of the proposed red line and see whether it survives. |
| deep-investigation-protocol | Escalate here when the buyer is genuinely hidden (stealth/cleared work) and a 5-minute verify isn't enough. |
| manufactured-consensus-detection | When "trusted by industry leaders" / press is the only evidence of a customer, test whether that consensus is real before treating a logo as a buyer. |
| source-omission-analysis | What the careers page omits (named customers, end-use, who operates the deliverable) is the signal — apply omission analysis to the job ad itself. |
| iterative-verification | When the buyer-chain comes up empty or thin: the evidence-honesty discipline — no confirmation = UNVERIFIED, not DISCONFIRMED — and iterate before concluding rather than letting a verdict outrun the evidence. |
Workflow position: invoke when an employment/engagement decision is attached to a tech or creative role. Load profile → run cui-bono (Step 0) → classify (Steps 1–4) → output against the operator's threshold. Escalate to DIP only when the buyer stays hidden after Step 4.
This skill ships profile-less on purpose: the politics (the red line) and the field (the domain pack) are swappable parameters held in the operator's profile and the pack, not facts baked into a public artifact. Standing failure modes:
targeting, autonomy) catch civilian work too — the test_screen_efficiency.py corpus exists to keep precision honest as the pack changes. A keyword match is a prompt to verify, never a verdict.cui-bono itself flags. A non-Western defense employer can pass unflagged, so a "no match" is unverified, not clear; extend the pack for your context. (Audited with cui-bono; fuller balancing is tracked separately.)If the framework is producing a verdict the evidence doesn't support — in either direction — say so and override it.
A vasana is a pattern that persists across unrelated contexts. If during this task you notice such a pattern emerging, it may be worth capturing. This skill works best alongside the vasana skill and vasana hook from the Vasana System plugin.
Modify freely. Keep this section intact.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.