Add STRIDE threat-model skill and Requirements Coworker persona - #597
Open
KhaiTrang1995 wants to merge 3 commits into
Open
Add STRIDE threat-model skill and Requirements Coworker persona#597KhaiTrang1995 wants to merge 3 commits into
KhaiTrang1995 wants to merge 3 commits into
Conversation
- 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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
threat-modelskill for thesecuritypersona — a design-time STRIDEthreat 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 oneruns before there's anything to scan.
requirementspersona (ships: false) with abrainstormskill —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 ormissing answers become
<!-- TBD -->+ an Open Question instead of aninvented number/wording — never fills gaps with a plausible default.
Why
securitypersona 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_guardrailsetc.).
requirements/brainstormfills a gap in the "Everyday work" use case fromthe README ("turn scattered notes into a shippable plan") — there's
currently no persona for requirements-gathering. It ships
falseand isstaged 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 maintainerto make.
Changes
coworker/personas/builtin/security/skills/threat-model/SKILL.md(new)coworker/personas/builtin/security/manifest.md— addthreat-modeltoskills:, one line in the system prompt pointing to itcoworker/personas/builtin/requirements/manifest.md(new,ships: false)coworker/personas/builtin/requirements/skills/brainstorm/SKILL.md(new)tests/test_security_bundles.py— addthreat-modelto thesecuritybundle's expected skill set
tests/test_persona_registry.py— addrequirementsto the expectedinternal-build sidebar set
.gitignore— ignoreuntrack/(local scratch)Testing
coworker.personas.manifest.load_manifest_file(tool names checkedagainst the real
CATALOG).coworker.skills.base.SkillLoader.tests/test_persona_registry.py: 12/12 pass.tests/test_security_bundles.py: the assertions that don't require thefull
SessionManagerstack were reproduced and pass; I could not get theproject's pinned
aisuitefork installed in my sandbox to run the fullsuite (
test_bundle_skills_stay_with_their_personaneeds it) — wouldappreciate a CI/maintainer run to confirm that one