Skip to content

Add STRIDE threat-model skill and Requirements Coworker persona - #597

Open
KhaiTrang1995 wants to merge 3 commits into
andrewyng:mainfrom
KhaiTrang1995:feat/threat-model-and-requirements-coworker
Open

Add STRIDE threat-model skill and Requirements Coworker persona#597
KhaiTrang1995 wants to merge 3 commits into
andrewyng:mainfrom
KhaiTrang1995:feat/threat-model-and-requirements-coworker

Conversation

@KhaiTrang1995

Copy link
Copy Markdown

What

  1. threat-model skill for the security persona — a design-time STRIDE
    threat model (trust boundaries, per-boundary STRIDE pass, likelihood×impact
    scoring, concrete mitigations). Complements the existing skills, which all
    scan code that already exists (semgrep-review, secret-scan); this one
    runs before there's anything to scan.
  2. New requirements persona (ships: false) with a brainstorm skill —
    an evidence-only interview (one topic at a time) that turns a raw idea into
    a structured spec at docs/<feature>/brainstorms/<idea-slug>.md. Vague or
    missing answers become <!-- TBD --> + an Open Question instead of an
    invented number/wording — never fills gaps with a plausible default.

Why

  • The security persona currently only reviews code that already exists.
    Threat modeling before implementation is a natural, low-risk extension —
    it's pure reasoning (no tool to drive), so it doesn't touch the
    drive-a-real-scanner contract the other skills are pinned to
    (tests/test_security_bundles.py::test_prompts_carry_the_positioning_guardrails
    etc.).
  • requirements/brainstorm fills a gap in the "Everyday work" use case from
    the README ("turn scattered notes into a shippable plan") — there's
    currently no persona for requirements-gathering. It ships false and is
    staged internal-only, same as other candidate personas (swe-lead,
    appsec-worker, …) — this PR does not touch the release lineup
    (test_release_lineup), that's an explicit product call for a maintainer
    to make.

Changes

  • coworker/personas/builtin/security/skills/threat-model/SKILL.md (new)
  • coworker/personas/builtin/security/manifest.md — add threat-model to
    skills:, one line in the system prompt pointing to it
  • coworker/personas/builtin/requirements/manifest.md (new, ships: false)
  • coworker/personas/builtin/requirements/skills/brainstorm/SKILL.md (new)
  • tests/test_security_bundles.py — add threat-model to the security
    bundle's expected skill set
  • tests/test_persona_registry.py — add requirements to the expected
    internal-build sidebar set
  • .gitignore — ignore untrack/ (local scratch)

Testing

  • Both manifests parse and pass validation through
    coworker.personas.manifest.load_manifest_file (tool names checked
    against the real CATALOG).
  • Both skill folders load correctly via coworker.skills.base.SkillLoader.
  • tests/test_persona_registry.py: 12/12 pass.
  • tests/test_security_bundles.py: the assertions that don't require the
    full SessionManager stack were reproduced and pass; I could not get the
    project's pinned aisuite fork installed in my sandbox to run the full
    suite (test_bundle_skills_stay_with_their_persona needs it) — would
    appreciate a CI/maintainer run to confirm that one

KhaiTrang1995 and others added 3 commits August 31, 2026 07:39
- security persona: new `threat-model` skill (STRIDE, trust boundaries,
  risk scoring, mitigations) for design-time threat modeling, complementing
  the existing scan-after-code-exists skills (semgrep-review, secret-scan).
  Added to the persona's `skills:` allowlist and to
  tests/test_security_bundles.py's BUNDLES fixture.
- new `requirements` persona (ships: false, pending owner review) with a
  `brainstorm` skill: an evidence-only interview that turns a raw idea into
  a structured spec (docs/<feature>/brainstorms/<idea-slug>.md), TBD +
  Open Questions instead of invented wording/limits/metrics. Staged
  internal-only like other candidate personas (swe-lead, appsec-worker,
  etc.) — added to the internal-sidebar set in
  tests/test_persona_registry.py, left out of the release lineup.
- .gitignore: ignore untrack/ (local scratch, not part of the repo).

Verified against the repo's own code: both manifests parse and validate
through coworker.personas.manifest (tool names checked against CATALOG),
both skill folders load via coworker.skills.base.SkillLoader, and
tests/test_persona_registry.py passes in full (12/12). The security-bundle
assertions that don't require the full SessionManager stack were
reproduced manually and pass; the one that does
(test_bundle_skills_stay_with_their_persona) needs a run in the project's
own venv to confirm.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
untrack/* doesn't belong in this feature PR — drop it, keep the PR scoped
to the threat-model skill and requirements persona.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant