diff --git a/.github/workflows/agentsec-gate.yml b/.github/workflows/agentsec-gate.yml
index 3d8a6dc..1c716f3 100644
--- a/.github/workflows/agentsec-gate.yml
+++ b/.github/workflows/agentsec-gate.yml
@@ -10,7 +10,7 @@
#
# jobs:
# purple:
-# uses: trionnemesis/AgentSec/.github/workflows/agentsec-gate.yml@v0.1.0
+# uses: trionnemesis/AgentSec/.github/workflows/agentsec-gate.yml@v0.2.0
# with:
# target: order-agent-staging
# profile: pr
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 9e57721..7900e2b 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -1,6 +1,6 @@
# Cut a release from a version tag.
#
-# git tag v0.1.0 && git push origin v0.1.0
+# git tag v0.2.0 && git push origin v0.2.0
#
# Builds the sdist and wheel, refuses a tag that disagrees with
# pyproject.toml, and publishes a GitHub Release with the artifacts
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9267b81..795f52e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,98 @@ Notable changes, newest first. The format follows
[`docs/roadmap.md`](docs/roadmap.md): integrations marked 🟡 there are first
drafts even when they appear in a release.
+## [0.2.0] — 2026-08-06
+
+The release that gives AgentSec a first step. In 0.1.0 the entry point was
+`agentsec run`, which could not be reached without a configured target — an
+allowlist entry, a staging agent, usually a SIEM. An engineer who wanted to know
+whether their repository was exposed had to finish someone else's sprint first.
+
+`agentsec scan` needs a checkout and nothing else.
+
+```
+agentsec init → agentsec scan → agentsec scan --verify --target … → dashboard
+```
+
+### Added
+
+- **Repository risk plane** (`agentsec init` / `agentsec scan`). Twelve
+ deterministic rules read what a repository gives an AI agent — project
+ instructions, subagent definitions, skills, hooks, pre-approved tool grants,
+ MCP servers and memory stores — and rank what they find. Each risk resolves to
+ `verified`, `verifiable` or `not_verifiable`; `scan --verify` hands the
+ provable high-severity subset to the harness and returns real verdicts.
+- **A risk is a reason to test, not a result.** `scan` exits `0` even with
+ critical risks outstanding: nothing has executed and no detection control has
+ been given the chance to fire. `not_verifiable` is the honest third state —
+ neither a pass nor a failure, but AgentSec naming something it cannot settle.
+- **The agent-configuration attack family** — four scenarios covering the
+ surface the risk plane inventories: poisoned project instructions that
+ exfiltrate a secret (`AGT-CONFIG-001`), a zero-width Unicode directive hidden
+ in an agent definition (`AGT-CONFIG-002`), a hook interpolating untrusted
+ content into a shell command (`AGT-CONFIG-003`), and an MCP server added
+ mid-session with a credential-shaped env block (`AGT-CONFIG-004`). OWASP
+ Agentic coverage goes 4/10 → 8/10.
+- **Project resolution and surface discovery** — `.agentsec/project.yaml` gives
+ a repository a stable id and reviewed relative locations, so which repository
+ is a process-boundary decision rather than a tool argument.
+- **Composed project dashboard**, served as one read-only resource
+ (`agentsec://dashboard/latest`) and described by
+ `schemas/project-dashboard.schema.json`: project identity, the risk plane, the
+ four-axis purple rollup, Skill Assurance and static posture, each in its own
+ property. Computed in memory — reading it starts no run and writes no file.
+- **`agentsec://project/risks`** — the risk plane alone, for a client that wants
+ the repository view without the run history. Takes no arguments at all.
+- **Static posture ingestion** and finding-coverage correlation, plus run
+ provenance recorded on every result.
+- **Claude Desktop packaging** for the read-only report gateway.
+- **Publication boundary**: published output is projected rather than filtered —
+ each publisher names the fields it keeps, transcript turns become digests,
+ principals and tenants become stable pseudonyms, and every projection carries a
+ manifest of what it dropped. The report gateway declines to serve per-run
+ evidence and the audit log at all, and refuses to start if a resource has no
+ publication policy.
+- **Project page** at
jobs:
purple:
- uses: trionnemesis/AgentSec/.github/workflows/agentsec-gate.yml@v0.1.0
+ uses: trionnemesis/AgentSec/.github/workflows/agentsec-gate.yml@v0.2.0
with:
target: order-agent-staging
profile: pr
diff --git a/src/agentsec/__init__.py b/src/agentsec/__init__.py
index 893a5c6..834a565 100644
--- a/src/agentsec/__init__.py
+++ b/src/agentsec/__init__.py
@@ -12,5 +12,5 @@
Nothing above the service boundary may reach below it.
"""
-__version__ = "0.1.0"
+__version__ = "0.2.0"
__all__ = ["__version__"]