{"id":48464103,"url":"https://github.com/davidmatousek/tachi","last_synced_at":"2026-05-02T02:11:03.933Z","repository":{"id":346063178,"uuid":"1188280909","full_name":"davidmatousek/tachi","owner":"davidmatousek","description":"Automated threat modeling toolkit — STRIDE + AI-specific threats in one command","archived":false,"fork":false,"pushed_at":"2026-04-25T18:25:04.000Z","size":85592,"stargazers_count":51,"open_issues_count":12,"forks_count":9,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-04-25T18:29:11.184Z","etag":null,"topics":["agentic-security","ai-security","attack-trees","claude-code","cybersecurity","devsecops","llm-security","sarif","security","stride","threat-modeling"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/davidmatousek.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-21T21:29:30.000Z","updated_at":"2026-04-25T18:24:25.000Z","dependencies_parsed_at":null,"dependency_job_id":"b0b7358e-eadc-4b60-87e2-9c866869ff34","html_url":"https://github.com/davidmatousek/tachi","commit_stats":null,"previous_names":["davidmatousek/tachi"],"tags_count":37,"template":false,"template_full_name":null,"purl":"pkg:github/davidmatousek/tachi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidmatousek%2Ftachi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidmatousek%2Ftachi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidmatousek%2Ftachi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidmatousek%2Ftachi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/davidmatousek","download_url":"https://codeload.github.com/davidmatousek/tachi/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidmatousek%2Ftachi/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32394478,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-28T14:34:11.604Z","status":"ssl_error","status_checked_at":"2026-04-28T14:32:37.009Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agentic-security","ai-security","attack-trees","claude-code","cybersecurity","devsecops","llm-security","sarif","security","stride","threat-modeling"],"created_at":"2026-04-07T04:00:33.626Z","updated_at":"2026-05-02T02:11:03.918Z","avatar_url":"https://github.com/davidmatousek.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# tachi\n\n**Automated threat modeling sidecar for your projects.**\n\n[![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE)\n[![GitHub release](https://img.shields.io/github/v/release/davidmatousek/tachi)](https://github.com/davidmatousek/tachi/releases)\n[![Built with AOD Kit](https://img.shields.io/badge/built%20with-AOD%20Kit-blueviolet.svg)](https://github.com/davidmatousek/agentic-oriented-development-kit)\n\n**Get started**: [Quick Start](#quick-start) | [Developer Guide](docs/guides/DEVELOPER_GUIDE_TACHI.md) (full walkthrough with worked examples)\n\n---\n\n## What is tachi?\n\ntachi is a threat modeling sidecar that you add to any project. It dispatches 12 specialized threat agents against your architecture description and produces a complete threat model in one command. Five post-pipeline commands enrich your results: `/tachi.risk-score` for quantitative scoring, `/tachi.compensating-controls` for codebase control analysis, `/tachi.infographic` for visual risk diagrams, `/tachi.security-report` for a professional PDF assessment booklet, and `/tachi.architecture` for automated architecture description generation.\n\n- **11 threat categories**: 6 STRIDE + 3 LLM-specific + 2 Agentic\n- **MAESTRO layer mapping**: CSA seven-layer taxonomy (L1-L7) for agentic AI threat classification\n- **5 input formats**: Mermaid, free-text, ASCII, PlantUML, C4\n- **6 commands, 20+ artifacts**: structured findings, SARIF, narrative report, attack trees, risk scores, compensating controls, 5 infographic templates, PDF security report\n- **Baseline delta tracking**: Compare runs to track new, resolved, and unchanged findings over time\n- **Works with any stack**: tachi analyzes architecture, not code\n\ntachi is built with the [Agentic Oriented Development Kit (AOD Kit)](https://github.com/davidmatousek/agentic-oriented-development-kit), a governance framework for AI agent-assisted development.\n\n![Threat Risk Funnel](examples/agentic-app/sample-report/threat-risk-funnel.jpg)\n\n---\n\n## Community\n\n- **Questions, ideas, and feature requests** → [GitHub Discussions](https://github.com/davidmatousek/tachi/discussions)\n- **Reproducible bugs** → [GitHub Issues](https://github.com/davidmatousek/tachi/issues)\n- **Security vulnerabilities** → [private advisory](https://github.com/davidmatousek/tachi/security/advisories/new) (do not post publicly)\n- **Real-world usage** → [In the Wild](https://github.com/davidmatousek/tachi/discussions/categories/in-the-wild) — tell me how you're using tachi, anonymized is fine\n\nIf you're new here, start with the [Welcome thread](https://github.com/davidmatousek/tachi/discussions) for how the board is organized.\n\n---\n\n## Prerequisites\n\ntachi requires two external CLIs for full functionality. Both are required — `typst` compiles the PDF security report and `@mermaid-js/mermaid-cli` (`mmdc`) renders attack path diagrams. See [ADR-022](docs/architecture/02_ADRs/ADR-022-mmdc-hard-prerequisite.md) for the rationale.\n\n**macOS**:\n\n```bash\nbrew install typst\nnpm install -g @mermaid-js/mermaid-cli\n```\n\n**Linux** (Debian/Ubuntu):\n\n```bash\napt install typst   # or: cargo install typst-cli / dnf install typst on Fedora\nnpm install -g @mermaid-js/mermaid-cli\n```\n\n**WSL** (use your distro's package manager, same as Linux):\n\n```bash\napt install typst\nnpm install -g @mermaid-js/mermaid-cli\n```\n\n`/tachi.security-report` aborts at preflight with a clear install command if either CLI is missing when attack-trees are present.\n\n---\n\n## Quick Start\n\n### 1. Clone tachi (one-time)\n\n```bash\ngit clone https://github.com/davidmatousek/tachi.git ~/Projects/tachi\n```\n\n### 2. Add tachi to your project\n\nFrom your project root:\n\n```bash\n~/Projects/tachi/scripts/install.sh\n```\n\nTo install a specific version:\n\n```bash\n~/Projects/tachi/scripts/install.sh --version v4.27.0 # x-release-please-version\n```\n\nIf tachi is cloned to a non-default location:\n\n```bash\n~/Projects/tachi/scripts/install.sh --source /path/to/tachi\n```\n\n\u003cdetails\u003e\n\u003csummary\u003eManual install (alternative)\u003c/summary\u003e\n\n```bash\n# Agents (threat analysis engine)\ncp -r ~/Projects/tachi/.claude/agents/tachi/ .claude/agents/tachi/\n\n# Commands (6 slash commands)\nmkdir -p .claude/commands\nfor cmd in tachi.threat-model tachi.risk-score tachi.compensating-controls tachi.infographic tachi.security-report tachi.architecture; do\n  cp ~/Projects/tachi/.claude/commands/$cmd.md .claude/commands/\ndone\n\n# Schemas, templates, references, and brand assets\ncp -r ~/Projects/tachi/schemas/ schemas/\ncp -r ~/Projects/tachi/templates/ templates/\nmkdir -p adapters/claude-code/agents\ncp -r ~/Projects/tachi/adapters/claude-code/agents/references/ adapters/claude-code/agents/references/\ncp -r ~/Projects/tachi/brand/ brand/\n\n# Developer guide\nmkdir -p docs/guides\ncp ~/Projects/tachi/docs/guides/DEVELOPER_GUIDE_TACHI.md docs/guides/\n```\n\n\u003c/details\u003e\n\nSee [`INSTALL_MANIFEST.md`](INSTALL_MANIFEST.md) for the full list of distributable files.\n\n### 3. Restart Claude Code\n\nAfter copying the files, **restart Claude Code** (close and reopen the VS Code window, or start a new CLI session) so it picks up the new agents and commands.\n\nIf you want infographic images (`.jpg`), set the `GEMINI_API_KEY` environment variable with a key from [Google AI Studio](https://aistudio.google.com/apikey). This is optional — all text-based outputs work without it.\n\n### 4. Create your architecture file (or let Claude Code do it)\n\nCreate `docs/security/architecture.md` describing your system. You can write it yourself or ask Claude Code:\n\n```\nInvestigate this repository's architecture -- source code, config files, infrastructure\ndefinitions, READMEs -- and create docs/security/architecture.md as a Mermaid flowchart\nwith all major components, data flows, protocols, and trust boundaries.\n```\n\ntachi auto-detects the format. Mermaid, free-text, ASCII, PlantUML, and C4 are all supported.\n\n### 5. Run your first threat model\n\n```\n/tachi.threat-model\n```\n\nThat's it. One command. tachi validates the setup, reads your architecture, dispatches 12 threat agents, and writes everything to a timestamped folder under `docs/security/`.\n\n### 6. Review your results\n\n| File | Source | What It Contains |\n|------|--------|-----------------|\n| `threats.md` | `/tachi.threat-model` | Primary threat model -- findings, coverage matrix, MAESTRO layers, risk summary |\n| `threats.sarif` | `/tachi.threat-model` | SARIF 2.1.0 for GitHub Code Scanning and CI/CD integration |\n| `threat-report.md` | `/tachi.threat-model` | Narrative report with executive summary and remediation roadmap |\n| `attack-trees/` | `/tachi.threat-model` | One Mermaid attack tree per Critical/High finding |\n| `risk-scores.md` | `/tachi.risk-score` | Quantitative risk scores with CVSS, exploitability, scalability, reachability |\n| `risk-scores.sarif` | `/tachi.risk-score` | SARIF 2.1.0 with composite scores as `security-severity` per finding |\n| `compensating-controls.md` | `/tachi.compensating-controls` | Detected codebase controls, residual risk, missing control recommendations |\n| `compensating-controls.sarif` | `/tachi.compensating-controls` | SARIF 2.1.0 with residual risk as `security-severity` per finding |\n| `threat-baseball-card.jpg` | `/tachi.infographic` | Baseball Card risk dashboard (requires `GEMINI_API_KEY`) |\n| `threat-system-architecture.jpg` | `/tachi.infographic` | Annotated architecture diagram with finding legend |\n| `threat-risk-funnel.jpg` | `/tachi.infographic` | Risk distribution funnel by severity |\n| `threat-maestro-stack.jpg` | `/tachi.infographic` | MAESTRO layer stack visualization (agentic systems only) |\n| `threat-maestro-heatmap.jpg` | `/tachi.infographic` | MAESTRO layer x severity heat map (agentic systems only) |\n| `security-report.pdf` | `/tachi.security-report` | Professional PDF booklet with all artifacts assembled |\n\nStart with `threats.md` Section 7 -- Recommended Actions. Then run `/tachi.risk-score` for quantitative prioritization, `/tachi.compensating-controls` to detect existing defenses, `/tachi.infographic` for visual risk diagrams, and `/tachi.security-report` to assemble everything into a PDF booklet. Work through Critical findings first, then High.\n\n\u003e **Full Walkthrough**: The [Developer Guide](docs/guides/DEVELOPER_GUIDE_TACHI.md) covers the complete 5-step risk lifecycle with worked examples, advanced options, and CI/CD integration.\n\n---\n\n## Command Options\n\n### /tachi.threat-model\n\nRuns the 5-phase threat modeling pipeline: scope, determine threats, determine countermeasures, assess, and report. Produces `threats.md`, `threats.sarif`, `threat-report.md`, `attack-trees/`, and `attack-chains.md` (conditional, when cross-layer chains are detected). Findings include MAESTRO layer classification for agentic AI components. Phase 3.5 cross-layer correlation detects attack chains spanning multiple MAESTRO layers with chain-breaking control recommendations. Automatically detects baseline from previous runs for delta tracking.\n\n```bash\n# Default -- uses docs/security/architecture.md\n/tachi.threat-model\n\n# Specify architecture file\n/tachi.threat-model path/to/my-architecture.md\n\n# Custom output directory\n/tachi.threat-model docs/security/architecture.md --output-dir reports/security/\n\n# Version-tagged output for a release\n/tachi.threat-model docs/security/architecture.md --version v1.0.0\n\n# Explicit baseline for delta comparison\n/tachi.threat-model docs/security/architecture.md --baseline docs/security/2026-03-01/threats.md\n```\n\n### /tachi.risk-score\n\nEnriches threat model output with four-dimensional quantitative risk scores (CVSS 3.1, exploitability, scalability, reachability) and governance fields (owner, SLA, disposition, review date). Produces `risk-scores.md` and `risk-scores.sarif`.\n\n```bash\n# Score threats in the default location\n/tachi.risk-score\n\n# Score threats in a specific directory\n/tachi.risk-score docs/security/2026-03-27/\n\n# Custom output directory\n/tachi.risk-score docs/security/2026-03-27/ --output-dir reports/risk/\n```\n\n### /tachi.compensating-controls\n\nScans a target codebase against scored threats to detect existing security controls, calculate residual risk, and recommend missing controls. Requires `/tachi.risk-score` output as input. Produces `compensating-controls.md` and `compensating-controls.sarif`.\n\n```bash\n# Scan current project against risk scores in the default location\n/tachi.compensating-controls\n\n# Scan against risk scores in a specific directory\n/tachi.compensating-controls docs/security/2026-03-27/\n\n# Scan a different codebase\n/tachi.compensating-controls docs/security/2026-03-27/ --target ~/Projects/my-app/\n\n# Custom output directory\n/tachi.compensating-controls docs/security/2026-03-27/ --output-dir reports/controls/\n```\n\n### /tachi.infographic\n\nGenerates visual threat infographic specifications and presentation-ready images. Auto-detects the richest data source in the output directory (prefers `compensating-controls.md` \u003e `risk-scores.md` \u003e `threats.md`). Produces spec markdown and `.jpg` images (images require `GEMINI_API_KEY`).\n\n**Templates**: `baseball-card`, `system-architecture`, `risk-funnel`, `maestro-stack`, `maestro-heatmap`, `all`\n\n```bash\n# Generate all templates (auto-includes MAESTRO if data present)\n/tachi.infographic\n\n# Generate from a specific directory\n/tachi.infographic docs/security/2026-03-27/\n\n# Generate a specific template\n/tachi.infographic docs/security/2026-03-27/ --template baseball-card\n/tachi.infographic docs/security/2026-03-27/ --template risk-funnel\n\n# Generate both MAESTRO templates\n/tachi.infographic docs/security/2026-03-27/ --template maestro\n```\n\n### /tachi.security-report\n\nAssembles all pipeline artifacts into a professional multi-page PDF security assessment booklet. Auto-detects available artifacts and conditionally includes pages. Requires `typst` CLI for PDF compilation and `mmdc` (Mermaid CLI) for attack path and attack chain diagram rendering (hard prerequisite per ADR-022 when diagrams are present).\n\n**Page types** (conditional, based on available artifacts):\nCover, Disclaimer, Table of Contents, Risk Methodology, Assessment Scope, Executive Summary, Attack Path Analysis, Attack Chain Diagrams, MAESTRO Findings, Infographic pages (full-bleed), Findings Detail, Control Coverage, Remediation Roadmap\n\n```bash\n# Generate PDF from the default location\n/tachi.security-report\n\n# Generate from a specific directory\n/tachi.security-report docs/security/2026-03-27/\n\n# Custom output path\n/tachi.security-report docs/security/2026-03-27/ --output reports/assessment.pdf\n```\n\n---\n\n## How It Works\n\ntachi uses a multi-agent orchestration pattern. The orchestrator parses your architecture, identifies components and data flows, then dispatches the right combination of 12 threat agents per component:\n\n| Component Type | STRIDE Agents | AI Agents |\n|---------------|---------------|-----------|\n| External Entity (users, APIs) | S, R | -- |\n| Process (servers, agents) | S, T, R, I, D, E | LLM + AG if AI keywords detected |\n| Data Store (databases, caches) | T, I, D | -- |\n| Data Flow (API calls, messages) | T, I, D | -- |\n\nAI agents activate when component names or descriptions contain keywords like \"LLM\", \"agent\", \"orchestrator\", \"MCP\", \"tool server\", \"embedding\", \"RAG\", etc.\n\nAfter all agents report, the orchestrator deduplicates findings, runs cross-agent correlation, computes risk ratings, and generates the output suite.\n\n### MAESTRO Layer Classification\n\nFor agentic AI systems, tachi maps each finding to the [CSA MAESTRO](https://cloudsecurityalliance.org/) seven-layer taxonomy:\n\n| Layer | Name | Scope |\n|-------|------|-------|\n| L1 | Foundation Model | Pre-trained LLMs, inference engines |\n| L2 | Data Operations | Vector stores, RAG pipelines, embeddings |\n| L3 | Agent Framework | Orchestrators, tool servers, MCP |\n| L4 | Deployment Infrastructure | API gateways, containers, networking |\n| L5 | Evaluation and Observability | Audit logging, monitoring, anomaly detection, forensics |\n| L6 | Security and Compliance | Auth, guardrails, rate limiting, encryption, IAM |\n| L7 | Agent Ecosystem | Multi-agent coordination, delegation, chat UIs, API endpoints |\n\nMAESTRO layers appear in `threats.md`, propagate through all downstream commands, and power the `maestro-stack` and `maestro-heatmap` infographic templates.\n\n### Agentic Pattern Synthesis\n\nFor multi-agent architectures, tachi's Phase 3.6 Pattern Synthesis Engine (per [ADR-026](docs/architecture/02_ADRs/ADR-026-pattern-classification-mechanism.md)) classifies findings into the six canonical CSA MAESTRO cross-cutting agentic patterns:\n\n| Pattern | Canonical Definition |\n|---------|----------------------|\n| `agent_collusion` | Multiple compromised agents coordinate to achieve malicious objectives |\n| `emergent_behavior` | Unpredictable behaviors arising from multi-agent interactions (cascades, feedback amplification, drift) |\n| `temporal_attack` | Persistent-state exploits: sleeper agents, gradual corruption, seasonal exploitation |\n| `trust_exploitation` | Inter-agent identity spoofing, reputation manipulation, trust chain attacks |\n| `communication_vulnerability` | Inter-agent message interception, protocol manipulation, routing attacks |\n| `resource_competition` | Resource monopolization, priority manipulation, coordination disruption |\n\nEach finding receives a new `agentic_pattern` enum field (schema 1.4) during Phase 3.6 — gated by the multi-agent predicate (≥2 agentic/LLM components, inter-agent data flow, or explicit multi-agent keywords in the architecture description). Pattern assignments appear in `threats.md` Section 7 (Pattern column), Section 4b (Findings by Agentic Pattern), `threat-report.md` Section 7 (Agentic Pattern Analysis narrative), and SARIF `maestro-pattern:\u003cname\u003e` tags mirroring the existing `maestro-layer:\u003cL#\u003e` convention. The deterministic classification rule table and the multi-agent gate predicate live in [`maestro-agentic-patterns-shared.md`](.claude/skills/tachi-shared/references/maestro-agentic-patterns-shared.md).\n\nPreviously-uncovered patterns (Agent Collusion, Temporal Attacks, Emergent Behavior) that are not captured by any individual detection agent surface via net-new findings with the `AGP-NN` id prefix, generated deterministically when the architecture satisfies a rule's topology preconditions but no existing finding carries the pattern label.\n\n### Baseline Delta Tracking\n\nWhen you run `/tachi.threat-model` on a system that already has a previous run, tachi automatically detects the baseline and computes a delta: new findings, resolved findings, unchanged findings, and updated findings. This lets you track risk posture changes over time without manual diffing.\n\n---\n\n## Threat Categories\n\n### STRIDE (6 categories)\n\n| Category | Threat | Example |\n|----------|--------|---------|\n| **S**poofing | Identity impersonation | Stolen API key used to make authenticated requests |\n| **T**ampering | Unauthorized data modification | SQL injection modifying database records |\n| **R**epudiation | Missing accountability | User denies triggering an expensive operation, no logs exist |\n| **I**nformation Disclosure | Data exposure | Error messages leaking internal architecture details |\n| **D**enial of Service | Availability attacks | Request flooding exhausting connection pools |\n| **E**levation of Privilege | Unauthorized access | Regular user accessing admin endpoints |\n\n### AI-Specific (5 categories)\n\n| Category | Threat | Example |\n|----------|--------|---------|\n| **Prompt Injection** (LLM) | Adversarial inputs hijacking LLM behavior | Hidden instructions in a document causing the LLM to leak its system prompt |\n| **Data Poisoning** (LLM) | Corrupted training/RAG data | Attacker modifying knowledge base documents to spread misinformation |\n| **Model Theft** (LLM) | Model extraction | Competitor reverse-engineering your fine-tuned model via API queries |\n| **Agent Autonomy** (AG) | Insufficient oversight | AI agent sending 500 emails without human approval |\n| **Tool Abuse** (AG) | Tool misuse or manipulation | Malicious plugin exfiltrating source code when invoked |\n\n---\n\n## Examples\n\nThe [`examples/`](examples/) directory contains complete threat models across different input formats and architectures:\n\n| Example | Input Format | Architecture | Threat Categories |\n|---------|-------------|-------------|-------------------|\n| [Agentic App](examples/agentic-app/) | Mermaid | LLM orchestrator + MCP tools | STRIDE + AI + MAESTRO |\n| [Mermaid Agentic App](examples/mermaid-agentic-app/) | Mermaid | Multi-agent system | STRIDE + AI |\n| [Web App](examples/web-app/) | Mermaid | Traditional web application | STRIDE |\n| [Microservices](examples/microservices/) | Mermaid | Cross-service architecture | STRIDE |\n| [ASCII Web API](examples/ascii-web-api/) | ASCII | REST API with database | STRIDE |\n| [Free-text Microservice](examples/free-text-microservice/) | Free-text | Event-driven microservice | STRIDE |\n\nThe agentic-app example includes a [complete sample report](examples/agentic-app/sample-report/) showing every artifact the pipeline produces -- structured findings, SARIF, narrative report, attack trees, cross-layer attack chains, risk scores, compensating controls, and infographics:\n\n![Threat Baseball Card](examples/agentic-app/sample-report/threat-baseball-card.jpg)\n\n![System Architecture](examples/agentic-app/sample-report/threat-system-architecture.jpg)\n\n![Risk Funnel](examples/agentic-app/sample-report/threat-risk-funnel.jpg)\n\n---\n\n## Integration Reference\n\n| Resource | Location | Purpose |\n|----------|----------|---------|\n| Interface Contract | [`docs/INTERFACE-CONTRACT.md`](docs/INTERFACE-CONTRACT.md) | Input formats, invocation protocol, output structure |\n| Output Templates | [`templates/tachi/`](templates/tachi/) | Canonical output structures and Typst PDF templates |\n| Schemas | [`schemas/`](schemas/) | Machine-readable contracts ([finding.yaml](schemas/finding.yaml), [input.yaml](schemas/input.yaml), [output.yaml](schemas/output.yaml), [risk-scoring.yaml](schemas/risk-scoring.yaml)) |\n| Taxonomy Crosswalk | [`schemas/taxonomy/`](schemas/taxonomy/README.md) | Machine-readable catalog of OWASP/MITRE/NIST/CWE IDs + cross-framework crosswalk (Feature 180 F-A1) |\n| Source Attribution | [`docs/architecture/02_ADRs/ADR-028-source-attribution-schema-extension.md`](docs/architecture/02_ADRs/ADR-028-source-attribution-schema-extension.md) | Optional `source_attribution` finding field (schema 1.5) citing F-A1 framework IDs — contract only (Feature 189 F-A2) |\n| Threat Agents | [`.claude/agents/tachi/`](.claude/agents/tachi/) | 12 threat agents (7 STRIDE + 3 LLM + 2 Agentic) + utility agents |\n| Commands | [`.claude/commands/`](.claude/commands/) | 6 slash commands: tachi.threat-model, tachi.risk-score, tachi.compensating-controls, tachi.infographic, tachi.security-report, tachi.architecture |\n| Developer Guide | [`docs/guides/DEVELOPER_GUIDE_TACHI.md`](docs/guides/DEVELOPER_GUIDE_TACHI.md) | Full walkthrough with worked examples |\n\n---\n\n## Known Issues\n\n### Finding count variance between runs\n\nSuccessive threat model runs on the same architecture may produce slightly different finding counts (typically +/- 10%). This is expected behavior with LLM-based analysis.\n\n**What's consistent**: Core findings across all STRIDE and AI categories. The same high-severity threats will appear in every run.\n\n**What varies**: Borderline findings in the long tail -- a Medium-severity finding like \"missing correlation ID on external API calls\" may appear in one run but not the next, depending on how the agent reasons through the architecture.\n\n**Why this happens**: Each of the 12 threat agents makes independent LLM calls. LLM output is non-deterministic by nature, so agents may surface slightly different findings on each invocation.\n\n**If you need higher consistency**:\n- Run twice and diff the results to catch edge cases\n- Use a previous run's `threats.md` as a baseline for comparison\n- Treat the threat model as a living document that improves with each run\n\n---\n\n## Built with AOD Kit\n\ntachi is built with the [Agentic Oriented Development Kit (AOD Kit)](https://github.com/davidmatousek/agentic-oriented-development-kit), a governance framework for AI agent-assisted development. AOD Kit provides the SDLC Triad methodology (PM + Architect + Team Lead sign-offs), quality gates, and structured workflows that govern how tachi itself is developed and maintained.\n\n---\n\n## Releases\n\nReleases are automated via [release-please](https://github.com/googleapis/release-please). When conventional commits (`feat:`, `fix:`, `docs:`, etc.) are merged to `main`, release-please creates a **Release PR** with auto-generated CHANGELOG entries and the next semantic version. Merging the Release PR creates the git tag and GitHub Release.\n\nTo install a specific version: `install.sh --version v4.27.0` \u003c!-- x-release-please-version --\u003e\n\n---\n\n## Running Tests\n\ntachi uses pytest for Python script tests under `tests/scripts/`. To run the test suite:\n\n```bash\npip install -r requirements-dev.txt\nmake test\n```\n\nThis runs `pytest tests/scripts/ --cov=scripts --cov-report=term-missing`. Tests are required by Constitution Principle VI (Testing Excellence, ≥80% coverage).\n\n---\n\n## Contributing\n\nWe welcome contributions. See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\n---\n\n## License\n\nApache 2.0 License. See [LICENSE](LICENSE) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavidmatousek%2Ftachi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdavidmatousek%2Ftachi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavidmatousek%2Ftachi/lists"}