Thanks to visit codestin.com
Credit goes to github.com

Skip to content

fix(docs): rewrite OpenClaw sidecar deployment with working K8s manifests#954

Merged
imran-siddique merged 1 commit into
microsoft:mainfrom
imran-siddique:fix/deployment-docs-and-helm
Apr 13, 2026
Merged

fix(docs): rewrite OpenClaw sidecar deployment with working K8s manifests#954
imran-siddique merged 1 commit into
microsoft:mainfrom
imran-siddique:fix/deployment-docs-and-helm

Conversation

@imran-siddique

Copy link
Copy Markdown
Collaborator

Fixes #952 — community user reported broken Helm values, missing container images, unclear PostgreSQL/KV requirements.

Changes:

  • Rewrite production deployment with working plain K8s manifests (old Helm values referenced non-existent chart templates)
  • Add Dockerfile.sidecar for building the governance sidecar image
  • Add 'What Secrets Do I Need' tables to both sidecar and azure docs
  • Clarify PostgreSQL/Redis/EventGrid are NOT required for sidecar mode
  • Add 'sidecar vs full cluster' guidance

…ests

Fixes reported by community user attempting OpenClaw sidecar deployment.

- Rewrite production deployment section with working plain K8s manifests
  (the previous Helm values referenced non-existent chart values)
- Add Dockerfile.sidecar for building the governance sidecar image
- Clarify that PostgreSQL/Redis/EventGrid are NOT required for sidecar mode
- Add 'What Secrets Do I Need' table to both sidecar and azure docs
- Add 'Which components do I need?' guidance to azure.md
- Explain sidecar pattern vs full cluster pattern clearly

Closes #952

Co-authored-by: Copilot <[email protected]>
@github-actions github-actions Bot added documentation Improvements or additions to documentation agent-mesh agent-mesh package labels Apr 13, 2026
@github-actions

Copy link
Copy Markdown
🤖 AI Agent: test-generator — View details

The provided pull request focuses on documentation updates and deployment configuration changes for the OpenClaw sidecar deployment. It does not include changes to the packages/agent-os/src/agent_os/escalation.py file, which is the file you initially mentioned. If you would like me to analyze the test coverage for escalation.py, please provide the relevant changes or confirm if you'd like me to analyze the pull request as it stands. Let me know how you'd like to proceed!

@imran-siddique imran-siddique merged commit de4d501 into microsoft:main Apr 13, 2026
80 of 85 checks passed
@github-actions github-actions Bot added the size/XL Extra large PR (500+ lines) label Apr 13, 2026
@github-actions

Copy link
Copy Markdown
🤖 AI Agent: docs-sync-checker — Issues Found

📝 Documentation Sync Report

Issues Found

  • ⚠️ docs/deployment/openclaw-sidecar.md — updated deployment instructions for the OpenClaw sidecar are not reflected in the project-level README.md.
  • ⚠️ CHANGELOG.md — no entry for this change.
  • ⚠️ packages/agent-mesh/docs/deployment/azure.md — updated guidance on required components for sidecar mode is not reflected in the project-level README.md.

Suggestions

  • 💡 Update the project-level README.md to include the new deployment instructions for the OpenClaw sidecar, including the distinction between sidecar mode and full cluster mode.
  • 💡 Add a CHANGELOG.md entry summarizing the changes, including the new Kubernetes manifests, Dockerfile for the governance sidecar, and updated documentation for sidecar vs. full cluster mode.
  • 💡 Ensure that the README.md mentions the updated "What Secrets Do I Need?" table and the new guidance on PostgreSQL/Redis/EventGrid requirements for sidecar mode.

Additional Notes

  • The new example policies added under examples/policies/production/ are well-documented with comments and usage instructions in the README.md. No issues were found with these additions.
  • The Dockerfile.sidecar mentioned in the PR description is not included in the diff. Please ensure it is added to the repository if it is part of this change.
  • The packages/agent-mesh/sdks/rust/target/.rustc_info.json file appears to be a build artifact and should not be included in the repository.

Action Items

  1. Update the project-level README.md to reflect the new deployment instructions and clarify the sidecar vs. full cluster deployment models.
  2. Add a CHANGELOG.md entry for this PR.
  3. Verify that the Dockerfile.sidecar is included in the repository.
  4. Remove the packages/agent-mesh/sdks/rust/target/.rustc_info.json file from the repository if it is not intentionally added.

If these issues are addressed, the documentation will be in sync.

@github-actions

Copy link
Copy Markdown
🤖 AI Agent: breaking-change-detector — Summary

🔍 API Compatibility Report

Summary

This pull request primarily involves documentation updates and the addition of Kubernetes manifests for deployment. No changes to the Python API or public-facing code were detected. The changes are focused on deployment configurations, policy examples, and clarifications in documentation.

Findings

No breaking changes detected — The pull request does not modify any Python packages, public APIs, or function signatures. It introduces new documentation and deployment examples, which are additive and do not affect existing functionality.

Migration Guide

No migration steps are required, as there are no breaking changes. Users can adopt the new deployment patterns and policy examples as needed.

@github-actions

Copy link
Copy Markdown
🤖 AI Agent: security-scanner — Security Analysis of the Pull Request

Security Analysis of the Pull Request

This pull request primarily focuses on updating documentation and deployment manifests for the OpenClaw sidecar deployment. While the changes are mostly related to documentation and deployment configurations, there are still potential security implications that need to be reviewed. Below is an analysis of the changes based on the specified security concerns:


1. Prompt Injection Defense Bypass

  • Analysis: The PR does not introduce any changes to the core logic of the governance toolkit or the policy evaluation engine. The policies provided in the examples/policies/production directory are well-structured and include default deny rules for unknown actions, which is a good practice to mitigate prompt injection attacks.
  • Rating: 🔵 LOW
  • Recommendation: No immediate action required. However, ensure that the policy engine enforces these rules consistently and that the policies are tested against known prompt injection scenarios.

2. Policy Engine Circumvention

  • Analysis: The PR introduces Kubernetes manifests for deploying the governance sidecar. The manifests include a ConfigMap for loading policies, which is a potential attack vector if the ConfigMap is modified by an unauthorized actor. Additionally, the minimal.yaml policy allows all actions by default, which could be risky in certain environments.
  • Rating: 🟠 HIGH
  • Attack Vector: An attacker with access to the Kubernetes cluster could modify the ConfigMap to inject malicious policies, effectively bypassing the governance layer.
  • Recommendation:
    1. Implement Role-Based Access Control (RBAC) in Kubernetes to restrict access to the ConfigMap containing policies.
    2. Add a mechanism to validate the integrity of the ConfigMap (e.g., using a hash or digital signature).
    3. Add a warning in the documentation about the risks of using the minimal.yaml policy in production environments.

3. Trust Chain Weaknesses

  • Analysis: The PR mentions that the sidecar does not require mTLS or external dependencies like PostgreSQL or Redis. While this simplifies deployment, it also removes some layers of security, such as encrypted communication between components.
  • Rating: 🟠 HIGH
  • Attack Vector: Without mTLS, an attacker could potentially intercept or manipulate communication between the agent and the sidecar, leading to unauthorized actions or data leakage.
  • Recommendation:
    1. Strongly recommend enabling mTLS for communication between the agent and the sidecar, even if they are co-located in the same pod.
    2. Update the documentation to highlight the risks of not using mTLS.

4. Credential Exposure

  • Analysis: The PR explicitly states that no secrets are required for the sidecar deployment unless using DID identity. This reduces the risk of credential exposure. However, the What Secrets Do I Need? tables in the documentation could be misinterpreted as implying that secrets are unnecessary in all cases.
  • Rating: 🔵 LOW
  • Recommendation: Clarify in the documentation that secrets may still be required depending on the specific use case and deployment configuration.

5. Sandbox Escape

  • Analysis: The PR does not introduce any changes that would directly affect container or process isolation. The Kubernetes manifests specify resource limits for the sidecar container, which is a good practice.
  • Rating: 🔵 LOW
  • Recommendation: No immediate action required. Ensure that the sidecar container runs with minimal privileges and follows the principle of least privilege.

6. Deserialization Attacks

  • Analysis: The PR does not introduce any changes related to deserialization. However, the policy files in examples/policies/production are YAML files, which could be a potential vector for YAML deserialization attacks if not handled securely.
  • Rating: 🟡 MEDIUM
  • Attack Vector: If the YAML files are parsed using an insecure library or method, an attacker could craft a malicious YAML file to execute arbitrary code.
  • Recommendation: Ensure that the YAML parsing library used in the governance toolkit is configured to disable arbitrary code execution during deserialization.

7. Race Conditions

  • Analysis: The PR does not introduce any changes that would directly lead to race conditions. However, the use of a ConfigMap for policies could lead to a Time-of-Check to Time-of-Use (TOCTOU) issue if the ConfigMap is modified after being loaded by the sidecar.
  • Rating: 🟡 MEDIUM
  • Attack Vector: An attacker could modify the ConfigMap after the sidecar has loaded it, effectively changing the policies without detection.
  • Recommendation: Implement periodic re-validation of the ConfigMap contents or use a more secure mechanism for storing and verifying policies.

8. Supply Chain

  • Analysis: The PR introduces a new Dockerfile.sidecar for building the governance sidecar image. The base image and dependencies used in the Dockerfile are not shown in the diff, so it is unclear if they are from trusted sources.
  • Rating: 🟠 HIGH
  • Attack Vector: If the base image or dependencies are compromised (e.g., via dependency confusion or typosquatting), the sidecar could be compromised.
  • Recommendation:
    1. Use a trusted and verified base image for the Dockerfile.
    2. Pin dependency versions to avoid pulling in malicious updates.
    3. Implement a supply chain security tool like snyk or trivy to scan the Docker image for vulnerabilities.

Summary of Findings

Category Rating Action Required
Prompt Injection Defense Bypass 🔵 LOW No immediate action required.
Policy Engine Circumvention 🟠 HIGH Implement RBAC for ConfigMap and validate its integrity.
Trust Chain Weaknesses 🟠 HIGH Recommend enabling mTLS and update documentation to reflect risks.
Credential Exposure 🔵 LOW Clarify documentation to avoid misinterpretation about secret requirements.
Sandbox Escape 🔵 LOW No immediate action required.
Deserialization Attacks 🟡 MEDIUM Ensure secure YAML parsing to prevent deserialization attacks.
Race Conditions 🟡 MEDIUM Periodically re-validate ConfigMap or use a more secure storage mechanism.
Supply Chain 🟠 HIGH Use trusted base images, pin dependencies, and scan Docker images for vulnerabilities.

General Recommendations

  1. Testing: Ensure that the new deployment manifests are tested in a secure environment to validate that the governance sidecar functions as expected.
  2. Documentation: Update the documentation to include security best practices, such as enabling mTLS and securing the ConfigMap.
  3. Policy Review: Conduct a thorough review of the provided example policies to ensure they align with best practices and do not inadvertently introduce security risks.

Let me know if you need further clarification or additional analysis!

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 AI Agent: code-reviewer

Pull Request Review: OpenClaw Sidecar Deployment Documentation Fix

🔴 CRITICAL

  1. Policy Engine Default Deny Rule:

    • In the provided production policies (enterprise.yaml, financial.yaml, healthcare.yaml, strict.yaml), the default deny rule (action: "*", effect: deny) is correctly implemented. However, ensure that the policy evaluator enforces this rule consistently across all agent actions. A failure in this mechanism could lead to security bypass.
    • Action: Add unit tests to verify that the default deny rule is applied when an unlisted action is encountered.
  2. Content Filters for Sensitive Data:

    • The blocked_patterns in the policies are well-defined for sensitive data like SSNs, credit card numbers, and API keys. However, ensure that these filters are applied at all points where data is logged or transmitted (e.g., logs, API responses, or external communications).
    • Action: Confirm that the governance sidecar enforces these filters before any data leaves the agent, especially for actions like send_email, export_data, or api_call.
  3. Escalation Timeout Behavior:

    • The default_on_timeout: deny setting in escalation chains is critical for preventing unauthorized actions when human approval is delayed. Ensure that this behavior is implemented correctly in the policy engine.
    • Action: Add integration tests to simulate escalation timeouts and verify that actions are denied when the timeout expires.
  4. Quantum-Safe Signing:

    • The quantum_safe_signing: true setting in strict.yaml is a good addition for high-security environments. However, ensure that the cryptographic implementation is robust and uses algorithms that are truly quantum-safe (e.g., lattice-based cryptography).
    • Action: Review the cryptographic library used for signing and verify its compliance with quantum-safe standards.

🟡 WARNING

  1. Breaking Change: Helm Chart Deprecation:

    • The removal of Helm chart support for sidecar deployment is a breaking change for users relying on Helm. While the new Kubernetes manifests are more straightforward, this change may disrupt existing workflows.
    • Action: Clearly document the deprecation in the release notes and provide a migration guide for users transitioning from Helm to plain Kubernetes manifests.
  2. Backward Compatibility for Policy Loading:

    • The new production policies (enterprise.yaml, financial.yaml, etc.) introduce stricter rules and additional settings. Ensure that the policy evaluator in the governance sidecar is backward-compatible with older policy formats.
    • Action: Add tests to verify that legacy policies (if any) are still supported.

💡 SUGGESTIONS

  1. Policy Documentation:

    • The added README.md for production policies is helpful, but consider including examples of how to customize policies for specific use cases (e.g., adding new actions or modifying escalation chains).
    • Action: Expand the documentation with customization examples.
  2. Secrets Management:

    • The updated Azure Key Vault documentation clarifies which secrets are required for sidecar mode. Consider adding a section on rotating secrets and handling compromised keys.
    • Action: Add guidance on secret rotation and incident response.
  3. Thread Safety in Sidecar:

    • The governance sidecar operates concurrently with the agent in the same pod. Ensure that shared resources (e.g., policy cache, audit logs) are thread-safe.
    • Action: Review the sidecar codebase for potential race conditions and add concurrency tests.
  4. OWASP Agentic Top 10 Compliance:

    • The policies address several OWASP Agentic Top 10 risks (e.g., unauthorized actions, sensitive data exposure). However, consider adding explicit rules for preventing sandbox escapes (e.g., blocking execute_code and ssh_connect).
    • Action: Add a checklist to verify compliance with all OWASP Agentic Top 10 risks.
  5. Docker Image Security:

    • The new Dockerfile.sidecar for the governance sidecar should be reviewed for security best practices (e.g., minimizing base image vulnerabilities, using non-root users).
    • Action: Perform a security audit of the Dockerfile and add a CI step for scanning the image.

Summary

This pull request significantly improves the deployment documentation and production policy library but introduces potential risks related to policy enforcement, backward compatibility, and Helm chart deprecation. Address the critical issues and warnings to ensure robust security and smooth user adoption.

imran-siddique added a commit that referenced this pull request Apr 15, 2026
…1017)

* feat(dotnet): add kill switch and lifecycle management to .NET SDK (#5)

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add 26 xUnit tests
- Update README

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK (#6)

* feat(dotnet): add kill switch and lifecycle management to .NET SDK

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add comprehensive xUnit tests for both components (26 tests)
- Update .NET SDK README with usage documentation

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK

Add two new modules to the agentmesh Rust crate:

- rings.rs: Four-level execution privilege ring model (Admin/Standard/
  Restricted/Sandboxed) with per-agent assignment and per-ring action
  permissions, ported from the Python hypervisor enforcer.

- lifecycle.rs: Eight-state agent lifecycle manager (Provisioning through
  Decommissioned) with validated state transitions and event history,
  matching the lifecycle model used across other SDK languages.

Both modules include comprehensive unit tests and are re-exported from
the crate root. README updated with API tables and usage examples.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* feat(go): add MCP security, execution rings, and lifecycle management to Go SDK (#7)

* feat(openshell): add governance skill package and runnable example (#942)

Co-authored-by: Copilot <[email protected]>

* feat(go): add MCP security, execution rings, and lifecycle management to Go SDK

- mcp.go: MCP security scanner detecting tool poisoning, typosquatting,
  hidden instructions (zero-width chars, homoglyphs), and rug pulls
- rings.go: Execution privilege ring model (Admin/Standard/Restricted/Sandboxed)
  with default-deny access control
- lifecycle.go: Eight-state agent lifecycle manager with validated transitions
- Full test coverage for all three modules
- Updated README with API docs and examples

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* docs: sync audit redaction status and framing with current code (#8)

* feat(openshell): add governance skill package and runnable example (#942)

Co-authored-by: Copilot <[email protected]>

* feat(typescript): add MCP security scanner and lifecycle management to TS SDK (#947)

Co-authored-by: Copilot <[email protected]>

* docs: update SDK feature matrix after parity pass (#950)

Reflects new capabilities added in PRs #947 (TS), .NET, Rust, Go:
- TypeScript: MCP security scanner + lifecycle management (was 5/14, now 7/14)
- .NET: Kill switch + lifecycle management (was 8/14, now 10/14)
- Rust: Execution rings + lifecycle management (was 6/14, now 8/14)
- Go: MCP security + rings + lifecycle (was 4/14, now 7/14)

All SDKs now have lifecycle management. Core governance (policy, identity,
trust, audit) + lifecycle = 5 primitives shared across all 5 languages.

Co-authored-by: Copilot <[email protected]>

* docs: add LIMITATIONS.md - honest design boundaries and layered defense (#953)

Addresses valid external critique of AGT's architectural blind spots:

1. Action vs Intent: AGT governs individual actions, not reasoning or
   action sequences. Documents the compound-action gap explicitly and
   recommends content policies + model safety layers.

2. Audit logs record attempts, not outcomes: Documents that post-action
   state verification is the user's responsibility today, with hooks planned.

3. Performance honesty: README now notes that <0.1ms is policy-eval only;
   distributed mesh adds 5-50ms. Full breakdown in LIMITATIONS.md.

4. Complexity spectrum: Documents the minimal path (just PolicyEvaluator,
   no mesh/crypto) vs full enterprise stack.

5. Vendor independence: Documents zero cloud dependencies in core,
   standard formats for all state, migration path.

6. Recommended layered defense architecture diagram showing AGT as one
   layer alongside model safety, application logic, and infrastructure.

Co-authored-by: Copilot <[email protected]>

* fix(docs): rewrite OpenClaw sidecar deployment with working K8s manifests (#954)

Closes #952

Co-authored-by: Copilot <[email protected]>

* feat: reversibility checker, trust calibration guide, escalation tests (#955)

ReversibilityChecker with 4 levels and compensation plans. Trust score calibration guide with weights, decay, thresholds. 19 tests. Co-authored-by: Copilot <[email protected]>

* feat: AGT Lite — zero-config governance in 3 lines + fix broken quickstart (#956)

agent_os.lite: govern() factory, sub-ms enforcement, 16 tests. Fixed quickstart that called nonexistent add_rules(). Co-authored-by: Copilot <[email protected]>

* fix: bump all runtime versions to 3.1.0 and fix CI lint/test failures (#957)

- Bump __version__ in 29 Python __init__.py files from 3.0.2 to 3.1.0
- Bump version= in 6 setup.py files from 3.0.2 to 3.1.0
- Bump meter version strings in _mcp_metrics.py
- Bump 9 package.json files from 3.0.2 to 3.1.0
- Bump .NET csproj Version from 3.0.2 to 3.1.0
- Bump Rust workspace Cargo.toml from 3.0.2 to 3.1.0
- Create Go sdk doc.go with version marker 3.1.0
- Fix ruff W292 (missing newline at EOF) in data_classification.py
- Fix CLI init regex to allow dots in agent names (test_init_special_characters)

Co-authored-by: Copilot <[email protected]>

* fix(openclaw): critical honesty pass — document what works vs what's planned (#958)

Co-authored-by: Copilot <[email protected]>

* fix(ci): fix Rust crate packaging - use workspace root with -p agentmesh (#959)

* fix(openclaw): critical honesty pass — document what works vs what's planned

Server (__main__.py):
- Add --host/--port argparse + env var support (was hardcoded 127.0.0.1:8080)

Dockerfile.sidecar:
- Copy modules/ directory (was missing, causing build failure)
- Use 0.0.0.0 for container binding (127.0.0.1 is wrong inside containers)
- Remove phantom port 9091 (no separate metrics listener exists)

openclaw-sidecar.md — full honesty rewrite:
- Add status banner: transparent interception is NOT yet implemented
- Document actual sidecar API endpoints (health, detect/injection, execute, metrics)
- Fix Docker Compose to use Dockerfile.sidecar (was using wrong Dockerfile)
- Remove GOVERNANCE_PROXY claim (OpenClaw doesn't natively read this)
- Replace fictional SLO/Grafana sections with real /api/v1/metrics docs
- Add Roadmap section listing what's planned vs shipped

openshell.md:
- Remove references to non-existent shell scripts
- Fix python -m agentmesh.server to python -m agent_os.server
- Add note that sidecar doesn't transparently intercept (must call API)
- Replace pip install agentmesh-platform with Python skill library usage

Co-authored-by: Copilot <[email protected]>

* fix(ci): fix Rust crate packaging — use workspace root with -p agentmesh

cargo package in a workspace writes .crate files to the workspace root's
target/package/, not the individual crate's directory. The pipeline was
running from the crate subdirectory and couldn't find the output.

Fix: change workingDirectory from packages/agent-mesh/sdks/rust/agentmesh
to packages/agent-mesh/sdks/rust (workspace root) and add -p agentmesh
to all cargo commands to target the specific crate.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* docs(adr): ADR 0005 — Liveness attestation extension for TrustHandshake (#948)

Proposes liveness attestation as opt-in gate for TrustHandshake. Addresses ghost-agent and ungraceful-handoff gaps from #772.

Co-authored-by: kevinkaylie <[email protected]>

* blog: MCP Security — Why Your AI Agent Tool Calls Need a Firewall (#899)

Co-authored-by: aymenhmaidiwastaken <[email protected]>

* feat: add LotL prevention policy for security measures (#949)

YAML policy template for Living-off-the-Land detection and prevention.

* feat(examples): add ATR community security rules for PolicyEvaluator (#908)

15 curated ATR detection rules + sync script. Closes #901.

* fix(docs): correct npm package name and stale version refs across 21 files (#960)

- Fix @agentmesh/sdk → @microsoft/agentmesh-sdk in 13 markdown files
  (README, QUICKSTART, tutorials, SDK docs, i18n, changelog)
- Fix broken demo path in agent-os README (agent-os/demo.py → demo/maf_governance_demo.py)
- Remove stale v1.0.0 labels from extension status table
- Bump AGT Version refs 3.0.2 → 3.1.0 in case study templates and
  ATF conformance assessment

Co-authored-by: Copilot <[email protected]>

* fix(ci): use ESRP Release for NuGet signing (#961)

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing (#962)

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag

Three gaps found during publish verification:

1. PyPI: add agentmesh-marketplace (8th package, was missing from matrix)
2. Rust: build+publish both workspace crates (agentmesh + agentmesh-mcp)
   - Changed from single-crate to workspace build (--workspace)
   - Package loop builds both .crate files
   - Renamed artifact from 'rust-agentmesh' to 'rust-crates'
3. Go: add 'v' prefix to version in doc.go (3.1.0 → v3.1.0)
   - Go module tags require semver with v prefix
   - Pipeline grep expects '// Version: v...' format

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing — 'NuGet' not 'Nuget'

ESRP Release rejected 'Nuget' with: 'The value provided for
ReleaseContentType property is invalid.' ErrorCode 2254.

ESRP content types are case-sensitive. Fix: 'Nuget' -> 'NuGet'.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag (#963)

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag

Three gaps found during publish verification:

1. PyPI: add agentmesh-marketplace (8th package, was missing from matrix)
2. Rust: build+publish both workspace crates (agentmesh + agentmesh-mcp)
   - Changed from single-crate to workspace build (--workspace)
   - Package loop builds both .crate files
   - Renamed artifact from 'rust-agentmesh' to 'rust-crates'
3. Go: add 'v' prefix to version in doc.go (3.1.0 → v3.1.0)
   - Go module tags require semver with v prefix
   - Pipeline grep expects '// Version: v...' format

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing — 'NuGet' not 'Nuget'

ESRP Release rejected 'Nuget' with: 'The value provided for
ReleaseContentType property is invalid.' ErrorCode 2254.

ESRP content types are case-sensitive. Fix: 'Nuget' -> 'NuGet'.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix(ci): use EsrpCodeSigning + dotnet push for NuGet (#965)

EsrpRelease@11 does not support NuGet as a contenttype — it's for
PyPI/npm/Maven/crates.io package distribution. NuGet packages must be
signed with EsrpCodeSigning@5 first, then pushed with dotnet nuget push.

New flow:
1. EsrpCodeSigning@5 with NuGetSign + NuGetVerify operations (CP-401405)
2. dotnet nuget push with the signed .nupkg to nuget.org

This matches the standard Microsoft NuGet ESRP signing pattern used by
azure-sdk, dotnet runtime, and other Microsoft OSS projects.

Co-authored-by: Copilot <[email protected]>

* fix(security): upgrade axios to 1.15.0 - CVE-2026-40175, CVE-2025-62718 (#966)

Critical S360 action items for SFI-ES5.2 1ES Open Source Vulnerabilities.

CVE-2026-40175 (CVSS 9.9): Unrestricted Cloud Metadata Exfiltration
via Header Injection Chain — prototype pollution gadget enables CRLF
injection in HTTP headers, bypassing AWS IMDSv2 session tokens.

CVE-2025-62718: NO_PROXY Bypass via Hostname Normalization — trailing
dots and IPv6 literals skip NO_PROXY matching, enabling SSRF through
attacker-controlled proxy.

Upgraded in 3 packages:
- extensions/copilot: 1.14.0 → 1.15.0
- extensions/cursor:  1.13.5 → 1.15.0
- agent-os-vscode:    1.13.6 → 1.15.0

Co-authored-by: Copilot <[email protected]>

* fix(ci): resolve ESRP_DOMAIN_TENANT_ID cyclical reference (#967)

The ADO variable ESRP_DOMAIN_TENANT_ID had a cyclical self-reference,
preventing ESRP authentication across ALL publishing stages (PyPI, npm,
NuGet, crates.io).

Fix: Define MICROSOFT_TENANT_ID as a pipeline-level variable with the
well-known Microsoft corporate tenant ID (72f988bf-..., same default
used by ESRP Release action.yml). This is a public value, not a secret.

Also: NuGet publishing requires Microsoft as co-owner of the package
on NuGet.org. See https://aka.ms/Microsoft-NuGet-Compliance

Co-authored-by: Copilot <[email protected]>

* docs: sync audit redaction status and framing with current code

- Update SOC2 mapping to reflect CredentialRedactor now redacts
  credential-like secrets before audit persistence (API keys, tokens,
  JWTs, connection strings, etc.). Remaining gap: non-credential PII
  (email, phone, addresses) not yet redacted in audit entries.
- Replace 'kernel-level enforcement' with 'policy-layer enforcement'
  in README, OWASP compliance, and architecture overview to match the
  existing 'application-level governance' framing in README Security
  section and LIMITATIONS.md.
- Qualify 10/10 OWASP coverage claim in COMPARISON.md with footnote
  clarifying this means mitigation components exist per risk category,
  not full elimination.
- Update owasp-llm-top10-mapping.md LLM06 row for credential redaction.

Addresses doc/code inconsistencies identified in external review.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>
imran-siddique added a commit that referenced this pull request Apr 15, 2026
* feat(dotnet): add kill switch and lifecycle management to .NET SDK (#5)

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add 26 xUnit tests
- Update README

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK (#6)

* feat(dotnet): add kill switch and lifecycle management to .NET SDK

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add comprehensive xUnit tests for both components (26 tests)
- Update .NET SDK README with usage documentation

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK

Add two new modules to the agentmesh Rust crate:

- rings.rs: Four-level execution privilege ring model (Admin/Standard/
  Restricted/Sandboxed) with per-agent assignment and per-ring action
  permissions, ported from the Python hypervisor enforcer.

- lifecycle.rs: Eight-state agent lifecycle manager (Provisioning through
  Decommissioned) with validated state transitions and event history,
  matching the lifecycle model used across other SDK languages.

Both modules include comprehensive unit tests and are re-exported from
the crate root. README updated with API tables and usage examples.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* feat(go): add MCP security, execution rings, and lifecycle management to Go SDK (#7)

* feat(openshell): add governance skill package and runnable example (#942)

Co-authored-by: Copilot <[email protected]>

* feat(go): add MCP security, execution rings, and lifecycle management to Go SDK

- mcp.go: MCP security scanner detecting tool poisoning, typosquatting,
  hidden instructions (zero-width chars, homoglyphs), and rug pulls
- rings.go: Execution privilege ring model (Admin/Standard/Restricted/Sandboxed)
  with default-deny access control
- lifecycle.go: Eight-state agent lifecycle manager with validated transitions
- Full test coverage for all three modules
- Updated README with API docs and examples

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* docs: sync audit redaction status and framing with current code (#8)

* feat(openshell): add governance skill package and runnable example (#942)

Co-authored-by: Copilot <[email protected]>

* feat(typescript): add MCP security scanner and lifecycle management to TS SDK (#947)

Co-authored-by: Copilot <[email protected]>

* docs: update SDK feature matrix after parity pass (#950)

Reflects new capabilities added in PRs #947 (TS), .NET, Rust, Go:
- TypeScript: MCP security scanner + lifecycle management (was 5/14, now 7/14)
- .NET: Kill switch + lifecycle management (was 8/14, now 10/14)
- Rust: Execution rings + lifecycle management (was 6/14, now 8/14)
- Go: MCP security + rings + lifecycle (was 4/14, now 7/14)

All SDKs now have lifecycle management. Core governance (policy, identity,
trust, audit) + lifecycle = 5 primitives shared across all 5 languages.

Co-authored-by: Copilot <[email protected]>

* docs: add LIMITATIONS.md - honest design boundaries and layered defense (#953)

Addresses valid external critique of AGT's architectural blind spots:

1. Action vs Intent: AGT governs individual actions, not reasoning or
   action sequences. Documents the compound-action gap explicitly and
   recommends content policies + model safety layers.

2. Audit logs record attempts, not outcomes: Documents that post-action
   state verification is the user's responsibility today, with hooks planned.

3. Performance honesty: README now notes that <0.1ms is policy-eval only;
   distributed mesh adds 5-50ms. Full breakdown in LIMITATIONS.md.

4. Complexity spectrum: Documents the minimal path (just PolicyEvaluator,
   no mesh/crypto) vs full enterprise stack.

5. Vendor independence: Documents zero cloud dependencies in core,
   standard formats for all state, migration path.

6. Recommended layered defense architecture diagram showing AGT as one
   layer alongside model safety, application logic, and infrastructure.

Co-authored-by: Copilot <[email protected]>

* fix(docs): rewrite OpenClaw sidecar deployment with working K8s manifests (#954)

Closes #952

Co-authored-by: Copilot <[email protected]>

* feat: reversibility checker, trust calibration guide, escalation tests (#955)

ReversibilityChecker with 4 levels and compensation plans. Trust score calibration guide with weights, decay, thresholds. 19 tests. Co-authored-by: Copilot <[email protected]>

* feat: AGT Lite — zero-config governance in 3 lines + fix broken quickstart (#956)

agent_os.lite: govern() factory, sub-ms enforcement, 16 tests. Fixed quickstart that called nonexistent add_rules(). Co-authored-by: Copilot <[email protected]>

* fix: bump all runtime versions to 3.1.0 and fix CI lint/test failures (#957)

- Bump __version__ in 29 Python __init__.py files from 3.0.2 to 3.1.0
- Bump version= in 6 setup.py files from 3.0.2 to 3.1.0
- Bump meter version strings in _mcp_metrics.py
- Bump 9 package.json files from 3.0.2 to 3.1.0
- Bump .NET csproj Version from 3.0.2 to 3.1.0
- Bump Rust workspace Cargo.toml from 3.0.2 to 3.1.0
- Create Go sdk doc.go with version marker 3.1.0
- Fix ruff W292 (missing newline at EOF) in data_classification.py
- Fix CLI init regex to allow dots in agent names (test_init_special_characters)

Co-authored-by: Copilot <[email protected]>

* fix(openclaw): critical honesty pass — document what works vs what's planned (#958)

Co-authored-by: Copilot <[email protected]>

* fix(ci): fix Rust crate packaging - use workspace root with -p agentmesh (#959)

* fix(openclaw): critical honesty pass — document what works vs what's planned

Server (__main__.py):
- Add --host/--port argparse + env var support (was hardcoded 127.0.0.1:8080)

Dockerfile.sidecar:
- Copy modules/ directory (was missing, causing build failure)
- Use 0.0.0.0 for container binding (127.0.0.1 is wrong inside containers)
- Remove phantom port 9091 (no separate metrics listener exists)

openclaw-sidecar.md — full honesty rewrite:
- Add status banner: transparent interception is NOT yet implemented
- Document actual sidecar API endpoints (health, detect/injection, execute, metrics)
- Fix Docker Compose to use Dockerfile.sidecar (was using wrong Dockerfile)
- Remove GOVERNANCE_PROXY claim (OpenClaw doesn't natively read this)
- Replace fictional SLO/Grafana sections with real /api/v1/metrics docs
- Add Roadmap section listing what's planned vs shipped

openshell.md:
- Remove references to non-existent shell scripts
- Fix python -m agentmesh.server to python -m agent_os.server
- Add note that sidecar doesn't transparently intercept (must call API)
- Replace pip install agentmesh-platform with Python skill library usage

Co-authored-by: Copilot <[email protected]>

* fix(ci): fix Rust crate packaging — use workspace root with -p agentmesh

cargo package in a workspace writes .crate files to the workspace root's
target/package/, not the individual crate's directory. The pipeline was
running from the crate subdirectory and couldn't find the output.

Fix: change workingDirectory from packages/agent-mesh/sdks/rust/agentmesh
to packages/agent-mesh/sdks/rust (workspace root) and add -p agentmesh
to all cargo commands to target the specific crate.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* docs(adr): ADR 0005 — Liveness attestation extension for TrustHandshake (#948)

Proposes liveness attestation as opt-in gate for TrustHandshake. Addresses ghost-agent and ungraceful-handoff gaps from #772.

Co-authored-by: kevinkaylie <[email protected]>

* blog: MCP Security — Why Your AI Agent Tool Calls Need a Firewall (#899)

Co-authored-by: aymenhmaidiwastaken <[email protected]>

* feat: add LotL prevention policy for security measures (#949)

YAML policy template for Living-off-the-Land detection and prevention.

* feat(examples): add ATR community security rules for PolicyEvaluator (#908)

15 curated ATR detection rules + sync script. Closes #901.

* fix(docs): correct npm package name and stale version refs across 21 files (#960)

- Fix @agentmesh/sdk → @microsoft/agentmesh-sdk in 13 markdown files
  (README, QUICKSTART, tutorials, SDK docs, i18n, changelog)
- Fix broken demo path in agent-os README (agent-os/demo.py → demo/maf_governance_demo.py)
- Remove stale v1.0.0 labels from extension status table
- Bump AGT Version refs 3.0.2 → 3.1.0 in case study templates and
  ATF conformance assessment

Co-authored-by: Copilot <[email protected]>

* fix(ci): use ESRP Release for NuGet signing (#961)

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing (#962)

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag

Three gaps found during publish verification:

1. PyPI: add agentmesh-marketplace (8th package, was missing from matrix)
2. Rust: build+publish both workspace crates (agentmesh + agentmesh-mcp)
   - Changed from single-crate to workspace build (--workspace)
   - Package loop builds both .crate files
   - Renamed artifact from 'rust-agentmesh' to 'rust-crates'
3. Go: add 'v' prefix to version in doc.go (3.1.0 → v3.1.0)
   - Go module tags require semver with v prefix
   - Pipeline grep expects '// Version: v...' format

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing — 'NuGet' not 'Nuget'

ESRP Release rejected 'Nuget' with: 'The value provided for
ReleaseContentType property is invalid.' ErrorCode 2254.

ESRP content types are case-sensitive. Fix: 'Nuget' -> 'NuGet'.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag (#963)

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag

Three gaps found during publish verification:

1. PyPI: add agentmesh-marketplace (8th package, was missing from matrix)
2. Rust: build+publish both workspace crates (agentmesh + agentmesh-mcp)
   - Changed from single-crate to workspace build (--workspace)
   - Package loop builds both .crate files
   - Renamed artifact from 'rust-agentmesh' to 'rust-crates'
3. Go: add 'v' prefix to version in doc.go (3.1.0 → v3.1.0)
   - Go module tags require semver with v prefix
   - Pipeline grep expects '// Version: v...' format

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing — 'NuGet' not 'Nuget'

ESRP Release rejected 'Nuget' with: 'The value provided for
ReleaseContentType property is invalid.' ErrorCode 2254.

ESRP content types are case-sensitive. Fix: 'Nuget' -> 'NuGet'.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix(ci): use EsrpCodeSigning + dotnet push for NuGet (#965)

EsrpRelease@11 does not support NuGet as a contenttype — it's for
PyPI/npm/Maven/crates.io package distribution. NuGet packages must be
signed with EsrpCodeSigning@5 first, then pushed with dotnet nuget push.

New flow:
1. EsrpCodeSigning@5 with NuGetSign + NuGetVerify operations (CP-401405)
2. dotnet nuget push with the signed .nupkg to nuget.org

This matches the standard Microsoft NuGet ESRP signing pattern used by
azure-sdk, dotnet runtime, and other Microsoft OSS projects.

Co-authored-by: Copilot <[email protected]>

* fix(security): upgrade axios to 1.15.0 - CVE-2026-40175, CVE-2025-62718 (#966)

Critical S360 action items for SFI-ES5.2 1ES Open Source Vulnerabilities.

CVE-2026-40175 (CVSS 9.9): Unrestricted Cloud Metadata Exfiltration
via Header Injection Chain — prototype pollution gadget enables CRLF
injection in HTTP headers, bypassing AWS IMDSv2 session tokens.

CVE-2025-62718: NO_PROXY Bypass via Hostname Normalization — trailing
dots and IPv6 literals skip NO_PROXY matching, enabling SSRF through
attacker-controlled proxy.

Upgraded in 3 packages:
- extensions/copilot: 1.14.0 → 1.15.0
- extensions/cursor:  1.13.5 → 1.15.0
- agent-os-vscode:    1.13.6 → 1.15.0

Co-authored-by: Copilot <[email protected]>

* fix(ci): resolve ESRP_DOMAIN_TENANT_ID cyclical reference (#967)

The ADO variable ESRP_DOMAIN_TENANT_ID had a cyclical self-reference,
preventing ESRP authentication across ALL publishing stages (PyPI, npm,
NuGet, crates.io).

Fix: Define MICROSOFT_TENANT_ID as a pipeline-level variable with the
well-known Microsoft corporate tenant ID (72f988bf-..., same default
used by ESRP Release action.yml). This is a public value, not a secret.

Also: NuGet publishing requires Microsoft as co-owner of the package
on NuGet.org. See https://aka.ms/Microsoft-NuGet-Compliance

Co-authored-by: Copilot <[email protected]>

* docs: sync audit redaction status and framing with current code

- Update SOC2 mapping to reflect CredentialRedactor now redacts
  credential-like secrets before audit persistence (API keys, tokens,
  JWTs, connection strings, etc.). Remaining gap: non-credential PII
  (email, phone, addresses) not yet redacted in audit entries.
- Replace 'kernel-level enforcement' with 'policy-layer enforcement'
  in README, OWASP compliance, and architecture overview to match the
  existing 'application-level governance' framing in README Security
  section and LIMITATIONS.md.
- Qualify 10/10 OWASP coverage claim in COMPARISON.md with footnote
  clarifying this means mitigation components exist per risk category,
  not full elimination.
- Update owasp-llm-top10-mapping.md LLM06 row for credential redaction.

Addresses doc/code inconsistencies identified in external review.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>
@imran-siddique imran-siddique deleted the fix/deployment-docs-and-helm branch April 15, 2026 04:48
imran-siddique added a commit that referenced this pull request Apr 16, 2026
…#1166)

* feat(dotnet): add MCP security namespace — completes cross-language MCP parity

* fix(ci): add path filters and concurrency; announce v3.1.0 release

CI optimization:
- Add paths-ignore for docs to 5 code-only workflows
- Add paths filter to Link Check (only run on docs changes)
- Add concurrency groups to 7 heavy workflows
- Docs-only PRs drop from ~14 checks to ~4

README:
- Add v3.1.0 release announcement callout
- Add PyPI version badge
- Update tutorial count to 31

Co-authored-by: Copilot <[email protected]>

* docs: update SOC2 mapping for resolved kill switch and DeltaEngine gaps

- Kill switch is no longer placeholder: now implements saga handoff
  with handoff_success_count tracking (kill_switch.py:69-178)
- DeltaEngine verify_chain() is no longer a stub: now performs SHA-256
  chain verification (delta.py:67-127)
- Move both from Critical/High gaps to new 'Resolved' section
- Update Processing Integrity coverage (2 of 4 defects, not 3 of 4)
- Update evidence table with current line ranges

Co-authored-by: Copilot <[email protected]>

* feat(dotnet): add MCP security namespace with scanner, gateway, redactor, and sanitizer

Add AgentGovernance.Mcp namespace implementing full MCP security parity with
TypeScript and Rust SDKs:

- McpSecurityScanner: tool poisoning, typosquatting, hidden instructions,
  rug pull, schema abuse, cross-server attack, and description injection detection
- McpCredentialRedactor: regex-based redaction of API keys, bearer tokens,
  connection strings, and secret assignments
- McpResponseSanitizer: response scanning for prompt injection tags,
  imperative phrasing, credential leakage, and exfiltration URLs
- McpGateway: policy enforcement pipeline with deny/allow lists, payload
  sanitization, rate limiting, and human approval gates

Includes 46 xUnit tests covering all threat categories. Updates
SDK-FEATURE-MATRIX.md to flip .NET MCP Security from — to ✅.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* docs: add Entra Agent ID bridge tutorial (Tutorial 31) (#10)

* fix(pipeline): run NuGet ESRP signing on Windows agent (#1022)

The EsrpCodeSigning@5 task constructs internal paths (batchSignPolicyFile,
ciPolicyFile) using Windows-style backslashes. Running on ubuntu-latest
produced garbled mixed paths like '/home/vsts/work/1/s/src\myapp\'.

Changes:
- Add per-job pool override: PublishNuGet runs on windows-latest
- Convert FolderPath and all shell commands to Windows paths
- Replace bash scripts with PowerShell for the Windows agent
- PyPI and npm stages remain on ubuntu-latest (unchanged)
- Add comment to delete orphaned ESRP_DOMAIN_TENANT_ID ADO variable

Co-authored-by: Copilot <[email protected]>

* docs: reland empty-merge changes from PRs #1017 and #1020 (#1125)

PRs #1017 and #1020 were squash-merged as empty commits (0 file
changes). This commit re-applies the intended documentation updates.

From PR #1017 (critic gaps):
- LIMITATIONS.md: add sections 7 (knowledge governance gap), 8
  (credential persistence gap), 9 (initialization bypass risk)
- LIMITATIONS.md: add knowledge governance and enforcement infra
  rows to 'What AGT Is Not' table
- THREAT_MODEL.md: add knowledge flow and credential persistence
  to residual risks, add configuration bypass vectors table,
  remove stale '10/10' qualifier

From PR #1020 (SOC2 resolved gaps):
- soc2-mapping.md: mark kill switch as resolved (saga handoff
  implemented in kill_switch.py:69-178)
- soc2-mapping.md: mark DeltaEngine verify_chain() as resolved
  (SHA-256 chain verification in delta.py:67-127)
- soc2-mapping.md: add Resolved section to gaps summary, update
  Processing Integrity to 2 of 4 defects (was 3 of 4)

Co-authored-by: Copilot <[email protected]>

* feat(dotnet): add MCP security namespace — completes cross-language MCP parity (#1021)

* fix(ci): add path filters and concurrency; announce v3.1.0 release

CI optimization:
- Add paths-ignore for docs to 5 code-only workflows
- Add paths filter to Link Check (only run on docs changes)
- Add concurrency groups to 7 heavy workflows
- Docs-only PRs drop from ~14 checks to ~4

README:
- Add v3.1.0 release announcement callout
- Add PyPI version badge
- Update tutorial count to 31



* docs: update SOC2 mapping for resolved kill switch and DeltaEngine gaps

- Kill switch is no longer placeholder: now implements saga handoff
  with handoff_success_count tracking (kill_switch.py:69-178)
- DeltaEngine verify_chain() is no longer a stub: now performs SHA-256
  chain verification (delta.py:67-127)
- Move both from Critical/High gaps to new 'Resolved' section
- Update Processing Integrity coverage (2 of 4 defects, not 3 of 4)
- Update evidence table with current line ranges



* feat(dotnet): add MCP security namespace with scanner, gateway, redactor, and sanitizer

Add AgentGovernance.Mcp namespace implementing full MCP security parity with
TypeScript and Rust SDKs:

- McpSecurityScanner: tool poisoning, typosquatting, hidden instructions,
  rug pull, schema abuse, cross-server attack, and description injection detection
- McpCredentialRedactor: regex-based redaction of API keys, bearer tokens,
  connection strings, and secret assignments
- McpResponseSanitizer: response scanning for prompt injection tags,
  imperative phrasing, credential leakage, and exfiltration URLs
- McpGateway: policy enforcement pipeline with deny/allow lists, payload
  sanitization, rate limiting, and human approval gates

Includes 46 xUnit tests covering all threat categories. Updates
SDK-FEATURE-MATRIX.md to flip .NET MCP Security from — to ✅.



---------

Co-authored-by: Copilot <[email protected]>

* docs: address external critic gaps (#1025)

* feat(dotnet): add kill switch and lifecycle management to .NET SDK (#5)

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add 26 xUnit tests
- Update README

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK (#6)

* feat(dotnet): add kill switch and lifecycle management to .NET SDK

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add comprehensive xUnit tests for both components (26 tests)
- Update .NET SDK README with usage documentation

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK

Add two new modules to the agentmesh Rust crate:

- rings.rs: Four-level execution privilege ring model (Admin/Standard/
  Restricted/Sandboxed) with per-agent assignment and per-ring action
  permissions, ported from the Python hypervisor enforcer.

- lifecycle.rs: Eight-state agent lifecycle manager (Provisioning through
  Decommissioned) with validated state transitions and event history,
  matching the lifecycle model used across other SDK languages.

Both modules include comprehensive unit tests and are re-exported from
the crate root. README updated with API tables and usage examples.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* feat(go): add MCP security, execution rings, and lifecycle management to Go SDK (#7)

* feat(openshell): add governance skill package and runnable example (#942)

Co-authored-by: Copilot <[email protected]>

* feat(go): add MCP security, execution rings, and lifecycle management to Go SDK

- mcp.go: MCP security scanner detecting tool poisoning, typosquatting,
  hidden instructions (zero-width chars, homoglyphs), and rug pulls
- rings.go: Execution privilege ring model (Admin/Standard/Restricted/Sandboxed)
  with default-deny access control
- lifecycle.go: Eight-state agent lifecycle manager with validated transitions
- Full test coverage for all three modules
- Updated README with API docs and examples

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* docs: sync audit redaction status and framing with current code (#8)

* feat(openshell): add governance skill package and runnable example (#942)

Co-authored-by: Copilot <[email protected]>

* feat(typescript): add MCP security scanner and lifecycle management to TS SDK (#947)

Co-authored-by: Copilot <[email protected]>

* docs: update SDK feature matrix after parity pass (#950)

Reflects new capabilities added in PRs #947 (TS), .NET, Rust, Go:
- TypeScript: MCP security scanner + lifecycle management (was 5/14, now 7/14)
- .NET: Kill switch + lifecycle management (was 8/14, now 10/14)
- Rust: Execution rings + lifecycle management (was 6/14, now 8/14)
- Go: MCP security + rings + lifecycle (was 4/14, now 7/14)

All SDKs now have lifecycle management. Core governance (policy, identity,
trust, audit) + lifecycle = 5 primitives shared across all 5 languages.

Co-authored-by: Copilot <[email protected]>

* docs: add LIMITATIONS.md - honest design boundaries and layered defense (#953)

Addresses valid external critique of AGT's architectural blind spots:

1. Action vs Intent: AGT governs individual actions, not reasoning or
   action sequences. Documents the compound-action gap explicitly and
   recommends content policies + model safety layers.

2. Audit logs record attempts, not outcomes: Documents that post-action
   state verification is the user's responsibility today, with hooks planned.

3. Performance honesty: README now notes that <0.1ms is policy-eval only;
   distributed mesh adds 5-50ms. Full breakdown in LIMITATIONS.md.

4. Complexity spectrum: Documents the minimal path (just PolicyEvaluator,
   no mesh/crypto) vs full enterprise stack.

5. Vendor independence: Documents zero cloud dependencies in core,
   standard formats for all state, migration path.

6. Recommended layered defense architecture diagram showing AGT as one
   layer alongside model safety, application logic, and infrastructure.

Co-authored-by: Copilot <[email protected]>

* fix(docs): rewrite OpenClaw sidecar deployment with working K8s manifests (#954)

Closes #952

Co-authored-by: Copilot <[email protected]>

* feat: reversibility checker, trust calibration guide, escalation tests (#955)

ReversibilityChecker with 4 levels and compensation plans. Trust score calibration guide with weights, decay, thresholds. 19 tests. Co-authored-by: Copilot <[email protected]>

* feat: AGT Lite — zero-config governance in 3 lines + fix broken quickstart (#956)

agent_os.lite: govern() factory, sub-ms enforcement, 16 tests. Fixed quickstart that called nonexistent add_rules(). Co-authored-by: Copilot <[email protected]>

* fix: bump all runtime versions to 3.1.0 and fix CI lint/test failures (#957)

- Bump __version__ in 29 Python __init__.py files from 3.0.2 to 3.1.0
- Bump version= in 6 setup.py files from 3.0.2 to 3.1.0
- Bump meter version strings in _mcp_metrics.py
- Bump 9 package.json files from 3.0.2 to 3.1.0
- Bump .NET csproj Version from 3.0.2 to 3.1.0
- Bump Rust workspace Cargo.toml from 3.0.2 to 3.1.0
- Create Go sdk doc.go with version marker 3.1.0
- Fix ruff W292 (missing newline at EOF) in data_classification.py
- Fix CLI init regex to allow dots in agent names (test_init_special_characters)

Co-authored-by: Copilot <[email protected]>

* fix(openclaw): critical honesty pass — document what works vs what's planned (#958)

Co-authored-by: Copilot <[email protected]>

* fix(ci): fix Rust crate packaging - use workspace root with -p agentmesh (#959)

* fix(openclaw): critical honesty pass — document what works vs what's planned

Server (__main__.py):
- Add --host/--port argparse + env var support (was hardcoded 127.0.0.1:8080)

Dockerfile.sidecar:
- Copy modules/ directory (was missing, causing build failure)
- Use 0.0.0.0 for container binding (127.0.0.1 is wrong inside containers)
- Remove phantom port 9091 (no separate metrics listener exists)

openclaw-sidecar.md — full honesty rewrite:
- Add status banner: transparent interception is NOT yet implemented
- Document actual sidecar API endpoints (health, detect/injection, execute, metrics)
- Fix Docker Compose to use Dockerfile.sidecar (was using wrong Dockerfile)
- Remove GOVERNANCE_PROXY claim (OpenClaw doesn't natively read this)
- Replace fictional SLO/Grafana sections with real /api/v1/metrics docs
- Add Roadmap section listing what's planned vs shipped

openshell.md:
- Remove references to non-existent shell scripts
- Fix python -m agentmesh.server to python -m agent_os.server
- Add note that sidecar doesn't transparently intercept (must call API)
- Replace pip install agentmesh-platform with Python skill library usage

Co-authored-by: Copilot <[email protected]>

* fix(ci): fix Rust crate packaging — use workspace root with -p agentmesh

cargo package in a workspace writes .crate files to the workspace root's
target/package/, not the individual crate's directory. The pipeline was
running from the crate subdirectory and couldn't find the output.

Fix: change workingDirectory from packages/agent-mesh/sdks/rust/agentmesh
to packages/agent-mesh/sdks/rust (workspace root) and add -p agentmesh
to all cargo commands to target the specific crate.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* docs(adr): ADR 0005 — Liveness attestation extension for TrustHandshake (#948)

Proposes liveness attestation as opt-in gate for TrustHandshake. Addresses ghost-agent and ungraceful-handoff gaps from #772.

Co-authored-by: kevinkaylie <[email protected]>

* blog: MCP Security — Why Your AI Agent Tool Calls Need a Firewall (#899)

Co-authored-by: aymenhmaidiwastaken <[email protected]>

* feat: add LotL prevention policy for security measures (#949)

YAML policy template for Living-off-the-Land detection and prevention.

* feat(examples): add ATR community security rules for PolicyEvaluator (#908)

15 curated ATR detection rules + sync script. Closes #901.

* fix(docs): correct npm package name and stale version refs across 21 files (#960)

- Fix @agentmesh/sdk → @microsoft/agentmesh-sdk in 13 markdown files
  (README, QUICKSTART, tutorials, SDK docs, i18n, changelog)
- Fix broken demo path in agent-os README (agent-os/demo.py → demo/maf_governance_demo.py)
- Remove stale v1.0.0 labels from extension status table
- Bump AGT Version refs 3.0.2 → 3.1.0 in case study templates and
  ATF conformance assessment

Co-authored-by: Copilot <[email protected]>

* fix(ci): use ESRP Release for NuGet signing (#961)

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing (#962)

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag

Three gaps found during publish verification:

1. PyPI: add agentmesh-marketplace (8th package, was missing from matrix)
2. Rust: build+publish both workspace crates (agentmesh + agentmesh-mcp)
   - Changed from single-crate to workspace build (--workspace)
   - Package loop builds both .crate files
   - Renamed artifact from 'rust-agentmesh' to 'rust-crates'
3. Go: add 'v' prefix to version in doc.go (3.1.0 → v3.1.0)
   - Go module tags require semver with v prefix
   - Pipeline grep expects '// Version: v...' format

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing — 'NuGet' not 'Nuget'

ESRP Release rejected 'Nuget' with: 'The value provided for
ReleaseContentType property is invalid.' ErrorCode 2254.

ESRP content types are case-sensitive. Fix: 'Nuget' -> 'NuGet'.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag (#963)

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag

Three gaps found during publish verification:

1. PyPI: add agentmesh-marketplace (8th package, was missing from matrix)
2. Rust: build+publish both workspace crates (agentmesh + agentmesh-mcp)
   - Changed from single-crate to workspace build (--workspace)
   - Package loop builds both .crate files
   - Renamed artifact from 'rust-agentmesh' to 'rust-crates'
3. Go: add 'v' prefix to version in doc.go (3.1.0 → v3.1.0)
   - Go module tags require semver with v prefix
   - Pipeline grep expects '// Version: v...' format

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing — 'NuGet' not 'Nuget'

ESRP Release rejected 'Nuget' with: 'The value provided for
ReleaseContentType property is invalid.' ErrorCode 2254.

ESRP content types are case-sensitive. Fix: 'Nuget' -> 'NuGet'.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix(ci): use EsrpCodeSigning + dotnet push for NuGet (#965)

EsrpRelease@11 does not support NuGet as a contenttype — it's for
PyPI/npm/Maven/crates.io package distribution. NuGet packages must be
signed with EsrpCodeSigning@5 first, then pushed with dotnet nuget push.

New flow:
1. EsrpCodeSigning@5 with NuGetSign + NuGetVerify operations (CP-401405)
2. dotnet nuget push with the signed .nupkg to nuget.org

This matches the standard Microsoft NuGet ESRP signing pattern used by
azure-sdk, dotnet runtime, and other Microsoft OSS projects.

Co-authored-by: Copilot <[email protected]>

* fix(security): upgrade axios to 1.15.0 - CVE-2026-40175, CVE-2025-62718 (#966)

Critical S360 action items for SFI-ES5.2 1ES Open Source Vulnerabilities.

CVE-2026-40175 (CVSS 9.9): Unrestricted Cloud Metadata Exfiltration
via Header Injection Chain — prototype pollution gadget enables CRLF
injection in HTTP headers, bypassing AWS IMDSv2 session tokens.

CVE-2025-62718: NO_PROXY Bypass via Hostname Normalization — trailing
dots and IPv6 literals skip NO_PROXY matching, enabling SSRF through
attacker-controlled proxy.

Upgraded in 3 packages:
- extensions/copilot: 1.14.0 → 1.15.0
- extensions/cursor:  1.13.5 → 1.15.0
- agent-os-vscode:    1.13.6 → 1.15.0

Co-authored-by: Copilot <[email protected]>

* fix(ci): resolve ESRP_DOMAIN_TENANT_ID cyclical reference (#967)

The ADO variable ESRP_DOMAIN_TENANT_ID had a cyclical self-reference,
preventing ESRP authentication across ALL publishing stages (PyPI, npm,
NuGet, crates.io).

Fix: Define MICROSOFT_TENANT_ID as a pipeline-level variable with the
well-known Microsoft corporate tenant ID (72f988bf-..., same default
used by ESRP Release action.yml). This is a public value, not a secret.

Also: NuGet publishing requires Microsoft as co-owner of the package
on NuGet.org. See https://aka.ms/Microsoft-NuGet-Compliance

Co-authored-by: Copilot <[email protected]>

* docs: sync audit redaction status and framing with current code

- Update SOC2 mapping to reflect CredentialRedactor now redacts
  credential-like secrets before audit persistence (API keys, tokens,
  JWTs, connection strings, etc.). Remaining gap: non-credential PII
  (email, phone, addresses) not yet redacted in audit entries.
- Replace 'kernel-level enforcement' with 'policy-layer enforcement'
  in README, OWASP compliance, and architecture overview to match the
  existing 'application-level governance' framing in README Security
  section and LIMITATIONS.md.
- Qualify 10/10 OWASP coverage claim in COMPARISON.md with footnote
  clarifying this means mitigation components exist per risk category,
  not full elimination.
- Update owasp-llm-top10-mapping.md LLM06 row for credential redaction.

Addresses doc/code inconsistencies identified in external review.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>

* fix(lint): resolve agent-mesh lint errors in eu_ai_act.py (#1028)

- Remove unused variable profiling_override (F841)
- Remove f-string without placeholders (F541)
- Fix whitespace in docstrings (W293)

Co-authored-by: Copilot <[email protected]>

* fix(ci): add path filters and concurrency; announce v3.1.0 release (#1039)

CI optimization:
- Add paths-ignore for docs to 5 code-only workflows
- Add paths filter to Link Check (only run on docs changes)
- Add concurrency groups to 7 heavy workflows
- Docs-only PRs drop from ~14 checks to ~4

README:
- Add v3.1.0 release announcement callout
- Add PyPI version badge
- Update tutorial count to 31

Co-authored-by: Copilot <[email protected]>

* docs: add ADOPTERS.md and make deployment guides multi-cloud (#1040)

- New ADOPTERS.md following Backstage/Flatcar pattern with Production,
  Evaluation, and Academic tables + instructions for adding your org
- Rewrite docs/deployment/README.md from Azure-only to multi-cloud:
  Azure (AKS, Foundry, Container Apps), AWS (ECS/Fargate), GCP (GKE),
  Docker Compose, self-hosted. Updated architecture diagram to show
  cloud-agnostic deployment patterns.
- Fix broken AWS/GCP links (pointed to non-existent paths)
- README now links to 'Deployment Guides' (multi-cloud) instead of
  'Azure Deployment'
- README Contributing section invites adopters to add their org

Co-authored-by: Copilot <[email protected]>

* feat: add AGT Lite — zero-config governance in 3 lines, fix broken quickstart (#1044)

Addresses the #1 developer experience criticism: AGT is too complex to start.

New: agent_os.lite — lightweight governance module
- govern() factory: one line to create a governance gate
- check(action): one line to enforce — raises GovernanceViolation or returns True
- check.is_allowed(action): non-raising bool version
- Allow lists, deny lists, regex patterns, content filtering, rate limiting
- Built-in audit trail and stats
- Sub-millisecond evaluation (0.003ms avg, 1000 evals in <100ms)
- Zero dependencies beyond stdlib (re, time, datetime)
- 16 tests passing

Fix: govern_in_60_seconds.py quickstart
- BROKEN: was calling PolicyEvaluator.add_rules() which does not exist
- FIXED: now uses agent_os.lite.govern() which actually works
- Verified end-to-end: script runs and produces correct output

The lite module is for developers who just want basic governance
without learning PolicyEvaluator, YAML, OPA/Rego, trust mesh, etc.
Upgrade to the full stack when you need it.

Co-authored-by: Copilot <[email protected]>

* feat(ci): enhance weekly security audit with 7 new scan jobs (#1051)

Add comprehensive security checks based on issues found during
the MSRC-111178 security audit and ongoing post-merge reviews:

- Workflow security regression (MSRC-111178 pull_request_target check)
- Expression injection scan (github.event.* in run: blocks)
- Docker security (root containers, wildcard CORS, hardcoded passwords,
  0.0.0.0 bindings)
- XSS and unsafe DOM (innerHTML, eval, yaml.load, shell=True)
- Action SHA pinning compliance
- Version pinning (pyproject.toml upper bounds, Docker :latest tags,
  license field format)
- Dependency confusion with --strict mode (pyproject.toml + package.json)
- Retention days updated to 180 (EU AI Act Art. 26(6))

Co-authored-by: Copilot <[email protected]>

* fix(ci): fix OpenShell integration CI — spelling, link check, policy validation (#1057)

- Add OpenShell/NVIDIA terms to cspell dictionary (Landlock, seccomp, syscall, etc.)
- Fix broken link: openclaw-skill -> openshell-skill in docs/integrations/openshell.md
- Fix policy validation: replace starts_with (invalid) with matches + regex

Co-authored-by: Copilot <[email protected]>

* feat: add reversibility checker, trust calibration guide, and escalation/reversibility tests (#1061)

Addresses critical review feedback:

1. Rollback/reversibility (agent_os.reversibility)
   - ReversibilityChecker: pre-execution assessment of action reversibility
   - 4 levels: fully_reversible, partially_reversible, irreversible, unknown
   - CompensatingAction: structured undo plans for each action type
   - Built-in rules for 12 common actions (write, deploy, delete, email, etc.)
   - block_irreversible mode for strict environments

2. Trust score calibration guide (docs/security/trust-score-calibration.md)
   - Score component weights (compliance 35%, task 25%, behavior 25%, identity 15%)
   - Decay functions with tier floors
   - Initial score assignments by agent origin
   - Threshold recommendations (conservative/moderate/permissive)
   - Anti-gaming measures and operational playbook

3. Tests: 19 passing (10 escalation + 9 reversibility)

Co-authored-by: Copilot <[email protected]>

* feat: deployment runtime (Docker/AKS) and shared trust core types (#1062)

agent-runtime: Evolve from thin re-export shim to deployment runtime
- DockerDeployer: container deployment with security hardening
  (cap-drop ALL, no-new-privileges, read-only rootfs)
- KubernetesDeployer: AKS pod deployment with governance sidecars
  (runAsNonRoot, seccompProfile, resource limits)
- GovernanceConfig: policy/trust/audit config injected as env vars
- DeploymentTarget protocol for extensibility (ADC, nono, etc.)
- 24 tests (all subprocess calls mocked)

agent-mesh: Extract shared trust types into agentmesh.trust_types
- TrustScore, AgentProfile, TrustRecord, TrustTracker
- Canonical implementations replacing ~800 lines of duplicated code
  across 6+ integration packages
- 25 tests covering clamping, scoring, history, capabilities

Co-authored-by: Copilot <[email protected]>

* feat(dotnet): add kill switch and lifecycle management to .NET SDK (#1065)

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add comprehensive xUnit tests for both components (26 tests)
- Update .NET SDK README with usage documentation

Co-authored-by: Copilot <[email protected]>

* feat(go): add MCP security, execution rings, and lifecycle management to Go SDK (#1066)

- mcp.go: MCP security scanner detecting tool poisoning, typosquatting,
  hidden instructions (zero-width chars, homoglyphs), and rug pulls
- rings.go: Execution privilege ring model (Admin/Standard/Restricted/Sandboxed)
  with default-deny access control
- lifecycle.go: Eight-state agent lifecycle manager with validated transitions
- Full test coverage for all three modules
- Updated README with API docs and examples

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK (#1067)

* feat(dotnet): add kill switch and lifecycle management to .NET SDK

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add comprehensive xUnit tests for both components (26 tests)
- Update .NET SDK README with usage documentation

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK

Add two new modules to the agentmesh Rust crate:

- rings.rs: Four-level execution privilege ring model (Admin/Standard/
  Restricted/Sandboxed) with per-agent assignment and per-ring action
  permissions, ported from the Python hypervisor enforcer.

- lifecycle.rs: Eight-state agent lifecycle manager (Provisioning through
  Decommissioned) with validated state transitions and event history,
  matching the lifecycle model used across other SDK languages.

Both modules include comprehensive unit tests and are re-exported from
the crate root. README updated with API tables and usage examples.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix: align lotl_prevention_policy.yaml with PolicyDocument schema

The policy file used an incompatible schema format (id, parameter,
regex_match, effect) instead of the expected PolicyDocument fields
(name, condition.field, operator, action). This caused the
validate-policies CI check to fail for all PRs.

Changes:
- id → name
- condition.parameter → condition.field
- operator: regex_match → operator: matches
- action at rule level (shell_exec/file_read) → action: deny
- effect: DENY → removed (redundant with action: deny)
- Added version, name, description, disclaimer at top level

Co-authored-by: Copilot <[email protected]>

* fix: resolve .NET ESRP signing issues blocking NuGet publish

GitHub Actions (publish.yml):
- Fix broken if-guards on signing steps: env.ESRP_AAD_ID was set in
  step-level env (invisible to if-expressions). Replace with job-level
  ESRP_CONFIGURED env derived from secrets.
- Add missing ESRP_CERT_IDENTIFIER to signing step env blocks.
- Gate the publish step on ESRP_CONFIGURED so unsigned packages are
  never pushed to NuGet.org under the Microsoft.* prefix.
- Make stub signing steps fail-fast (exit 1) instead of silently
  succeeding, preventing unsigned packages from reaching NuGet push.

ADO Pipeline (esrp-publish.yml):
- Add UseDotNet@2 task to Publish_NuGet stage so dotnet nuget push
  has a guaranteed SDK version on the Windows agent.

Co-authored-by: Copilot <[email protected]>

* fix(docs): fix OpenClaw sidecar demo and add limitations callout (#1163)

The docker-compose example in openclaw-sidecar.md was illustrative only
and did not work — it referenced a non-existent OpenClaw image and lacked
healthchecks. Users were hitting this and getting confused.

Changes:
- Add working demo at demo/openclaw-governed/ with docker-compose.yaml
  that builds and runs the governance sidecar from source
- Replace the inline docker-compose in the doc with a link to the demo
  plus a clearly-labeled reference template for custom deployments
- Add prominent WARNING callout listing known limitations (no native
  OpenClaw integration, no published images, explicit API required)
- Remove stale orphaned curl snippet after the docker-compose block
- Add healthcheck to docker-compose governance-sidecar service
- Fix OpenClaw image reference from ghcr.io/openclaw/openclaw:latest
  to a placeholder users must replace with their own image

Co-authored-by: Copilot <[email protected]>

* fix(docs): fix OpenClaw sidecar demo and add limitations callout (#1164)

The docker-compose example in openclaw-sidecar.md was illustrative only
and did not work — it referenced a non-existent OpenClaw image and lacked
healthchecks. Users were hitting this and getting confused.

Changes:
- Add working demo at demo/openclaw-governed/ with docker-compose.yaml
  that builds and runs the governance sidecar from source
- Replace the inline docker-compose in the doc with a link to the demo
  plus a clearly-labeled reference template for custom deployments
- Add prominent WARNING callout listing known limitations (no native
  OpenClaw integration, no published images, explicit API required)
- Remove stale orphaned curl snippet after the docker-compose block
- Add healthcheck to docker-compose governance-sidecar service
- Fix OpenClaw image reference from ghcr.io/openclaw/openclaw:latest
  to a placeholder users must replace with their own image

Co-authored-by: Copilot <[email protected]>

* fix(ci): use PME tenant ID for ESRP cert signing

The ESRP signing cert lives in the PME (Partner Managed Engineering)
tenant (975f013f), not the Microsoft corporate tenant (72f988bf).
Using the wrong tenant ID causes ESRP signing to fail when looking
up the cert.

Co-authored-by: Copilot <[email protected]>

* docs: Add Scaling AI Agents article to COMMUNITY.md (#857)

Co-authored-by: deepsearch <[email protected]>

* Add runtime evidence mode to agt verify (#969)

* Track agt verify evidence plan

* Add runtime evidence mode to agt verify

* Add runtime evidence verifier tests

* Add CLI tests for agt verify evidence mode

* Document evidence mode for compliance verification

* Remove local implementation notes

* Document agt verify evidence mode

* Harden evidence path handling in verify

---------

Co-authored-by: T. Smith <[email protected]>

* docs: add Entra Agent ID bridge tutorial with R&R matrix and DID fix

- Add Tutorial 31: Bridging AGT Identity with Microsoft Entra Agent ID
  - Detailed roles & responsibilities between AGT and Entra/Agent365
  - Architecture diagram showing the identity bridge
  - Step-by-step: DID creation, Entra binding, AKS workload identity,
    token validation, lifecycle sync, access verification
  - Known gaps and limitations table
  - Platform independence note (AWS, GCP, Okta patterns)
- Fix DID prefix in .NET MCP gateway tests (did:agentmesh → did:mesh
  for consistency with Python reference implementation and .NET SDK)
- Update tutorials README with Enterprise Identity section

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>
Co-authored-by: Jack Batzner <[email protected]>
Co-authored-by: lawcontinue <[email protected]>
Co-authored-by: deepsearch <[email protected]>
Co-authored-by: ewmh <[email protected]>
Co-authored-by: T. Smith <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>
Co-authored-by: Jack Batzner <[email protected]>
Co-authored-by: lawcontinue <[email protected]>
Co-authored-by: deepsearch <[email protected]>
Co-authored-by: ewmh <[email protected]>
Co-authored-by: T. Smith <[email protected]>
imran-siddique added a commit that referenced this pull request Apr 16, 2026
…) + critic gap docs (#1170)

* feat(dotnet): add MCP security namespace — completes cross-language MCP parity

* fix(ci): add path filters and concurrency; announce v3.1.0 release

CI optimization:
- Add paths-ignore for docs to 5 code-only workflows
- Add paths filter to Link Check (only run on docs changes)
- Add concurrency groups to 7 heavy workflows
- Docs-only PRs drop from ~14 checks to ~4

README:
- Add v3.1.0 release announcement callout
- Add PyPI version badge
- Update tutorial count to 31

Co-authored-by: Copilot <[email protected]>

* docs: update SOC2 mapping for resolved kill switch and DeltaEngine gaps

- Kill switch is no longer placeholder: now implements saga handoff
  with handoff_success_count tracking (kill_switch.py:69-178)
- DeltaEngine verify_chain() is no longer a stub: now performs SHA-256
  chain verification (delta.py:67-127)
- Move both from Critical/High gaps to new 'Resolved' section
- Update Processing Integrity coverage (2 of 4 defects, not 3 of 4)
- Update evidence table with current line ranges

Co-authored-by: Copilot <[email protected]>

* feat(dotnet): add MCP security namespace with scanner, gateway, redactor, and sanitizer

Add AgentGovernance.Mcp namespace implementing full MCP security parity with
TypeScript and Rust SDKs:

- McpSecurityScanner: tool poisoning, typosquatting, hidden instructions,
  rug pull, schema abuse, cross-server attack, and description injection detection
- McpCredentialRedactor: regex-based redaction of API keys, bearer tokens,
  connection strings, and secret assignments
- McpResponseSanitizer: response scanning for prompt injection tags,
  imperative phrasing, credential leakage, and exfiltration URLs
- McpGateway: policy enforcement pipeline with deny/allow lists, payload
  sanitization, rate limiting, and human approval gates

Includes 46 xUnit tests covering all threat categories. Updates
SDK-FEATURE-MATRIX.md to flip .NET MCP Security from — to ✅.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* docs: add Entra Agent ID bridge tutorial (Tutorial 31) (#10)

* fix(pipeline): run NuGet ESRP signing on Windows agent (#1022)

The EsrpCodeSigning@5 task constructs internal paths (batchSignPolicyFile,
ciPolicyFile) using Windows-style backslashes. Running on ubuntu-latest
produced garbled mixed paths like '/home/vsts/work/1/s/src\myapp\'.

Changes:
- Add per-job pool override: PublishNuGet runs on windows-latest
- Convert FolderPath and all shell commands to Windows paths
- Replace bash scripts with PowerShell for the Windows agent
- PyPI and npm stages remain on ubuntu-latest (unchanged)
- Add comment to delete orphaned ESRP_DOMAIN_TENANT_ID ADO variable

Co-authored-by: Copilot <[email protected]>

* docs: reland empty-merge changes from PRs #1017 and #1020 (#1125)

PRs #1017 and #1020 were squash-merged as empty commits (0 file
changes). This commit re-applies the intended documentation updates.

From PR #1017 (critic gaps):
- LIMITATIONS.md: add sections 7 (knowledge governance gap), 8
  (credential persistence gap), 9 (initialization bypass risk)
- LIMITATIONS.md: add knowledge governance and enforcement infra
  rows to 'What AGT Is Not' table
- THREAT_MODEL.md: add knowledge flow and credential persistence
  to residual risks, add configuration bypass vectors table,
  remove stale '10/10' qualifier

From PR #1020 (SOC2 resolved gaps):
- soc2-mapping.md: mark kill switch as resolved (saga handoff
  implemented in kill_switch.py:69-178)
- soc2-mapping.md: mark DeltaEngine verify_chain() as resolved
  (SHA-256 chain verification in delta.py:67-127)
- soc2-mapping.md: add Resolved section to gaps summary, update
  Processing Integrity to 2 of 4 defects (was 3 of 4)

Co-authored-by: Copilot <[email protected]>

* feat(dotnet): add MCP security namespace — completes cross-language MCP parity (#1021)

* fix(ci): add path filters and concurrency; announce v3.1.0 release

CI optimization:
- Add paths-ignore for docs to 5 code-only workflows
- Add paths filter to Link Check (only run on docs changes)
- Add concurrency groups to 7 heavy workflows
- Docs-only PRs drop from ~14 checks to ~4

README:
- Add v3.1.0 release announcement callout
- Add PyPI version badge
- Update tutorial count to 31



* docs: update SOC2 mapping for resolved kill switch and DeltaEngine gaps

- Kill switch is no longer placeholder: now implements saga handoff
  with handoff_success_count tracking (kill_switch.py:69-178)
- DeltaEngine verify_chain() is no longer a stub: now performs SHA-256
  chain verification (delta.py:67-127)
- Move both from Critical/High gaps to new 'Resolved' section
- Update Processing Integrity coverage (2 of 4 defects, not 3 of 4)
- Update evidence table with current line ranges



* feat(dotnet): add MCP security namespace with scanner, gateway, redactor, and sanitizer

Add AgentGovernance.Mcp namespace implementing full MCP security parity with
TypeScript and Rust SDKs:

- McpSecurityScanner: tool poisoning, typosquatting, hidden instructions,
  rug pull, schema abuse, cross-server attack, and description injection detection
- McpCredentialRedactor: regex-based redaction of API keys, bearer tokens,
  connection strings, and secret assignments
- McpResponseSanitizer: response scanning for prompt injection tags,
  imperative phrasing, credential leakage, and exfiltration URLs
- McpGateway: policy enforcement pipeline with deny/allow lists, payload
  sanitization, rate limiting, and human approval gates

Includes 46 xUnit tests covering all threat categories. Updates
SDK-FEATURE-MATRIX.md to flip .NET MCP Security from — to ✅.



---------

Co-authored-by: Copilot <[email protected]>

* docs: address external critic gaps (#1025)

* feat(dotnet): add kill switch and lifecycle management to .NET SDK (#5)

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add 26 xUnit tests
- Update README

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK (#6)

* feat(dotnet): add kill switch and lifecycle management to .NET SDK

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add comprehensive xUnit tests for both components (26 tests)
- Update .NET SDK README with usage documentation

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK

Add two new modules to the agentmesh Rust crate:

- rings.rs: Four-level execution privilege ring model (Admin/Standard/
  Restricted/Sandboxed) with per-agent assignment and per-ring action
  permissions, ported from the Python hypervisor enforcer.

- lifecycle.rs: Eight-state agent lifecycle manager (Provisioning through
  Decommissioned) with validated state transitions and event history,
  matching the lifecycle model used across other SDK languages.

Both modules include comprehensive unit tests and are re-exported from
the crate root. README updated with API tables and usage examples.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* feat(go): add MCP security, execution rings, and lifecycle management to Go SDK (#7)

* feat(openshell): add governance skill package and runnable example (#942)

Co-authored-by: Copilot <[email protected]>

* feat(go): add MCP security, execution rings, and lifecycle management to Go SDK

- mcp.go: MCP security scanner detecting tool poisoning, typosquatting,
  hidden instructions (zero-width chars, homoglyphs), and rug pulls
- rings.go: Execution privilege ring model (Admin/Standard/Restricted/Sandboxed)
  with default-deny access control
- lifecycle.go: Eight-state agent lifecycle manager with validated transitions
- Full test coverage for all three modules
- Updated README with API docs and examples

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* docs: sync audit redaction status and framing with current code (#8)

* feat(openshell): add governance skill package and runnable example (#942)

Co-authored-by: Copilot <[email protected]>

* feat(typescript): add MCP security scanner and lifecycle management to TS SDK (#947)

Co-authored-by: Copilot <[email protected]>

* docs: update SDK feature matrix after parity pass (#950)

Reflects new capabilities added in PRs #947 (TS), .NET, Rust, Go:
- TypeScript: MCP security scanner + lifecycle management (was 5/14, now 7/14)
- .NET: Kill switch + lifecycle management (was 8/14, now 10/14)
- Rust: Execution rings + lifecycle management (was 6/14, now 8/14)
- Go: MCP security + rings + lifecycle (was 4/14, now 7/14)

All SDKs now have lifecycle management. Core governance (policy, identity,
trust, audit) + lifecycle = 5 primitives shared across all 5 languages.

Co-authored-by: Copilot <[email protected]>

* docs: add LIMITATIONS.md - honest design boundaries and layered defense (#953)

Addresses valid external critique of AGT's architectural blind spots:

1. Action vs Intent: AGT governs individual actions, not reasoning or
   action sequences. Documents the compound-action gap explicitly and
   recommends content policies + model safety layers.

2. Audit logs record attempts, not outcomes: Documents that post-action
   state verification is the user's responsibility today, with hooks planned.

3. Performance honesty: README now notes that <0.1ms is policy-eval only;
   distributed mesh adds 5-50ms. Full breakdown in LIMITATIONS.md.

4. Complexity spectrum: Documents the minimal path (just PolicyEvaluator,
   no mesh/crypto) vs full enterprise stack.

5. Vendor independence: Documents zero cloud dependencies in core,
   standard formats for all state, migration path.

6. Recommended layered defense architecture diagram showing AGT as one
   layer alongside model safety, application logic, and infrastructure.

Co-authored-by: Copilot <[email protected]>

* fix(docs): rewrite OpenClaw sidecar deployment with working K8s manifests (#954)

Closes #952

Co-authored-by: Copilot <[email protected]>

* feat: reversibility checker, trust calibration guide, escalation tests (#955)

ReversibilityChecker with 4 levels and compensation plans. Trust score calibration guide with weights, decay, thresholds. 19 tests. Co-authored-by: Copilot <[email protected]>

* feat: AGT Lite — zero-config governance in 3 lines + fix broken quickstart (#956)

agent_os.lite: govern() factory, sub-ms enforcement, 16 tests. Fixed quickstart that called nonexistent add_rules(). Co-authored-by: Copilot <[email protected]>

* fix: bump all runtime versions to 3.1.0 and fix CI lint/test failures (#957)

- Bump __version__ in 29 Python __init__.py files from 3.0.2 to 3.1.0
- Bump version= in 6 setup.py files from 3.0.2 to 3.1.0
- Bump meter version strings in _mcp_metrics.py
- Bump 9 package.json files from 3.0.2 to 3.1.0
- Bump .NET csproj Version from 3.0.2 to 3.1.0
- Bump Rust workspace Cargo.toml from 3.0.2 to 3.1.0
- Create Go sdk doc.go with version marker 3.1.0
- Fix ruff W292 (missing newline at EOF) in data_classification.py
- Fix CLI init regex to allow dots in agent names (test_init_special_characters)

Co-authored-by: Copilot <[email protected]>

* fix(openclaw): critical honesty pass — document what works vs what's planned (#958)

Co-authored-by: Copilot <[email protected]>

* fix(ci): fix Rust crate packaging - use workspace root with -p agentmesh (#959)

* fix(openclaw): critical honesty pass — document what works vs what's planned

Server (__main__.py):
- Add --host/--port argparse + env var support (was hardcoded 127.0.0.1:8080)

Dockerfile.sidecar:
- Copy modules/ directory (was missing, causing build failure)
- Use 0.0.0.0 for container binding (127.0.0.1 is wrong inside containers)
- Remove phantom port 9091 (no separate metrics listener exists)

openclaw-sidecar.md — full honesty rewrite:
- Add status banner: transparent interception is NOT yet implemented
- Document actual sidecar API endpoints (health, detect/injection, execute, metrics)
- Fix Docker Compose to use Dockerfile.sidecar (was using wrong Dockerfile)
- Remove GOVERNANCE_PROXY claim (OpenClaw doesn't natively read this)
- Replace fictional SLO/Grafana sections with real /api/v1/metrics docs
- Add Roadmap section listing what's planned vs shipped

openshell.md:
- Remove references to non-existent shell scripts
- Fix python -m agentmesh.server to python -m agent_os.server
- Add note that sidecar doesn't transparently intercept (must call API)
- Replace pip install agentmesh-platform with Python skill library usage

Co-authored-by: Copilot <[email protected]>

* fix(ci): fix Rust crate packaging — use workspace root with -p agentmesh

cargo package in a workspace writes .crate files to the workspace root's
target/package/, not the individual crate's directory. The pipeline was
running from the crate subdirectory and couldn't find the output.

Fix: change workingDirectory from packages/agent-mesh/sdks/rust/agentmesh
to packages/agent-mesh/sdks/rust (workspace root) and add -p agentmesh
to all cargo commands to target the specific crate.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* docs(adr): ADR 0005 — Liveness attestation extension for TrustHandshake (#948)

Proposes liveness attestation as opt-in gate for TrustHandshake. Addresses ghost-agent and ungraceful-handoff gaps from #772.

Co-authored-by: kevinkaylie <[email protected]>

* blog: MCP Security — Why Your AI Agent Tool Calls Need a Firewall (#899)

Co-authored-by: aymenhmaidiwastaken <[email protected]>

* feat: add LotL prevention policy for security measures (#949)

YAML policy template for Living-off-the-Land detection and prevention.

* feat(examples): add ATR community security rules for PolicyEvaluator (#908)

15 curated ATR detection rules + sync script. Closes #901.

* fix(docs): correct npm package name and stale version refs across 21 files (#960)

- Fix @agentmesh/sdk → @microsoft/agentmesh-sdk in 13 markdown files
  (README, QUICKSTART, tutorials, SDK docs, i18n, changelog)
- Fix broken demo path in agent-os README (agent-os/demo.py → demo/maf_governance_demo.py)
- Remove stale v1.0.0 labels from extension status table
- Bump AGT Version refs 3.0.2 → 3.1.0 in case study templates and
  ATF conformance assessment

Co-authored-by: Copilot <[email protected]>

* fix(ci): use ESRP Release for NuGet signing (#961)

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing (#962)

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag

Three gaps found during publish verification:

1. PyPI: add agentmesh-marketplace (8th package, was missing from matrix)
2. Rust: build+publish both workspace crates (agentmesh + agentmesh-mcp)
   - Changed from single-crate to workspace build (--workspace)
   - Package loop builds both .crate files
   - Renamed artifact from 'rust-agentmesh' to 'rust-crates'
3. Go: add 'v' prefix to version in doc.go (3.1.0 → v3.1.0)
   - Go module tags require semver with v prefix
   - Pipeline grep expects '// Version: v...' format

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing — 'NuGet' not 'Nuget'

ESRP Release rejected 'Nuget' with: 'The value provided for
ReleaseContentType property is invalid.' ErrorCode 2254.

ESRP content types are case-sensitive. Fix: 'Nuget' -> 'NuGet'.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag (#963)

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag

Three gaps found during publish verification:

1. PyPI: add agentmesh-marketplace (8th package, was missing from matrix)
2. Rust: build+publish both workspace crates (agentmesh + agentmesh-mcp)
   - Changed from single-crate to workspace build (--workspace)
   - Package loop builds both .crate files
   - Renamed artifact from 'rust-agentmesh' to 'rust-crates'
3. Go: add 'v' prefix to version in doc.go (3.1.0 → v3.1.0)
   - Go module tags require semver with v prefix
   - Pipeline grep expects '// Version: v...' format

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing — 'NuGet' not 'Nuget'

ESRP Release rejected 'Nuget' with: 'The value provided for
ReleaseContentType property is invalid.' ErrorCode 2254.

ESRP content types are case-sensitive. Fix: 'Nuget' -> 'NuGet'.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix(ci): use EsrpCodeSigning + dotnet push for NuGet (#965)

EsrpRelease@11 does not support NuGet as a contenttype — it's for
PyPI/npm/Maven/crates.io package distribution. NuGet packages must be
signed with EsrpCodeSigning@5 first, then pushed with dotnet nuget push.

New flow:
1. EsrpCodeSigning@5 with NuGetSign + NuGetVerify operations (CP-401405)
2. dotnet nuget push with the signed .nupkg to nuget.org

This matches the standard Microsoft NuGet ESRP signing pattern used by
azure-sdk, dotnet runtime, and other Microsoft OSS projects.

Co-authored-by: Copilot <[email protected]>

* fix(security): upgrade axios to 1.15.0 - CVE-2026-40175, CVE-2025-62718 (#966)

Critical S360 action items for SFI-ES5.2 1ES Open Source Vulnerabilities.

CVE-2026-40175 (CVSS 9.9): Unrestricted Cloud Metadata Exfiltration
via Header Injection Chain — prototype pollution gadget enables CRLF
injection in HTTP headers, bypassing AWS IMDSv2 session tokens.

CVE-2025-62718: NO_PROXY Bypass via Hostname Normalization — trailing
dots and IPv6 literals skip NO_PROXY matching, enabling SSRF through
attacker-controlled proxy.

Upgraded in 3 packages:
- extensions/copilot: 1.14.0 → 1.15.0
- extensions/cursor:  1.13.5 → 1.15.0
- agent-os-vscode:    1.13.6 → 1.15.0

Co-authored-by: Copilot <[email protected]>

* fix(ci): resolve ESRP_DOMAIN_TENANT_ID cyclical reference (#967)

The ADO variable ESRP_DOMAIN_TENANT_ID had a cyclical self-reference,
preventing ESRP authentication across ALL publishing stages (PyPI, npm,
NuGet, crates.io).

Fix: Define MICROSOFT_TENANT_ID as a pipeline-level variable with the
well-known Microsoft corporate tenant ID (72f988bf-..., same default
used by ESRP Release action.yml). This is a public value, not a secret.

Also: NuGet publishing requires Microsoft as co-owner of the package
on NuGet.org. See https://aka.ms/Microsoft-NuGet-Compliance

Co-authored-by: Copilot <[email protected]>

* docs: sync audit redaction status and framing with current code

- Update SOC2 mapping to reflect CredentialRedactor now redacts
  credential-like secrets before audit persistence (API keys, tokens,
  JWTs, connection strings, etc.). Remaining gap: non-credential PII
  (email, phone, addresses) not yet redacted in audit entries.
- Replace 'kernel-level enforcement' with 'policy-layer enforcement'
  in README, OWASP compliance, and architecture overview to match the
  existing 'application-level governance' framing in README Security
  section and LIMITATIONS.md.
- Qualify 10/10 OWASP coverage claim in COMPARISON.md with footnote
  clarifying this means mitigation components exist per risk category,
  not full elimination.
- Update owasp-llm-top10-mapping.md LLM06 row for credential redaction.

Addresses doc/code inconsistencies identified in external review.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>

* fix(lint): resolve agent-mesh lint errors in eu_ai_act.py (#1028)

- Remove unused variable profiling_override (F841)
- Remove f-string without placeholders (F541)
- Fix whitespace in docstrings (W293)

Co-authored-by: Copilot <[email protected]>

* fix(ci): add path filters and concurrency; announce v3.1.0 release (#1039)

CI optimization:
- Add paths-ignore for docs to 5 code-only workflows
- Add paths filter to Link Check (only run on docs changes)
- Add concurrency groups to 7 heavy workflows
- Docs-only PRs drop from ~14 checks to ~4

README:
- Add v3.1.0 release announcement callout
- Add PyPI version badge
- Update tutorial count to 31

Co-authored-by: Copilot <[email protected]>

* docs: add ADOPTERS.md and make deployment guides multi-cloud (#1040)

- New ADOPTERS.md following Backstage/Flatcar pattern with Production,
  Evaluation, and Academic tables + instructions for adding your org
- Rewrite docs/deployment/README.md from Azure-only to multi-cloud:
  Azure (AKS, Foundry, Container Apps), AWS (ECS/Fargate), GCP (GKE),
  Docker Compose, self-hosted. Updated architecture diagram to show
  cloud-agnostic deployment patterns.
- Fix broken AWS/GCP links (pointed to non-existent paths)
- README now links to 'Deployment Guides' (multi-cloud) instead of
  'Azure Deployment'
- README Contributing section invites adopters to add their org

Co-authored-by: Copilot <[email protected]>

* feat: add AGT Lite — zero-config governance in 3 lines, fix broken quickstart (#1044)

Addresses the #1 developer experience criticism: AGT is too complex to start.

New: agent_os.lite — lightweight governance module
- govern() factory: one line to create a governance gate
- check(action): one line to enforce — raises GovernanceViolation or returns True
- check.is_allowed(action): non-raising bool version
- Allow lists, deny lists, regex patterns, content filtering, rate limiting
- Built-in audit trail and stats
- Sub-millisecond evaluation (0.003ms avg, 1000 evals in <100ms)
- Zero dependencies beyond stdlib (re, time, datetime)
- 16 tests passing

Fix: govern_in_60_seconds.py quickstart
- BROKEN: was calling PolicyEvaluator.add_rules() which does not exist
- FIXED: now uses agent_os.lite.govern() which actually works
- Verified end-to-end: script runs and produces correct output

The lite module is for developers who just want basic governance
without learning PolicyEvaluator, YAML, OPA/Rego, trust mesh, etc.
Upgrade to the full stack when you need it.

Co-authored-by: Copilot <[email protected]>

* feat(ci): enhance weekly security audit with 7 new scan jobs (#1051)

Add comprehensive security checks based on issues found during
the MSRC-111178 security audit and ongoing post-merge reviews:

- Workflow security regression (MSRC-111178 pull_request_target check)
- Expression injection scan (github.event.* in run: blocks)
- Docker security (root containers, wildcard CORS, hardcoded passwords,
  0.0.0.0 bindings)
- XSS and unsafe DOM (innerHTML, eval, yaml.load, shell=True)
- Action SHA pinning compliance
- Version pinning (pyproject.toml upper bounds, Docker :latest tags,
  license field format)
- Dependency confusion with --strict mode (pyproject.toml + package.json)
- Retention days updated to 180 (EU AI Act Art. 26(6))

Co-authored-by: Copilot <[email protected]>

* fix(ci): fix OpenShell integration CI — spelling, link check, policy validation (#1057)

- Add OpenShell/NVIDIA terms to cspell dictionary (Landlock, seccomp, syscall, etc.)
- Fix broken link: openclaw-skill -> openshell-skill in docs/integrations/openshell.md
- Fix policy validation: replace starts_with (invalid) with matches + regex

Co-authored-by: Copilot <[email protected]>

* feat: add reversibility checker, trust calibration guide, and escalation/reversibility tests (#1061)

Addresses critical review feedback:

1. Rollback/reversibility (agent_os.reversibility)
   - ReversibilityChecker: pre-execution assessment of action reversibility
   - 4 levels: fully_reversible, partially_reversible, irreversible, unknown
   - CompensatingAction: structured undo plans for each action type
   - Built-in rules for 12 common actions (write, deploy, delete, email, etc.)
   - block_irreversible mode for strict environments

2. Trust score calibration guide (docs/security/trust-score-calibration.md)
   - Score component weights (compliance 35%, task 25%, behavior 25%, identity 15%)
   - Decay functions with tier floors
   - Initial score assignments by agent origin
   - Threshold recommendations (conservative/moderate/permissive)
   - Anti-gaming measures and operational playbook

3. Tests: 19 passing (10 escalation + 9 reversibility)

Co-authored-by: Copilot <[email protected]>

* feat: deployment runtime (Docker/AKS) and shared trust core types (#1062)

agent-runtime: Evolve from thin re-export shim to deployment runtime
- DockerDeployer: container deployment with security hardening
  (cap-drop ALL, no-new-privileges, read-only rootfs)
- KubernetesDeployer: AKS pod deployment with governance sidecars
  (runAsNonRoot, seccompProfile, resource limits)
- GovernanceConfig: policy/trust/audit config injected as env vars
- DeploymentTarget protocol for extensibility (ADC, nono, etc.)
- 24 tests (all subprocess calls mocked)

agent-mesh: Extract shared trust types into agentmesh.trust_types
- TrustScore, AgentProfile, TrustRecord, TrustTracker
- Canonical implementations replacing ~800 lines of duplicated code
  across 6+ integration packages
- 25 tests covering clamping, scoring, history, capabilities

Co-authored-by: Copilot <[email protected]>

* feat(dotnet): add kill switch and lifecycle management to .NET SDK (#1065)

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add comprehensive xUnit tests for both components (26 tests)
- Update .NET SDK README with usage documentation

Co-authored-by: Copilot <[email protected]>

* feat(go): add MCP security, execution rings, and lifecycle management to Go SDK (#1066)

- mcp.go: MCP security scanner detecting tool poisoning, typosquatting,
  hidden instructions (zero-width chars, homoglyphs), and rug pulls
- rings.go: Execution privilege ring model (Admin/Standard/Restricted/Sandboxed)
  with default-deny access control
- lifecycle.go: Eight-state agent lifecycle manager with validated transitions
- Full test coverage for all three modules
- Updated README with API docs and examples

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK (#1067)

* feat(dotnet): add kill switch and lifecycle management to .NET SDK

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add comprehensive xUnit tests for both components (26 tests)
- Update .NET SDK README with usage documentation

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK

Add two new modules to the agentmesh Rust crate:

- rings.rs: Four-level execution privilege ring model (Admin/Standard/
  Restricted/Sandboxed) with per-agent assignment and per-ring action
  permissions, ported from the Python hypervisor enforcer.

- lifecycle.rs: Eight-state agent lifecycle manager (Provisioning through
  Decommissioned) with validated state transitions and event history,
  matching the lifecycle model used across other SDK languages.

Both modules include comprehensive unit tests and are re-exported from
the crate root. README updated with API tables and usage examples.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix: align lotl_prevention_policy.yaml with PolicyDocument schema

The policy file used an incompatible schema format (id, parameter,
regex_match, effect) instead of the expected PolicyDocument fields
(name, condition.field, operator, action). This caused the
validate-policies CI check to fail for all PRs.

Changes:
- id → name
- condition.parameter → condition.field
- operator: regex_match → operator: matches
- action at rule level (shell_exec/file_read) → action: deny
- effect: DENY → removed (redundant with action: deny)
- Added version, name, description, disclaimer at top level

Co-authored-by: Copilot <[email protected]>

* fix: resolve .NET ESRP signing issues blocking NuGet publish

GitHub Actions (publish.yml):
- Fix broken if-guards on signing steps: env.ESRP_AAD_ID was set in
  step-level env (invisible to if-expressions). Replace with job-level
  ESRP_CONFIGURED env derived from secrets.
- Add missing ESRP_CERT_IDENTIFIER to signing step env blocks.
- Gate the publish step on ESRP_CONFIGURED so unsigned packages are
  never pushed to NuGet.org under the Microsoft.* prefix.
- Make stub signing steps fail-fast (exit 1) instead of silently
  succeeding, preventing unsigned packages from reaching NuGet push.

ADO Pipeline (esrp-publish.yml):
- Add UseDotNet@2 task to Publish_NuGet stage so dotnet nuget push
  has a guaranteed SDK version on the Windows agent.

Co-authored-by: Copilot <[email protected]>

* fix(docs): fix OpenClaw sidecar demo and add limitations callout (#1163)

The docker-compose example in openclaw-sidecar.md was illustrative only
and did not work — it referenced a non-existent OpenClaw image and lacked
healthchecks. Users were hitting this and getting confused.

Changes:
- Add working demo at demo/openclaw-governed/ with docker-compose.yaml
  that builds and runs the governance sidecar from source
- Replace the inline docker-compose in the doc with a link to the demo
  plus a clearly-labeled reference template for custom deployments
- Add prominent WARNING callout listing known limitations (no native
  OpenClaw integration, no published images, explicit API required)
- Remove stale orphaned curl snippet after the docker-compose block
- Add healthcheck to docker-compose governance-sidecar service
- Fix OpenClaw image reference from ghcr.io/openclaw/openclaw:latest
  to a placeholder users must replace with their own image

Co-authored-by: Copilot <[email protected]>

* fix(docs): fix OpenClaw sidecar demo and add limitations callout (#1164)

The docker-compose example in openclaw-sidecar.md was illustrative only
and did not work — it referenced a non-existent OpenClaw image and lacked
healthchecks. Users were hitting this and getting confused.

Changes:
- Add working demo at demo/openclaw-governed/ with docker-compose.yaml
  that builds and runs the governance sidecar from source
- Replace the inline docker-compose in the doc with a link to the demo
  plus a clearly-labeled reference template for custom deployments
- Add prominent WARNING callout listing known limitations (no native
  OpenClaw integration, no published images, explicit API required)
- Remove stale orphaned curl snippet after the docker-compose block
- Add healthcheck to docker-compose governance-sidecar service
- Fix OpenClaw image reference from ghcr.io/openclaw/openclaw:latest
  to a placeholder users must replace with their own image

Co-authored-by: Copilot <[email protected]>

* fix(ci): use PME tenant ID for ESRP cert signing

The ESRP signing cert lives in the PME (Partner Managed Engineering)
tenant (975f013f), not the Microsoft corporate tenant (72f988bf).
Using the wrong tenant ID causes ESRP signing to fail when looking
up the cert.

Co-authored-by: Copilot <[email protected]>

* docs: Add Scaling AI Agents article to COMMUNITY.md (#857)

Co-authored-by: deepsearch <[email protected]>

* Add runtime evidence mode to agt verify (#969)

* Track agt verify evidence plan

* Add runtime evidence mode to agt verify

* Add runtime evidence verifier tests

* Add CLI tests for agt verify evidence mode

* Document evidence mode for compliance verification

* Remove local implementation notes

* Document agt verify evidence mode

* Harden evidence path handling in verify

---------

Co-authored-by: T. Smith <[email protected]>

* docs: add Entra Agent ID bridge tutorial with R&R matrix and DID fix

- Add Tutorial 31: Bridging AGT Identity with Microsoft Entra Agent ID
  - Detailed roles & responsibilities between AGT and Entra/Agent365
  - Architecture diagram showing the identity bridge
  - Step-by-step: DID creation, Entra binding, AKS workload identity,
    token validation, lifecycle sync, access verification
  - Known gaps and limitations table
  - Platform independence note (AWS, GCP, Okta patterns)
- Fix DID prefix in .NET MCP gateway tests (did:agentmesh → did:mesh
  for consistency with Python reference implementation and .NET SDK)
- Update tutorials README with Enterprise Identity section

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>
Co-authored-by: Jack Batzner <[email protected]>
Co-authored-by: lawcontinue <[email protected]>
Co-authored-by: deepsearch <[email protected]>
Co-authored-by: ewmh <[email protected]>
Co-authored-by: T. Smith <[email protected]>

* docs: address external critic gaps in limitations and threat model (#11)

Add three new sections to LIMITATIONS.md addressing gaps identified in
public criticism and external security analysis:

- §10 Physical AI and Embodied Agent Governance: documents that AGT
  governs software agents not physical actuators, with mitigations
- §11 Streaming Data and Real-Time Assurance: documents that AGT
  evaluates per-action not continuously over data streams
- §12 DID Method Inconsistency Across SDKs: documents the did:mesh
  vs did:agentmesh split with migration plan for v4.0

Update THREAT_MODEL.md residual risks to reference all three new
limitation sections.

Co-authored-by: Copilot <[email protected]>

* fix!: standardize DID method to did:agentmesh across all SDKs (#12)

* fix!: standardize DID method to did:agentmesh across all SDKs

BREAKING CHANGE: All agent DIDs now use the did:agentmesh: prefix.
The legacy did:mesh: prefix used by Python and .NET has been migrated
to match the did:agentmesh: convention already used by TypeScript,
Rust, and Go SDKs.

Changes:
- Python: agent_id.py, delegation.py, entra.py, all integrations
- .NET: AgentIdentity.cs, Jwk.cs, GovernanceKernel.cs, all tests
- Docs: README, tutorials, identity docs, FAQ, compliance docs
- Tests: all test fixtures updated across Python, .NET, TS, VSCode
- Version bump: 3.1.0 → 3.2.0 (.NET, Python agent-mesh, TypeScript)

Migration: replace did:mesh: with did:agentmesh: in your policies,
identity registries, and agent configurations.

Co-authored-by: Copilot <[email protected]>

* docs: add Q11-Q13 to FAQ — AGT scope, Agent 365, and DLP comparison

Adds three new customer Q&As:
- Q11: Is AGT for Foundry agents or any agent type? (any)
- Q12: Relationship between AGT and Agent 365 (different layers)
- Q13: How is AGT different from DLP/communication compliance
  (content vs action governance)

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>
Co-authored-by: Jack Batzner <[email protected]>
Co-authored-by: lawcontinue <[email protected]>
Co-authored-by: deepsearch <[email protected]>
Co-authored-by: ewmh <[email protected]>
Co-authored-by: T. Smith <[email protected]>
imran-siddique added a commit that referenced this pull request Apr 17, 2026
…1192)

* feat(dotnet): add MCP security namespace — completes cross-language MCP parity

* fix(ci): add path filters and concurrency; announce v3.1.0 release

CI optimization:
- Add paths-ignore for docs to 5 code-only workflows
- Add paths filter to Link Check (only run on docs changes)
- Add concurrency groups to 7 heavy workflows
- Docs-only PRs drop from ~14 checks to ~4

README:
- Add v3.1.0 release announcement callout
- Add PyPI version badge
- Update tutorial count to 31

Co-authored-by: Copilot <[email protected]>

* docs: update SOC2 mapping for resolved kill switch and DeltaEngine gaps

- Kill switch is no longer placeholder: now implements saga handoff
  with handoff_success_count tracking (kill_switch.py:69-178)
- DeltaEngine verify_chain() is no longer a stub: now performs SHA-256
  chain verification (delta.py:67-127)
- Move both from Critical/High gaps to new 'Resolved' section
- Update Processing Integrity coverage (2 of 4 defects, not 3 of 4)
- Update evidence table with current line ranges

Co-authored-by: Copilot <[email protected]>

* feat(dotnet): add MCP security namespace with scanner, gateway, redactor, and sanitizer

Add AgentGovernance.Mcp namespace implementing full MCP security parity with
TypeScript and Rust SDKs:

- McpSecurityScanner: tool poisoning, typosquatting, hidden instructions,
  rug pull, schema abuse, cross-server attack, and description injection detection
- McpCredentialRedactor: regex-based redaction of API keys, bearer tokens,
  connection strings, and secret assignments
- McpResponseSanitizer: response scanning for prompt injection tags,
  imperative phrasing, credential leakage, and exfiltration URLs
- McpGateway: policy enforcement pipeline with deny/allow lists, payload
  sanitization, rate limiting, and human approval gates

Includes 46 xUnit tests covering all threat categories. Updates
SDK-FEATURE-MATRIX.md to flip .NET MCP Security from — to ✅.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* docs: add Entra Agent ID bridge tutorial (Tutorial 31) (#10)

* fix(pipeline): run NuGet ESRP signing on Windows agent (#1022)

The EsrpCodeSigning@5 task constructs internal paths (batchSignPolicyFile,
ciPolicyFile) using Windows-style backslashes. Running on ubuntu-latest
produced garbled mixed paths like '/home/vsts/work/1/s/src\myapp\'.

Changes:
- Add per-job pool override: PublishNuGet runs on windows-latest
- Convert FolderPath and all shell commands to Windows paths
- Replace bash scripts with PowerShell for the Windows agent
- PyPI and npm stages remain on ubuntu-latest (unchanged)
- Add comment to delete orphaned ESRP_DOMAIN_TENANT_ID ADO variable

Co-authored-by: Copilot <[email protected]>

* docs: reland empty-merge changes from PRs #1017 and #1020 (#1125)

PRs #1017 and #1020 were squash-merged as empty commits (0 file
changes). This commit re-applies the intended documentation updates.

From PR #1017 (critic gaps):
- LIMITATIONS.md: add sections 7 (knowledge governance gap), 8
  (credential persistence gap), 9 (initialization bypass risk)
- LIMITATIONS.md: add knowledge governance and enforcement infra
  rows to 'What AGT Is Not' table
- THREAT_MODEL.md: add knowledge flow and credential persistence
  to residual risks, add configuration bypass vectors table,
  remove stale '10/10' qualifier

From PR #1020 (SOC2 resolved gaps):
- soc2-mapping.md: mark kill switch as resolved (saga handoff
  implemented in kill_switch.py:69-178)
- soc2-mapping.md: mark DeltaEngine verify_chain() as resolved
  (SHA-256 chain verification in delta.py:67-127)
- soc2-mapping.md: add Resolved section to gaps summary, update
  Processing Integrity to 2 of 4 defects (was 3 of 4)

Co-authored-by: Copilot <[email protected]>

* feat(dotnet): add MCP security namespace — completes cross-language MCP parity (#1021)

* fix(ci): add path filters and concurrency; announce v3.1.0 release

CI optimization:
- Add paths-ignore for docs to 5 code-only workflows
- Add paths filter to Link Check (only run on docs changes)
- Add concurrency groups to 7 heavy workflows
- Docs-only PRs drop from ~14 checks to ~4

README:
- Add v3.1.0 release announcement callout
- Add PyPI version badge
- Update tutorial count to 31



* docs: update SOC2 mapping for resolved kill switch and DeltaEngine gaps

- Kill switch is no longer placeholder: now implements saga handoff
  with handoff_success_count tracking (kill_switch.py:69-178)
- DeltaEngine verify_chain() is no longer a stub: now performs SHA-256
  chain verification (delta.py:67-127)
- Move both from Critical/High gaps to new 'Resolved' section
- Update Processing Integrity coverage (2 of 4 defects, not 3 of 4)
- Update evidence table with current line ranges



* feat(dotnet): add MCP security namespace with scanner, gateway, redactor, and sanitizer

Add AgentGovernance.Mcp namespace implementing full MCP security parity with
TypeScript and Rust SDKs:

- McpSecurityScanner: tool poisoning, typosquatting, hidden instructions,
  rug pull, schema abuse, cross-server attack, and description injection detection
- McpCredentialRedactor: regex-based redaction of API keys, bearer tokens,
  connection strings, and secret assignments
- McpResponseSanitizer: response scanning for prompt injection tags,
  imperative phrasing, credential leakage, and exfiltration URLs
- McpGateway: policy enforcement pipeline with deny/allow lists, payload
  sanitization, rate limiting, and human approval gates

Includes 46 xUnit tests covering all threat categories. Updates
SDK-FEATURE-MATRIX.md to flip .NET MCP Security from — to ✅.



---------

Co-authored-by: Copilot <[email protected]>

* docs: address external critic gaps (#1025)

* feat(dotnet): add kill switch and lifecycle management to .NET SDK (#5)

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add 26 xUnit tests
- Update README

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK (#6)

* feat(dotnet): add kill switch and lifecycle management to .NET SDK

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add comprehensive xUnit tests for both components (26 tests)
- Update .NET SDK README with usage documentation

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK

Add two new modules to the agentmesh Rust crate:

- rings.rs: Four-level execution privilege ring model (Admin/Standard/
  Restricted/Sandboxed) with per-agent assignment and per-ring action
  permissions, ported from the Python hypervisor enforcer.

- lifecycle.rs: Eight-state agent lifecycle manager (Provisioning through
  Decommissioned) with validated state transitions and event history,
  matching the lifecycle model used across other SDK languages.

Both modules include comprehensive unit tests and are re-exported from
the crate root. README updated with API tables and usage examples.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* feat(go): add MCP security, execution rings, and lifecycle management to Go SDK (#7)

* feat(openshell): add governance skill package and runnable example (#942)

Co-authored-by: Copilot <[email protected]>

* feat(go): add MCP security, execution rings, and lifecycle management to Go SDK

- mcp.go: MCP security scanner detecting tool poisoning, typosquatting,
  hidden instructions (zero-width chars, homoglyphs), and rug pulls
- rings.go: Execution privilege ring model (Admin/Standard/Restricted/Sandboxed)
  with default-deny access control
- lifecycle.go: Eight-state agent lifecycle manager with validated transitions
- Full test coverage for all three modules
- Updated README with API docs and examples

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* docs: sync audit redaction status and framing with current code (#8)

* feat(openshell): add governance skill package and runnable example (#942)

Co-authored-by: Copilot <[email protected]>

* feat(typescript): add MCP security scanner and lifecycle management to TS SDK (#947)

Co-authored-by: Copilot <[email protected]>

* docs: update SDK feature matrix after parity pass (#950)

Reflects new capabilities added in PRs #947 (TS), .NET, Rust, Go:
- TypeScript: MCP security scanner + lifecycle management (was 5/14, now 7/14)
- .NET: Kill switch + lifecycle management (was 8/14, now 10/14)
- Rust: Execution rings + lifecycle management (was 6/14, now 8/14)
- Go: MCP security + rings + lifecycle (was 4/14, now 7/14)

All SDKs now have lifecycle management. Core governance (policy, identity,
trust, audit) + lifecycle = 5 primitives shared across all 5 languages.

Co-authored-by: Copilot <[email protected]>

* docs: add LIMITATIONS.md - honest design boundaries and layered defense (#953)

Addresses valid external critique of AGT's architectural blind spots:

1. Action vs Intent: AGT governs individual actions, not reasoning or
   action sequences. Documents the compound-action gap explicitly and
   recommends content policies + model safety layers.

2. Audit logs record attempts, not outcomes: Documents that post-action
   state verification is the user's responsibility today, with hooks planned.

3. Performance honesty: README now notes that <0.1ms is policy-eval only;
   distributed mesh adds 5-50ms. Full breakdown in LIMITATIONS.md.

4. Complexity spectrum: Documents the minimal path (just PolicyEvaluator,
   no mesh/crypto) vs full enterprise stack.

5. Vendor independence: Documents zero cloud dependencies in core,
   standard formats for all state, migration path.

6. Recommended layered defense architecture diagram showing AGT as one
   layer alongside model safety, application logic, and infrastructure.

Co-authored-by: Copilot <[email protected]>

* fix(docs): rewrite OpenClaw sidecar deployment with working K8s manifests (#954)

Closes #952

Co-authored-by: Copilot <[email protected]>

* feat: reversibility checker, trust calibration guide, escalation tests (#955)

ReversibilityChecker with 4 levels and compensation plans. Trust score calibration guide with weights, decay, thresholds. 19 tests. Co-authored-by: Copilot <[email protected]>

* feat: AGT Lite — zero-config governance in 3 lines + fix broken quickstart (#956)

agent_os.lite: govern() factory, sub-ms enforcement, 16 tests. Fixed quickstart that called nonexistent add_rules(). Co-authored-by: Copilot <[email protected]>

* fix: bump all runtime versions to 3.1.0 and fix CI lint/test failures (#957)

- Bump __version__ in 29 Python __init__.py files from 3.0.2 to 3.1.0
- Bump version= in 6 setup.py files from 3.0.2 to 3.1.0
- Bump meter version strings in _mcp_metrics.py
- Bump 9 package.json files from 3.0.2 to 3.1.0
- Bump .NET csproj Version from 3.0.2 to 3.1.0
- Bump Rust workspace Cargo.toml from 3.0.2 to 3.1.0
- Create Go sdk doc.go with version marker 3.1.0
- Fix ruff W292 (missing newline at EOF) in data_classification.py
- Fix CLI init regex to allow dots in agent names (test_init_special_characters)

Co-authored-by: Copilot <[email protected]>

* fix(openclaw): critical honesty pass — document what works vs what's planned (#958)

Co-authored-by: Copilot <[email protected]>

* fix(ci): fix Rust crate packaging - use workspace root with -p agentmesh (#959)

* fix(openclaw): critical honesty pass — document what works vs what's planned

Server (__main__.py):
- Add --host/--port argparse + env var support (was hardcoded 127.0.0.1:8080)

Dockerfile.sidecar:
- Copy modules/ directory (was missing, causing build failure)
- Use 0.0.0.0 for container binding (127.0.0.1 is wrong inside containers)
- Remove phantom port 9091 (no separate metrics listener exists)

openclaw-sidecar.md — full honesty rewrite:
- Add status banner: transparent interception is NOT yet implemented
- Document actual sidecar API endpoints (health, detect/injection, execute, metrics)
- Fix Docker Compose to use Dockerfile.sidecar (was using wrong Dockerfile)
- Remove GOVERNANCE_PROXY claim (OpenClaw doesn't natively read this)
- Replace fictional SLO/Grafana sections with real /api/v1/metrics docs
- Add Roadmap section listing what's planned vs shipped

openshell.md:
- Remove references to non-existent shell scripts
- Fix python -m agentmesh.server to python -m agent_os.server
- Add note that sidecar doesn't transparently intercept (must call API)
- Replace pip install agentmesh-platform with Python skill library usage

Co-authored-by: Copilot <[email protected]>

* fix(ci): fix Rust crate packaging — use workspace root with -p agentmesh

cargo package in a workspace writes .crate files to the workspace root's
target/package/, not the individual crate's directory. The pipeline was
running from the crate subdirectory and couldn't find the output.

Fix: change workingDirectory from packages/agent-mesh/sdks/rust/agentmesh
to packages/agent-mesh/sdks/rust (workspace root) and add -p agentmesh
to all cargo commands to target the specific crate.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* docs(adr): ADR 0005 — Liveness attestation extension for TrustHandshake (#948)

Proposes liveness attestation as opt-in gate for TrustHandshake. Addresses ghost-agent and ungraceful-handoff gaps from #772.

Co-authored-by: kevinkaylie <[email protected]>

* blog: MCP Security — Why Your AI Agent Tool Calls Need a Firewall (#899)

Co-authored-by: aymenhmaidiwastaken <[email protected]>

* feat: add LotL prevention policy for security measures (#949)

YAML policy template for Living-off-the-Land detection and prevention.

* feat(examples): add ATR community security rules for PolicyEvaluator (#908)

15 curated ATR detection rules + sync script. Closes #901.

* fix(docs): correct npm package name and stale version refs across 21 files (#960)

- Fix @agentmesh/sdk → @microsoft/agentmesh-sdk in 13 markdown files
  (README, QUICKSTART, tutorials, SDK docs, i18n, changelog)
- Fix broken demo path in agent-os README (agent-os/demo.py → demo/maf_governance_demo.py)
- Remove stale v1.0.0 labels from extension status table
- Bump AGT Version refs 3.0.2 → 3.1.0 in case study templates and
  ATF conformance assessment

Co-authored-by: Copilot <[email protected]>

* fix(ci): use ESRP Release for NuGet signing (#961)

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing (#962)

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag

Three gaps found during publish verification:

1. PyPI: add agentmesh-marketplace (8th package, was missing from matrix)
2. Rust: build+publish both workspace crates (agentmesh + agentmesh-mcp)
   - Changed from single-crate to workspace build (--workspace)
   - Package loop builds both .crate files
   - Renamed artifact from 'rust-agentmesh' to 'rust-crates'
3. Go: add 'v' prefix to version in doc.go (3.1.0 → v3.1.0)
   - Go module tags require semver with v prefix
   - Pipeline grep expects '// Version: v...' format

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing — 'NuGet' not 'Nuget'

ESRP Release rejected 'Nuget' with: 'The value provided for
ReleaseContentType property is invalid.' ErrorCode 2254.

ESRP content types are case-sensitive. Fix: 'Nuget' -> 'NuGet'.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag (#963)

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag

Three gaps found during publish verification:

1. PyPI: add agentmesh-marketplace (8th package, was missing from matrix)
2. Rust: build+publish both workspace crates (agentmesh + agentmesh-mcp)
   - Changed from single-crate to workspace build (--workspace)
   - Package loop builds both .crate files
   - Renamed artifact from 'rust-agentmesh' to 'rust-crates'
3. Go: add 'v' prefix to version in doc.go (3.1.0 → v3.1.0)
   - Go module tags require semver with v prefix
   - Pipeline grep expects '// Version: v...' format

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing — 'NuGet' not 'Nuget'

ESRP Release rejected 'Nuget' with: 'The value provided for
ReleaseContentType property is invalid.' ErrorCode 2254.

ESRP content types are case-sensitive. Fix: 'Nuget' -> 'NuGet'.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix(ci): use EsrpCodeSigning + dotnet push for NuGet (#965)

EsrpRelease@11 does not support NuGet as a contenttype — it's for
PyPI/npm/Maven/crates.io package distribution. NuGet packages must be
signed with EsrpCodeSigning@5 first, then pushed with dotnet nuget push.

New flow:
1. EsrpCodeSigning@5 with NuGetSign + NuGetVerify operations (CP-401405)
2. dotnet nuget push with the signed .nupkg to nuget.org

This matches the standard Microsoft NuGet ESRP signing pattern used by
azure-sdk, dotnet runtime, and other Microsoft OSS projects.

Co-authored-by: Copilot <[email protected]>

* fix(security): upgrade axios to 1.15.0 - CVE-2026-40175, CVE-2025-62718 (#966)

Critical S360 action items for SFI-ES5.2 1ES Open Source Vulnerabilities.

CVE-2026-40175 (CVSS 9.9): Unrestricted Cloud Metadata Exfiltration
via Header Injection Chain — prototype pollution gadget enables CRLF
injection in HTTP headers, bypassing AWS IMDSv2 session tokens.

CVE-2025-62718: NO_PROXY Bypass via Hostname Normalization — trailing
dots and IPv6 literals skip NO_PROXY matching, enabling SSRF through
attacker-controlled proxy.

Upgraded in 3 packages:
- extensions/copilot: 1.14.0 → 1.15.0
- extensions/cursor:  1.13.5 → 1.15.0
- agent-os-vscode:    1.13.6 → 1.15.0

Co-authored-by: Copilot <[email protected]>

* fix(ci): resolve ESRP_DOMAIN_TENANT_ID cyclical reference (#967)

The ADO variable ESRP_DOMAIN_TENANT_ID had a cyclical self-reference,
preventing ESRP authentication across ALL publishing stages (PyPI, npm,
NuGet, crates.io).

Fix: Define MICROSOFT_TENANT_ID as a pipeline-level variable with the
well-known Microsoft corporate tenant ID (72f988bf-..., same default
used by ESRP Release action.yml). This is a public value, not a secret.

Also: NuGet publishing requires Microsoft as co-owner of the package
on NuGet.org. See https://aka.ms/Microsoft-NuGet-Compliance

Co-authored-by: Copilot <[email protected]>

* docs: sync audit redaction status and framing with current code

- Update SOC2 mapping to reflect CredentialRedactor now redacts
  credential-like secrets before audit persistence (API keys, tokens,
  JWTs, connection strings, etc.). Remaining gap: non-credential PII
  (email, phone, addresses) not yet redacted in audit entries.
- Replace 'kernel-level enforcement' with 'policy-layer enforcement'
  in README, OWASP compliance, and architecture overview to match the
  existing 'application-level governance' framing in README Security
  section and LIMITATIONS.md.
- Qualify 10/10 OWASP coverage claim in COMPARISON.md with footnote
  clarifying this means mitigation components exist per risk category,
  not full elimination.
- Update owasp-llm-top10-mapping.md LLM06 row for credential redaction.

Addresses doc/code inconsistencies identified in external review.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>

* fix(lint): resolve agent-mesh lint errors in eu_ai_act.py (#1028)

- Remove unused variable profiling_override (F841)
- Remove f-string without placeholders (F541)
- Fix whitespace in docstrings (W293)

Co-authored-by: Copilot <[email protected]>

* fix(ci): add path filters and concurrency; announce v3.1.0 release (#1039)

CI optimization:
- Add paths-ignore for docs to 5 code-only workflows
- Add paths filter to Link Check (only run on docs changes)
- Add concurrency groups to 7 heavy workflows
- Docs-only PRs drop from ~14 checks to ~4

README:
- Add v3.1.0 release announcement callout
- Add PyPI version badge
- Update tutorial count to 31

Co-authored-by: Copilot <[email protected]>

* docs: add ADOPTERS.md and make deployment guides multi-cloud (#1040)

- New ADOPTERS.md following Backstage/Flatcar pattern with Production,
  Evaluation, and Academic tables + instructions for adding your org
- Rewrite docs/deployment/README.md from Azure-only to multi-cloud:
  Azure (AKS, Foundry, Container Apps), AWS (ECS/Fargate), GCP (GKE),
  Docker Compose, self-hosted. Updated architecture diagram to show
  cloud-agnostic deployment patterns.
- Fix broken AWS/GCP links (pointed to non-existent paths)
- README now links to 'Deployment Guides' (multi-cloud) instead of
  'Azure Deployment'
- README Contributing section invites adopters to add their org

Co-authored-by: Copilot <[email protected]>

* feat: add AGT Lite — zero-config governance in 3 lines, fix broken quickstart (#1044)

Addresses the #1 developer experience criticism: AGT is too complex to start.

New: agent_os.lite — lightweight governance module
- govern() factory: one line to create a governance gate
- check(action): one line to enforce — raises GovernanceViolation or returns True
- check.is_allowed(action): non-raising bool version
- Allow lists, deny lists, regex patterns, content filtering, rate limiting
- Built-in audit trail and stats
- Sub-millisecond evaluation (0.003ms avg, 1000 evals in <100ms)
- Zero dependencies beyond stdlib (re, time, datetime)
- 16 tests passing

Fix: govern_in_60_seconds.py quickstart
- BROKEN: was calling PolicyEvaluator.add_rules() which does not exist
- FIXED: now uses agent_os.lite.govern() which actually works
- Verified end-to-end: script runs and produces correct output

The lite module is for developers who just want basic governance
without learning PolicyEvaluator, YAML, OPA/Rego, trust mesh, etc.
Upgrade to the full stack when you need it.

Co-authored-by: Copilot <[email protected]>

* feat(ci): enhance weekly security audit with 7 new scan jobs (#1051)

Add comprehensive security checks based on issues found during
the MSRC-111178 security audit and ongoing post-merge reviews:

- Workflow security regression (MSRC-111178 pull_request_target check)
- Expression injection scan (github.event.* in run: blocks)
- Docker security (root containers, wildcard CORS, hardcoded passwords,
  0.0.0.0 bindings)
- XSS and unsafe DOM (innerHTML, eval, yaml.load, shell=True)
- Action SHA pinning compliance
- Version pinning (pyproject.toml upper bounds, Docker :latest tags,
  license field format)
- Dependency confusion with --strict mode (pyproject.toml + package.json)
- Retention days updated to 180 (EU AI Act Art. 26(6))

Co-authored-by: Copilot <[email protected]>

* fix(ci): fix OpenShell integration CI — spelling, link check, policy validation (#1057)

- Add OpenShell/NVIDIA terms to cspell dictionary (Landlock, seccomp, syscall, etc.)
- Fix broken link: openclaw-skill -> openshell-skill in docs/integrations/openshell.md
- Fix policy validation: replace starts_with (invalid) with matches + regex

Co-authored-by: Copilot <[email protected]>

* feat: add reversibility checker, trust calibration guide, and escalation/reversibility tests (#1061)

Addresses critical review feedback:

1. Rollback/reversibility (agent_os.reversibility)
   - ReversibilityChecker: pre-execution assessment of action reversibility
   - 4 levels: fully_reversible, partially_reversible, irreversible, unknown
   - CompensatingAction: structured undo plans for each action type
   - Built-in rules for 12 common actions (write, deploy, delete, email, etc.)
   - block_irreversible mode for strict environments

2. Trust score calibration guide (docs/security/trust-score-calibration.md)
   - Score component weights (compliance 35%, task 25%, behavior 25%, identity 15%)
   - Decay functions with tier floors
   - Initial score assignments by agent origin
   - Threshold recommendations (conservative/moderate/permissive)
   - Anti-gaming measures and operational playbook

3. Tests: 19 passing (10 escalation + 9 reversibility)

Co-authored-by: Copilot <[email protected]>

* feat: deployment runtime (Docker/AKS) and shared trust core types (#1062)

agent-runtime: Evolve from thin re-export shim to deployment runtime
- DockerDeployer: container deployment with security hardening
  (cap-drop ALL, no-new-privileges, read-only rootfs)
- KubernetesDeployer: AKS pod deployment with governance sidecars
  (runAsNonRoot, seccompProfile, resource limits)
- GovernanceConfig: policy/trust/audit config injected as env vars
- DeploymentTarget protocol for extensibility (ADC, nono, etc.)
- 24 tests (all subprocess calls mocked)

agent-mesh: Extract shared trust types into agentmesh.trust_types
- TrustScore, AgentProfile, TrustRecord, TrustTracker
- Canonical implementations replacing ~800 lines of duplicated code
  across 6+ integration packages
- 25 tests covering clamping, scoring, history, capabilities

Co-authored-by: Copilot <[email protected]>

* feat(dotnet): add kill switch and lifecycle management to .NET SDK (#1065)

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add comprehensive xUnit tests for both components (26 tests)
- Update .NET SDK README with usage documentation

Co-authored-by: Copilot <[email protected]>

* feat(go): add MCP security, execution rings, and lifecycle management to Go SDK (#1066)

- mcp.go: MCP security scanner detecting tool poisoning, typosquatting,
  hidden instructions (zero-width chars, homoglyphs), and rug pulls
- rings.go: Execution privilege ring model (Admin/Standard/Restricted/Sandboxed)
  with default-deny access control
- lifecycle.go: Eight-state agent lifecycle manager with validated transitions
- Full test coverage for all three modules
- Updated README with API docs and examples

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK (#1067)

* feat(dotnet): add kill switch and lifecycle management to .NET SDK

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add comprehensive xUnit tests for both components (26 tests)
- Update .NET SDK README with usage documentation

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK

Add two new modules to the agentmesh Rust crate:

- rings.rs: Four-level execution privilege ring model (Admin/Standard/
  Restricted/Sandboxed) with per-agent assignment and per-ring action
  permissions, ported from the Python hypervisor enforcer.

- lifecycle.rs: Eight-state agent lifecycle manager (Provisioning through
  Decommissioned) with validated state transitions and event history,
  matching the lifecycle model used across other SDK languages.

Both modules include comprehensive unit tests and are re-exported from
the crate root. README updated with API tables and usage examples.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix: align lotl_prevention_policy.yaml with PolicyDocument schema

The policy file used an incompatible schema format (id, parameter,
regex_match, effect) instead of the expected PolicyDocument fields
(name, condition.field, operator, action). This caused the
validate-policies CI check to fail for all PRs.

Changes:
- id → name
- condition.parameter → condition.field
- operator: regex_match → operator: matches
- action at rule level (shell_exec/file_read) → action: deny
- effect: DENY → removed (redundant with action: deny)
- Added version, name, description, disclaimer at top level

Co-authored-by: Copilot <[email protected]>

* fix: resolve .NET ESRP signing issues blocking NuGet publish

GitHub Actions (publish.yml):
- Fix broken if-guards on signing steps: env.ESRP_AAD_ID was set in
  step-level env (invisible to if-expressions). Replace with job-level
  ESRP_CONFIGURED env derived from secrets.
- Add missing ESRP_CERT_IDENTIFIER to signing step env blocks.
- Gate the publish step on ESRP_CONFIGURED so unsigned packages are
  never pushed to NuGet.org under the Microsoft.* prefix.
- Make stub signing steps fail-fast (exit 1) instead of silently
  succeeding, preventing unsigned packages from reaching NuGet push.

ADO Pipeline (esrp-publish.yml):
- Add UseDotNet@2 task to Publish_NuGet stage so dotnet nuget push
  has a guaranteed SDK version on the Windows agent.

Co-authored-by: Copilot <[email protected]>

* fix(docs): fix OpenClaw sidecar demo and add limitations callout (#1163)

The docker-compose example in openclaw-sidecar.md was illustrative only
and did not work — it referenced a non-existent OpenClaw image and lacked
healthchecks. Users were hitting this and getting confused.

Changes:
- Add working demo at demo/openclaw-governed/ with docker-compose.yaml
  that builds and runs the governance sidecar from source
- Replace the inline docker-compose in the doc with a link to the demo
  plus a clearly-labeled reference template for custom deployments
- Add prominent WARNING callout listing known limitations (no native
  OpenClaw integration, no published images, explicit API required)
- Remove stale orphaned curl snippet after the docker-compose block
- Add healthcheck to docker-compose governance-sidecar service
- Fix OpenClaw image reference from ghcr.io/openclaw/openclaw:latest
  to a placeholder users must replace with their own image

Co-authored-by: Copilot <[email protected]>

* fix(docs): fix OpenClaw sidecar demo and add limitations callout (#1164)

The docker-compose example in openclaw-sidecar.md was illustrative only
and did not work — it referenced a non-existent OpenClaw image and lacked
healthchecks. Users were hitting this and getting confused.

Changes:
- Add working demo at demo/openclaw-governed/ with docker-compose.yaml
  that builds and runs the governance sidecar from source
- Replace the inline docker-compose in the doc with a link to the demo
  plus a clearly-labeled reference template for custom deployments
- Add prominent WARNING callout listing known limitations (no native
  OpenClaw integration, no published images, explicit API required)
- Remove stale orphaned curl snippet after the docker-compose block
- Add healthcheck to docker-compose governance-sidecar service
- Fix OpenClaw image reference from ghcr.io/openclaw/openclaw:latest
  to a placeholder users must replace with their own image

Co-authored-by: Copilot <[email protected]>

* fix(ci): use PME tenant ID for ESRP cert signing

The ESRP signing cert lives in the PME (Partner Managed Engineering)
tenant (975f013f), not the Microsoft corporate tenant (72f988bf).
Using the wrong tenant ID causes ESRP signing to fail when looking
up the cert.

Co-authored-by: Copilot <[email protected]>

* docs: Add Scaling AI Agents article to COMMUNITY.md (#857)

Co-authored-by: deepsearch <[email protected]>

* Add runtime evidence mode to agt verify (#969)

* Track agt verify evidence plan

* Add runtime evidence mode to agt verify

* Add runtime evidence verifier tests

* Add CLI tests for agt verify evidence mode

* Document evidence mode for compliance verification

* Remove local implementation notes

* Document agt verify evidence mode

* Harden evidence path handling in verify

---------

Co-authored-by: T. Smith <[email protected]>

* docs: add Entra Agent ID bridge tutorial with R&R matrix and DID fix

- Add Tutorial 31: Bridging AGT Identity with Microsoft Entra Agent ID
  - Detailed roles & responsibilities between AGT and Entra/Agent365
  - Architecture diagram showing the identity bridge
  - Step-by-step: DID creation, Entra binding, AKS workload identity,
    token validation, lifecycle sync, access verification
  - Known gaps and limitations table
  - Platform independence note (AWS, GCP, Okta patterns)
- Fix DID prefix in .NET MCP gateway tests (did:agentmesh → did:mesh
  for consistency with Python reference implementation and .NET SDK)
- Update tutorials README with Enterprise Identity section

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>
Co-authored-by: Jack Batzner <[email protected]>
Co-authored-by: lawcontinue <[email protected]>
Co-authored-by: deepsearch <[email protected]>
Co-authored-by: ewmh <[email protected]>
Co-authored-by: T. Smith <[email protected]>

* docs: address external critic gaps in limitations and threat model (#11)

Add three new sections to LIMITATIONS.md addressing gaps identified in
public criticism and external security analysis:

- §10 Physical AI and Embodied Agent Governance: documents that AGT
  governs software agents not physical actuators, with mitigations
- §11 Streaming Data and Real-Time Assurance: documents that AGT
  evaluates per-action not continuously over data streams
- §12 DID Method Inconsistency Across SDKs: documents the did:mesh
  vs did:agentmesh split with migration plan for v4.0

Update THREAT_MODEL.md residual risks to reference all three new
limitation sections.

Co-authored-by: Copilot <[email protected]>

* fix!: standardize DID method to did:agentmesh across all SDKs (#12)

* fix!: standardize DID method to did:agentmesh across all SDKs

BREAKING CHANGE: All agent DIDs now use the did:agentmesh: prefix.
The legacy did:mesh: prefix used by Python and .NET has been migrated
to match the did:agentmesh: convention already used by TypeScript,
Rust, and Go SDKs.

Changes:
- Python: agent_id.py, delegation.py, entra.py, all integrations
- .NET: AgentIdentity.cs, Jwk.cs, GovernanceKernel.cs, all tests
- Docs: README, tutorials, identity docs, FAQ, compliance docs
- Tests: all test fixtures updated across Python, .NET, TS, VSCode
- Version bump: 3.1.0 → 3.2.0 (.NET, Python agent-mesh, TypeScript)

Migration: replace did:mesh: with did:agentmesh: in your policies,
identity registries, and agent configurations.

Co-authored-by: Copilot <[email protected]>

* docs: add Q11-Q13 to FAQ — AGT scope, Agent 365, and DLP comparison

Adds three new customer Q&As:
- Q11: Is AGT for Foundry agents or any agent type? (any)
- Q12: Relationship between AGT and Agent 365 (different layers)
- Q13: How is AGT different from DLP/communication compliance
  (content vs action governance)

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix(ci): fix lint errors and remove pi-mono breaking dep scan

Two CI failures on main:

1. lint (agent-compliance): W293/W292 trailing whitespace and missing
   newlines in agt.py and verify.py — fixed.

2. dependency-scan: pi-mono-agentmesh references unregistered npm
   packages — removed entire pi-mono integration that was merged
   from draft PR #970 without proper review.

Co-authored-by: Copilot <[email protected]>

* feat: add AgentMesh component container images and GHCR publishing

Add FastAPI server entrypoints for all four AgentMesh components:
- trust-engine (port 8443): Agent identity verification, IATP handshakes
- policy-server (port 8444): Governance policy evaluation from YAML/JSON
- audit-collector (port 8445): Merkle-chained audit logging with persistence
- api-gateway (port 8446): Reverse proxy with per-agent rate limiting

Infrastructure:
- Single Dockerfile with COMPONENT build arg (non-root, tini, health checks)
- GitHub Actions workflow for GHCR publishing (multi-arch amd64/arm64)
- Helm chart updated to reference ghcr.io/microsoft/agentmesh/* images
- 28 integration tests covering all server endpoints

Resolves the missing container images that blocked full AgentMesh cluster
deployment (images were referenced in Helm chart but never built).

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>
Co-authored-by: Jack Batzner <[email protected]>
Co-authored-by: lawcontinue <[email protected]>
Co-authored-by: deepsearch <[email protected]>
Co-authored-by: ewmh <[email protected]>
Co-authored-by: T. Smith <[email protected]>
imran-siddique added a commit that referenced this pull request Apr 20, 2026
* feat(dotnet): add MCP security namespace — completes cross-language MCP parity

* fix(ci): add path filters and concurrency; announce v3.1.0 release

CI optimization:
- Add paths-ignore for docs to 5 code-only workflows
- Add paths filter to Link Check (only run on docs changes)
- Add concurrency groups to 7 heavy workflows
- Docs-only PRs drop from ~14 checks to ~4

README:
- Add v3.1.0 release announcement callout
- Add PyPI version badge
- Update tutorial count to 31

Co-authored-by: Copilot <[email protected]>

* docs: update SOC2 mapping for resolved kill switch and DeltaEngine gaps

- Kill switch is no longer placeholder: now implements saga handoff
  with handoff_success_count tracking (kill_switch.py:69-178)
- DeltaEngine verify_chain() is no longer a stub: now performs SHA-256
  chain verification (delta.py:67-127)
- Move both from Critical/High gaps to new 'Resolved' section
- Update Processing Integrity coverage (2 of 4 defects, not 3 of 4)
- Update evidence table with current line ranges

Co-authored-by: Copilot <[email protected]>

* feat(dotnet): add MCP security namespace with scanner, gateway, redactor, and sanitizer

Add AgentGovernance.Mcp namespace implementing full MCP security parity with
TypeScript and Rust SDKs:

- McpSecurityScanner: tool poisoning, typosquatting, hidden instructions,
  rug pull, schema abuse, cross-server attack, and description injection detection
- McpCredentialRedactor: regex-based redaction of API keys, bearer tokens,
  connection strings, and secret assignments
- McpResponseSanitizer: response scanning for prompt injection tags,
  imperative phrasing, credential leakage, and exfiltration URLs
- McpGateway: policy enforcement pipeline with deny/allow lists, payload
  sanitization, rate limiting, and human approval gates

Includes 46 xUnit tests covering all threat categories. Updates
SDK-FEATURE-MATRIX.md to flip .NET MCP Security from — to ✅.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* docs: add Entra Agent ID bridge tutorial (Tutorial 31) (#10)

* fix(pipeline): run NuGet ESRP signing on Windows agent (#1022)

The EsrpCodeSigning@5 task constructs internal paths (batchSignPolicyFile,
ciPolicyFile) using Windows-style backslashes. Running on ubuntu-latest
produced garbled mixed paths like '/home/vsts/work/1/s/src\myapp\'.

Changes:
- Add per-job pool override: PublishNuGet runs on windows-latest
- Convert FolderPath and all shell commands to Windows paths
- Replace bash scripts with PowerShell for the Windows agent
- PyPI and npm stages remain on ubuntu-latest (unchanged)
- Add comment to delete orphaned ESRP_DOMAIN_TENANT_ID ADO variable

Co-authored-by: Copilot <[email protected]>

* docs: reland empty-merge changes from PRs #1017 and #1020 (#1125)

PRs #1017 and #1020 were squash-merged as empty commits (0 file
changes). This commit re-applies the intended documentation updates.

From PR #1017 (critic gaps):
- LIMITATIONS.md: add sections 7 (knowledge governance gap), 8
  (credential persistence gap), 9 (initialization bypass risk)
- LIMITATIONS.md: add knowledge governance and enforcement infra
  rows to 'What AGT Is Not' table
- THREAT_MODEL.md: add knowledge flow and credential persistence
  to residual risks, add configuration bypass vectors table,
  remove stale '10/10' qualifier

From PR #1020 (SOC2 resolved gaps):
- soc2-mapping.md: mark kill switch as resolved (saga handoff
  implemented in kill_switch.py:69-178)
- soc2-mapping.md: mark DeltaEngine verify_chain() as resolved
  (SHA-256 chain verification in delta.py:67-127)
- soc2-mapping.md: add Resolved section to gaps summary, update
  Processing Integrity to 2 of 4 defects (was 3 of 4)

Co-authored-by: Copilot <[email protected]>

* feat(dotnet): add MCP security namespace — completes cross-language MCP parity (#1021)

* fix(ci): add path filters and concurrency; announce v3.1.0 release

CI optimization:
- Add paths-ignore for docs to 5 code-only workflows
- Add paths filter to Link Check (only run on docs changes)
- Add concurrency groups to 7 heavy workflows
- Docs-only PRs drop from ~14 checks to ~4

README:
- Add v3.1.0 release announcement callout
- Add PyPI version badge
- Update tutorial count to 31



* docs: update SOC2 mapping for resolved kill switch and DeltaEngine gaps

- Kill switch is no longer placeholder: now implements saga handoff
  with handoff_success_count tracking (kill_switch.py:69-178)
- DeltaEngine verify_chain() is no longer a stub: now performs SHA-256
  chain verification (delta.py:67-127)
- Move both from Critical/High gaps to new 'Resolved' section
- Update Processing Integrity coverage (2 of 4 defects, not 3 of 4)
- Update evidence table with current line ranges



* feat(dotnet): add MCP security namespace with scanner, gateway, redactor, and sanitizer

Add AgentGovernance.Mcp namespace implementing full MCP security parity with
TypeScript and Rust SDKs:

- McpSecurityScanner: tool poisoning, typosquatting, hidden instructions,
  rug pull, schema abuse, cross-server attack, and description injection detection
- McpCredentialRedactor: regex-based redaction of API keys, bearer tokens,
  connection strings, and secret assignments
- McpResponseSanitizer: response scanning for prompt injection tags,
  imperative phrasing, credential leakage, and exfiltration URLs
- McpGateway: policy enforcement pipeline with deny/allow lists, payload
  sanitization, rate limiting, and human approval gates

Includes 46 xUnit tests covering all threat categories. Updates
SDK-FEATURE-MATRIX.md to flip .NET MCP Security from — to ✅.



---------

Co-authored-by: Copilot <[email protected]>

* docs: address external critic gaps (#1025)

* feat(dotnet): add kill switch and lifecycle management to .NET SDK (#5)

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add 26 xUnit tests
- Update README

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK (#6)

* feat(dotnet): add kill switch and lifecycle management to .NET SDK

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add comprehensive xUnit tests for both components (26 tests)
- Update .NET SDK README with usage documentation

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK

Add two new modules to the agentmesh Rust crate:

- rings.rs: Four-level execution privilege ring model (Admin/Standard/
  Restricted/Sandboxed) with per-agent assignment and per-ring action
  permissions, ported from the Python hypervisor enforcer.

- lifecycle.rs: Eight-state agent lifecycle manager (Provisioning through
  Decommissioned) with validated state transitions and event history,
  matching the lifecycle model used across other SDK languages.

Both modules include comprehensive unit tests and are re-exported from
the crate root. README updated with API tables and usage examples.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* feat(go): add MCP security, execution rings, and lifecycle management to Go SDK (#7)

* feat(openshell): add governance skill package and runnable example (#942)

Co-authored-by: Copilot <[email protected]>

* feat(go): add MCP security, execution rings, and lifecycle management to Go SDK

- mcp.go: MCP security scanner detecting tool poisoning, typosquatting,
  hidden instructions (zero-width chars, homoglyphs), and rug pulls
- rings.go: Execution privilege ring model (Admin/Standard/Restricted/Sandboxed)
  with default-deny access control
- lifecycle.go: Eight-state agent lifecycle manager with validated transitions
- Full test coverage for all three modules
- Updated README with API docs and examples

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* docs: sync audit redaction status and framing with current code (#8)

* feat(openshell): add governance skill package and runnable example (#942)

Co-authored-by: Copilot <[email protected]>

* feat(typescript): add MCP security scanner and lifecycle management to TS SDK (#947)

Co-authored-by: Copilot <[email protected]>

* docs: update SDK feature matrix after parity pass (#950)

Reflects new capabilities added in PRs #947 (TS), .NET, Rust, Go:
- TypeScript: MCP security scanner + lifecycle management (was 5/14, now 7/14)
- .NET: Kill switch + lifecycle management (was 8/14, now 10/14)
- Rust: Execution rings + lifecycle management (was 6/14, now 8/14)
- Go: MCP security + rings + lifecycle (was 4/14, now 7/14)

All SDKs now have lifecycle management. Core governance (policy, identity,
trust, audit) + lifecycle = 5 primitives shared across all 5 languages.

Co-authored-by: Copilot <[email protected]>

* docs: add LIMITATIONS.md - honest design boundaries and layered defense (#953)

Addresses valid external critique of AGT's architectural blind spots:

1. Action vs Intent: AGT governs individual actions, not reasoning or
   action sequences. Documents the compound-action gap explicitly and
   recommends content policies + model safety layers.

2. Audit logs record attempts, not outcomes: Documents that post-action
   state verification is the user's responsibility today, with hooks planned.

3. Performance honesty: README now notes that <0.1ms is policy-eval only;
   distributed mesh adds 5-50ms. Full breakdown in LIMITATIONS.md.

4. Complexity spectrum: Documents the minimal path (just PolicyEvaluator,
   no mesh/crypto) vs full enterprise stack.

5. Vendor independence: Documents zero cloud dependencies in core,
   standard formats for all state, migration path.

6. Recommended layered defense architecture diagram showing AGT as one
   layer alongside model safety, application logic, and infrastructure.

Co-authored-by: Copilot <[email protected]>

* fix(docs): rewrite OpenClaw sidecar deployment with working K8s manifests (#954)

Closes #952

Co-authored-by: Copilot <[email protected]>

* feat: reversibility checker, trust calibration guide, escalation tests (#955)

ReversibilityChecker with 4 levels and compensation plans. Trust score calibration guide with weights, decay, thresholds. 19 tests. Co-authored-by: Copilot <[email protected]>

* feat: AGT Lite — zero-config governance in 3 lines + fix broken quickstart (#956)

agent_os.lite: govern() factory, sub-ms enforcement, 16 tests. Fixed quickstart that called nonexistent add_rules(). Co-authored-by: Copilot <[email protected]>

* fix: bump all runtime versions to 3.1.0 and fix CI lint/test failures (#957)

- Bump __version__ in 29 Python __init__.py files from 3.0.2 to 3.1.0
- Bump version= in 6 setup.py files from 3.0.2 to 3.1.0
- Bump meter version strings in _mcp_metrics.py
- Bump 9 package.json files from 3.0.2 to 3.1.0
- Bump .NET csproj Version from 3.0.2 to 3.1.0
- Bump Rust workspace Cargo.toml from 3.0.2 to 3.1.0
- Create Go sdk doc.go with version marker 3.1.0
- Fix ruff W292 (missing newline at EOF) in data_classification.py
- Fix CLI init regex to allow dots in agent names (test_init_special_characters)

Co-authored-by: Copilot <[email protected]>

* fix(openclaw): critical honesty pass — document what works vs what's planned (#958)

Co-authored-by: Copilot <[email protected]>

* fix(ci): fix Rust crate packaging - use workspace root with -p agentmesh (#959)

* fix(openclaw): critical honesty pass — document what works vs what's planned

Server (__main__.py):
- Add --host/--port argparse + env var support (was hardcoded 127.0.0.1:8080)

Dockerfile.sidecar:
- Copy modules/ directory (was missing, causing build failure)
- Use 0.0.0.0 for container binding (127.0.0.1 is wrong inside containers)
- Remove phantom port 9091 (no separate metrics listener exists)

openclaw-sidecar.md — full honesty rewrite:
- Add status banner: transparent interception is NOT yet implemented
- Document actual sidecar API endpoints (health, detect/injection, execute, metrics)
- Fix Docker Compose to use Dockerfile.sidecar (was using wrong Dockerfile)
- Remove GOVERNANCE_PROXY claim (OpenClaw doesn't natively read this)
- Replace fictional SLO/Grafana sections with real /api/v1/metrics docs
- Add Roadmap section listing what's planned vs shipped

openshell.md:
- Remove references to non-existent shell scripts
- Fix python -m agentmesh.server to python -m agent_os.server
- Add note that sidecar doesn't transparently intercept (must call API)
- Replace pip install agentmesh-platform with Python skill library usage

Co-authored-by: Copilot <[email protected]>

* fix(ci): fix Rust crate packaging — use workspace root with -p agentmesh

cargo package in a workspace writes .crate files to the workspace root's
target/package/, not the individual crate's directory. The pipeline was
running from the crate subdirectory and couldn't find the output.

Fix: change workingDirectory from packages/agent-mesh/sdks/rust/agentmesh
to packages/agent-mesh/sdks/rust (workspace root) and add -p agentmesh
to all cargo commands to target the specific crate.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* docs(adr): ADR 0005 — Liveness attestation extension for TrustHandshake (#948)

Proposes liveness attestation as opt-in gate for TrustHandshake. Addresses ghost-agent and ungraceful-handoff gaps from #772.

Co-authored-by: kevinkaylie <[email protected]>

* blog: MCP Security — Why Your AI Agent Tool Calls Need a Firewall (#899)

Co-authored-by: aymenhmaidiwastaken <[email protected]>

* feat: add LotL prevention policy for security measures (#949)

YAML policy template for Living-off-the-Land detection and prevention.

* feat(examples): add ATR community security rules for PolicyEvaluator (#908)

15 curated ATR detection rules + sync script. Closes #901.

* fix(docs): correct npm package name and stale version refs across 21 files (#960)

- Fix @agentmesh/sdk → @microsoft/agentmesh-sdk in 13 markdown files
  (README, QUICKSTART, tutorials, SDK docs, i18n, changelog)
- Fix broken demo path in agent-os README (agent-os/demo.py → demo/maf_governance_demo.py)
- Remove stale v1.0.0 labels from extension status table
- Bump AGT Version refs 3.0.2 → 3.1.0 in case study templates and
  ATF conformance assessment

Co-authored-by: Copilot <[email protected]>

* fix(ci): use ESRP Release for NuGet signing (#961)

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing (#962)

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag

Three gaps found during publish verification:

1. PyPI: add agentmesh-marketplace (8th package, was missing from matrix)
2. Rust: build+publish both workspace crates (agentmesh + agentmesh-mcp)
   - Changed from single-crate to workspace build (--workspace)
   - Package loop builds both .crate files
   - Renamed artifact from 'rust-agentmesh' to 'rust-crates'
3. Go: add 'v' prefix to version in doc.go (3.1.0 → v3.1.0)
   - Go module tags require semver with v prefix
   - Pipeline grep expects '// Version: v...' format

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing — 'NuGet' not 'Nuget'

ESRP Release rejected 'Nuget' with: 'The value provided for
ReleaseContentType property is invalid.' ErrorCode 2254.

ESRP content types are case-sensitive. Fix: 'Nuget' -> 'NuGet'.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag (#963)

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag

Three gaps found during publish verification:

1. PyPI: add agentmesh-marketplace (8th package, was missing from matrix)
2. Rust: build+publish both workspace crates (agentmesh + agentmesh-mcp)
   - Changed from single-crate to workspace build (--workspace)
   - Package loop builds both .crate files
   - Renamed artifact from 'rust-agentmesh' to 'rust-crates'
3. Go: add 'v' prefix to version in doc.go (3.1.0 → v3.1.0)
   - Go module tags require semver with v prefix
   - Pipeline grep expects '// Version: v...' format

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing — 'NuGet' not 'Nuget'

ESRP Release rejected 'Nuget' with: 'The value provided for
ReleaseContentType property is invalid.' ErrorCode 2254.

ESRP content types are case-sensitive. Fix: 'Nuget' -> 'NuGet'.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix(ci): use EsrpCodeSigning + dotnet push for NuGet (#965)

EsrpRelease@11 does not support NuGet as a contenttype — it's for
PyPI/npm/Maven/crates.io package distribution. NuGet packages must be
signed with EsrpCodeSigning@5 first, then pushed with dotnet nuget push.

New flow:
1. EsrpCodeSigning@5 with NuGetSign + NuGetVerify operations (CP-401405)
2. dotnet nuget push with the signed .nupkg to nuget.org

This matches the standard Microsoft NuGet ESRP signing pattern used by
azure-sdk, dotnet runtime, and other Microsoft OSS projects.

Co-authored-by: Copilot <[email protected]>

* fix(security): upgrade axios to 1.15.0 - CVE-2026-40175, CVE-2025-62718 (#966)

Critical S360 action items for SFI-ES5.2 1ES Open Source Vulnerabilities.

CVE-2026-40175 (CVSS 9.9): Unrestricted Cloud Metadata Exfiltration
via Header Injection Chain — prototype pollution gadget enables CRLF
injection in HTTP headers, bypassing AWS IMDSv2 session tokens.

CVE-2025-62718: NO_PROXY Bypass via Hostname Normalization — trailing
dots and IPv6 literals skip NO_PROXY matching, enabling SSRF through
attacker-controlled proxy.

Upgraded in 3 packages:
- extensions/copilot: 1.14.0 → 1.15.0
- extensions/cursor:  1.13.5 → 1.15.0
- agent-os-vscode:    1.13.6 → 1.15.0

Co-authored-by: Copilot <[email protected]>

* fix(ci): resolve ESRP_DOMAIN_TENANT_ID cyclical reference (#967)

The ADO variable ESRP_DOMAIN_TENANT_ID had a cyclical self-reference,
preventing ESRP authentication across ALL publishing stages (PyPI, npm,
NuGet, crates.io).

Fix: Define MICROSOFT_TENANT_ID as a pipeline-level variable with the
well-known Microsoft corporate tenant ID (72f988bf-..., same default
used by ESRP Release action.yml). This is a public value, not a secret.

Also: NuGet publishing requires Microsoft as co-owner of the package
on NuGet.org. See https://aka.ms/Microsoft-NuGet-Compliance

Co-authored-by: Copilot <[email protected]>

* docs: sync audit redaction status and framing with current code

- Update SOC2 mapping to reflect CredentialRedactor now redacts
  credential-like secrets before audit persistence (API keys, tokens,
  JWTs, connection strings, etc.). Remaining gap: non-credential PII
  (email, phone, addresses) not yet redacted in audit entries.
- Replace 'kernel-level enforcement' with 'policy-layer enforcement'
  in README, OWASP compliance, and architecture overview to match the
  existing 'application-level governance' framing in README Security
  section and LIMITATIONS.md.
- Qualify 10/10 OWASP coverage claim in COMPARISON.md with footnote
  clarifying this means mitigation components exist per risk category,
  not full elimination.
- Update owasp-llm-top10-mapping.md LLM06 row for credential redaction.

Addresses doc/code inconsistencies identified in external review.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>

* fix(lint): resolve agent-mesh lint errors in eu_ai_act.py (#1028)

- Remove unused variable profiling_override (F841)
- Remove f-string without placeholders (F541)
- Fix whitespace in docstrings (W293)

Co-authored-by: Copilot <[email protected]>

* fix(ci): add path filters and concurrency; announce v3.1.0 release (#1039)

CI optimization:
- Add paths-ignore for docs to 5 code-only workflows
- Add paths filter to Link Check (only run on docs changes)
- Add concurrency groups to 7 heavy workflows
- Docs-only PRs drop from ~14 checks to ~4

README:
- Add v3.1.0 release announcement callout
- Add PyPI version badge
- Update tutorial count to 31

Co-authored-by: Copilot <[email protected]>

* docs: add ADOPTERS.md and make deployment guides multi-cloud (#1040)

- New ADOPTERS.md following Backstage/Flatcar pattern with Production,
  Evaluation, and Academic tables + instructions for adding your org
- Rewrite docs/deployment/README.md from Azure-only to multi-cloud:
  Azure (AKS, Foundry, Container Apps), AWS (ECS/Fargate), GCP (GKE),
  Docker Compose, self-hosted. Updated architecture diagram to show
  cloud-agnostic deployment patterns.
- Fix broken AWS/GCP links (pointed to non-existent paths)
- README now links to 'Deployment Guides' (multi-cloud) instead of
  'Azure Deployment'
- README Contributing section invites adopters to add their org

Co-authored-by: Copilot <[email protected]>

* feat: add AGT Lite — zero-config governance in 3 lines, fix broken quickstart (#1044)

Addresses the #1 developer experience criticism: AGT is too complex to start.

New: agent_os.lite — lightweight governance module
- govern() factory: one line to create a governance gate
- check(action): one line to enforce — raises GovernanceViolation or returns True
- check.is_allowed(action): non-raising bool version
- Allow lists, deny lists, regex patterns, content filtering, rate limiting
- Built-in audit trail and stats
- Sub-millisecond evaluation (0.003ms avg, 1000 evals in <100ms)
- Zero dependencies beyond stdlib (re, time, datetime)
- 16 tests passing

Fix: govern_in_60_seconds.py quickstart
- BROKEN: was calling PolicyEvaluator.add_rules() which does not exist
- FIXED: now uses agent_os.lite.govern() which actually works
- Verified end-to-end: script runs and produces correct output

The lite module is for developers who just want basic governance
without learning PolicyEvaluator, YAML, OPA/Rego, trust mesh, etc.
Upgrade to the full stack when you need it.

Co-authored-by: Copilot <[email protected]>

* feat(ci): enhance weekly security audit with 7 new scan jobs (#1051)

Add comprehensive security checks based on issues found during
the MSRC-111178 security audit and ongoing post-merge reviews:

- Workflow security regression (MSRC-111178 pull_request_target check)
- Expression injection scan (github.event.* in run: blocks)
- Docker security (root containers, wildcard CORS, hardcoded passwords,
  0.0.0.0 bindings)
- XSS and unsafe DOM (innerHTML, eval, yaml.load, shell=True)
- Action SHA pinning compliance
- Version pinning (pyproject.toml upper bounds, Docker :latest tags,
  license field format)
- Dependency confusion with --strict mode (pyproject.toml + package.json)
- Retention days updated to 180 (EU AI Act Art. 26(6))

Co-authored-by: Copilot <[email protected]>

* fix(ci): fix OpenShell integration CI — spelling, link check, policy validation (#1057)

- Add OpenShell/NVIDIA terms to cspell dictionary (Landlock, seccomp, syscall, etc.)
- Fix broken link: openclaw-skill -> openshell-skill in docs/integrations/openshell.md
- Fix policy validation: replace starts_with (invalid) with matches + regex

Co-authored-by: Copilot <[email protected]>

* feat: add reversibility checker, trust calibration guide, and escalation/reversibility tests (#1061)

Addresses critical review feedback:

1. Rollback/reversibility (agent_os.reversibility)
   - ReversibilityChecker: pre-execution assessment of action reversibility
   - 4 levels: fully_reversible, partially_reversible, irreversible, unknown
   - CompensatingAction: structured undo plans for each action type
   - Built-in rules for 12 common actions (write, deploy, delete, email, etc.)
   - block_irreversible mode for strict environments

2. Trust score calibration guide (docs/security/trust-score-calibration.md)
   - Score component weights (compliance 35%, task 25%, behavior 25%, identity 15%)
   - Decay functions with tier floors
   - Initial score assignments by agent origin
   - Threshold recommendations (conservative/moderate/permissive)
   - Anti-gaming measures and operational playbook

3. Tests: 19 passing (10 escalation + 9 reversibility)

Co-authored-by: Copilot <[email protected]>

* feat: deployment runtime (Docker/AKS) and shared trust core types (#1062)

agent-runtime: Evolve from thin re-export shim to deployment runtime
- DockerDeployer: container deployment with security hardening
  (cap-drop ALL, no-new-privileges, read-only rootfs)
- KubernetesDeployer: AKS pod deployment with governance sidecars
  (runAsNonRoot, seccompProfile, resource limits)
- GovernanceConfig: policy/trust/audit config injected as env vars
- DeploymentTarget protocol for extensibility (ADC, nono, etc.)
- 24 tests (all subprocess calls mocked)

agent-mesh: Extract shared trust types into agentmesh.trust_types
- TrustScore, AgentProfile, TrustRecord, TrustTracker
- Canonical implementations replacing ~800 lines of duplicated code
  across 6+ integration packages
- 25 tests covering clamping, scoring, history, capabilities

Co-authored-by: Copilot <[email protected]>

* feat(dotnet): add kill switch and lifecycle management to .NET SDK (#1065)

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add comprehensive xUnit tests for both components (26 tests)
- Update .NET SDK README with usage documentation

Co-authored-by: Copilot <[email protected]>

* feat(go): add MCP security, execution rings, and lifecycle management to Go SDK (#1066)

- mcp.go: MCP security scanner detecting tool poisoning, typosquatting,
  hidden instructions (zero-width chars, homoglyphs), and rug pulls
- rings.go: Execution privilege ring model (Admin/Standard/Restricted/Sandboxed)
  with default-deny access control
- lifecycle.go: Eight-state agent lifecycle manager with validated transitions
- Full test coverage for all three modules
- Updated README with API docs and examples

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK (#1067)

* feat(dotnet): add kill switch and lifecycle management to .NET SDK

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add comprehensive xUnit tests for both components (26 tests)
- Update .NET SDK README with usage documentation

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK

Add two new modules to the agentmesh Rust crate:

- rings.rs: Four-level execution privilege ring model (Admin/Standard/
  Restricted/Sandboxed) with per-agent assignment and per-ring action
  permissions, ported from the Python hypervisor enforcer.

- lifecycle.rs: Eight-state agent lifecycle manager (Provisioning through
  Decommissioned) with validated state transitions and event history,
  matching the lifecycle model used across other SDK languages.

Both modules include comprehensive unit tests and are re-exported from
the crate root. README updated with API tables and usage examples.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix: align lotl_prevention_policy.yaml with PolicyDocument schema

The policy file used an incompatible schema format (id, parameter,
regex_match, effect) instead of the expected PolicyDocument fields
(name, condition.field, operator, action). This caused the
validate-policies CI check to fail for all PRs.

Changes:
- id → name
- condition.parameter → condition.field
- operator: regex_match → operator: matches
- action at rule level (shell_exec/file_read) → action: deny
- effect: DENY → removed (redundant with action: deny)
- Added version, name, description, disclaimer at top level

Co-authored-by: Copilot <[email protected]>

* fix: resolve .NET ESRP signing issues blocking NuGet publish

GitHub Actions (publish.yml):
- Fix broken if-guards on signing steps: env.ESRP_AAD_ID was set in
  step-level env (invisible to if-expressions). Replace with job-level
  ESRP_CONFIGURED env derived from secrets.
- Add missing ESRP_CERT_IDENTIFIER to signing step env blocks.
- Gate the publish step on ESRP_CONFIGURED so unsigned packages are
  never pushed to NuGet.org under the Microsoft.* prefix.
- Make stub signing steps fail-fast (exit 1) instead of silently
  succeeding, preventing unsigned packages from reaching NuGet push.

ADO Pipeline (esrp-publish.yml):
- Add UseDotNet@2 task to Publish_NuGet stage so dotnet nuget push
  has a guaranteed SDK version on the Windows agent.

Co-authored-by: Copilot <[email protected]>

* fix(docs): fix OpenClaw sidecar demo and add limitations callout (#1163)

The docker-compose example in openclaw-sidecar.md was illustrative only
and did not work — it referenced a non-existent OpenClaw image and lacked
healthchecks. Users were hitting this and getting confused.

Changes:
- Add working demo at demo/openclaw-governed/ with docker-compose.yaml
  that builds and runs the governance sidecar from source
- Replace the inline docker-compose in the doc with a link to the demo
  plus a clearly-labeled reference template for custom deployments
- Add prominent WARNING callout listing known limitations (no native
  OpenClaw integration, no published images, explicit API required)
- Remove stale orphaned curl snippet after the docker-compose block
- Add healthcheck to docker-compose governance-sidecar service
- Fix OpenClaw image reference from ghcr.io/openclaw/openclaw:latest
  to a placeholder users must replace with their own image

Co-authored-by: Copilot <[email protected]>

* fix(docs): fix OpenClaw sidecar demo and add limitations callout (#1164)

The docker-compose example in openclaw-sidecar.md was illustrative only
and did not work — it referenced a non-existent OpenClaw image and lacked
healthchecks. Users were hitting this and getting confused.

Changes:
- Add working demo at demo/openclaw-governed/ with docker-compose.yaml
  that builds and runs the governance sidecar from source
- Replace the inline docker-compose in the doc with a link to the demo
  plus a clearly-labeled reference template for custom deployments
- Add prominent WARNING callout listing known limitations (no native
  OpenClaw integration, no published images, explicit API required)
- Remove stale orphaned curl snippet after the docker-compose block
- Add healthcheck to docker-compose governance-sidecar service
- Fix OpenClaw image reference from ghcr.io/openclaw/openclaw:latest
  to a placeholder users must replace with their own image

Co-authored-by: Copilot <[email protected]>

* fix(ci): use PME tenant ID for ESRP cert signing

The ESRP signing cert lives in the PME (Partner Managed Engineering)
tenant (975f013f), not the Microsoft corporate tenant (72f988bf).
Using the wrong tenant ID causes ESRP signing to fail when looking
up the cert.

Co-authored-by: Copilot <[email protected]>

* docs: Add Scaling AI Agents article to COMMUNITY.md (#857)

Co-authored-by: deepsearch <[email protected]>

* Add runtime evidence mode to agt verify (#969)

* Track agt verify evidence plan

* Add runtime evidence mode to agt verify

* Add runtime evidence verifier tests

* Add CLI tests for agt verify evidence mode

* Document evidence mode for compliance verification

* Remove local implementation notes

* Document agt verify evidence mode

* Harden evidence path handling in verify

---------

Co-authored-by: T. Smith <[email protected]>

* docs: add Entra Agent ID bridge tutorial with R&R matrix and DID fix

- Add Tutorial 31: Bridging AGT Identity with Microsoft Entra Agent ID
  - Detailed roles & responsibilities between AGT and Entra/Agent365
  - Architecture diagram showing the identity bridge
  - Step-by-step: DID creation, Entra binding, AKS workload identity,
    token validation, lifecycle sync, access verification
  - Known gaps and limitations table
  - Platform independence note (AWS, GCP, Okta patterns)
- Fix DID prefix in .NET MCP gateway tests (did:agentmesh → did:mesh
  for consistency with Python reference implementation and .NET SDK)
- Update tutorials README with Enterprise Identity section

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>
Co-authored-by: Jack Batzner <[email protected]>
Co-authored-by: lawcontinue <[email protected]>
Co-authored-by: deepsearch <[email protected]>
Co-authored-by: ewmh <[email protected]>
Co-authored-by: T. Smith <[email protected]>

* docs: address external critic gaps in limitations and threat model (#11)

Add three new sections to LIMITATIONS.md addressing gaps identified in
public criticism and external security analysis:

- §10 Physical AI and Embodied Agent Governance: documents that AGT
  governs software agents not physical actuators, with mitigations
- §11 Streaming Data and Real-Time Assurance: documents that AGT
  evaluates per-action not continuously over data streams
- §12 DID Method Inconsistency Across SDKs: documents the did:mesh
  vs did:agentmesh split with migration plan for v4.0

Update THREAT_MODEL.md residual risks to reference all three new
limitation sections.

Co-authored-by: Copilot <[email protected]>

* fix!: standardize DID method to did:agentmesh across all SDKs (#12)

* fix!: standardize DID method to did:agentmesh across all SDKs

BREAKING CHANGE: All agent DIDs now use the did:agentmesh: prefix.
The legacy did:mesh: prefix used by Python and .NET has been migrated
to match the did:agentmesh: convention already used by TypeScript,
Rust, and Go SDKs.

Changes:
- Python: agent_id.py, delegation.py, entra.py, all integrations
- .NET: AgentIdentity.cs, Jwk.cs, GovernanceKernel.cs, all tests
- Docs: README, tutorials, identity docs, FAQ, compliance docs
- Tests: all test fixtures updated across Python, .NET, TS, VSCode
- Version bump: 3.1.0 → 3.2.0 (.NET, Python agent-mesh, TypeScript)

Migration: replace did:mesh: with did:agentmesh: in your policies,
identity registries, and agent configurations.

Co-authored-by: Copilot <[email protected]>

* docs: add Q11-Q13 to FAQ — AGT scope, Agent 365, and DLP comparison

Adds three new customer Q&As:
- Q11: Is AGT for Foundry agents or any agent type? (any)
- Q12: Relationship between AGT and Agent 365 (different layers)
- Q13: How is AGT different from DLP/communication compliance
  (content vs action governance)

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix(security): address all 14 open code scanning alerts (#13)

* fix: address 6 Dependabot security vulnerabilities

- python-multipart 0.0.22 → 0.0.26 (DoS via large preamble/epilogue)
- pytest 8.4.1 → 9.0.3 (tmpdir handling vulnerability)
- langchain-core 1.2.11 → 1.2.28 (SSRF, path traversal, f-string validation)
- langchain-core >=0.2.0,<1.0 → >=1.2.28 in langchain-agentmesh pyproject.toml
- tsup 8.0.0 → 8.5.1 (DOM clobbering vulnerability)
- rand 0.8.5: dismissed #176 as inaccurate (vuln affects rand::rng() 0.9.x API only)

Fixes Dependabot alerts: #177, #175, #166, #164, #157, #156
Dismissed: #176 (not applicable to rand 0.8.x)

Co-authored-by: Copilot <[email protected]>

* fix(security): address all 14 open code scanning alerts

Scorecard HIGH:
- publish-containers.yml: scope packages:write to job level (#316)

Scorecard MEDIUM (pinned dependencies):
- docs.yml: pin 4 GitHub Actions by SHA hash (#311-314)
- docs.yml: use requirements.txt for pip install (#315)
- agent-mesh Dockerfile: pin python:3.11-slim by SHA (#317,#318)
- agent-os Dockerfile.sidecar: pin python:3.14-slim by SHA (#295,#296)
- dashboard Dockerfile: pin python:3.12-slim by SHA (#291,#293)

CodeQL:
- test_time_decay.py: timedelta(days=365) -> 366 for leap safety (#289,#290)

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>
Co-authored-by: Jack Batzner <[email protected]>
Co-authored-by: lawcontinue <[email protected]>
Co-authored-by: deepsearch <[email protected]>
Co-authored-by: ewmh <[email protected]>
Co-authored-by: T. Smith <[email protected]>
MohammadHaroonAbuomar pushed a commit to MohammadHaroonAbuomar/agt-acs that referenced this pull request Jun 1, 2026
MohammadHaroonAbuomar pushed a commit to MohammadHaroonAbuomar/agt-acs that referenced this pull request Jun 1, 2026
…icrosoft#1017)

* feat(dotnet): add kill switch and lifecycle management to .NET SDK (microsoft#5)

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add 26 xUnit tests
- Update README

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK (microsoft#6)

* feat(dotnet): add kill switch and lifecycle management to .NET SDK

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add comprehensive xUnit tests for both components (26 tests)
- Update .NET SDK README with usage documentation

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK

Add two new modules to the agentmesh Rust crate:

- rings.rs: Four-level execution privilege ring model (Admin/Standard/
  Restricted/Sandboxed) with per-agent assignment and per-ring action
  permissions, ported from the Python hypervisor enforcer.

- lifecycle.rs: Eight-state agent lifecycle manager (Provisioning through
  Decommissioned) with validated state transitions and event history,
  matching the lifecycle model used across other SDK languages.

Both modules include comprehensive unit tests and are re-exported from
the crate root. README updated with API tables and usage examples.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* feat(go): add MCP security, execution rings, and lifecycle management to Go SDK (microsoft#7)

* feat(openshell): add governance skill package and runnable example (microsoft#942)

Co-authored-by: Copilot <[email protected]>

* feat(go): add MCP security, execution rings, and lifecycle management to Go SDK

- mcp.go: MCP security scanner detecting tool poisoning, typosquatting,
  hidden instructions (zero-width chars, homoglyphs), and rug pulls
- rings.go: Execution privilege ring model (Admin/Standard/Restricted/Sandboxed)
  with default-deny access control
- lifecycle.go: Eight-state agent lifecycle manager with validated transitions
- Full test coverage for all three modules
- Updated README with API docs and examples

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* docs: sync audit redaction status and framing with current code (microsoft#8)

* feat(openshell): add governance skill package and runnable example (microsoft#942)

Co-authored-by: Copilot <[email protected]>

* feat(typescript): add MCP security scanner and lifecycle management to TS SDK (microsoft#947)

Co-authored-by: Copilot <[email protected]>

* docs: update SDK feature matrix after parity pass (microsoft#950)

Reflects new capabilities added in PRs microsoft#947 (TS), .NET, Rust, Go:
- TypeScript: MCP security scanner + lifecycle management (was 5/14, now 7/14)
- .NET: Kill switch + lifecycle management (was 8/14, now 10/14)
- Rust: Execution rings + lifecycle management (was 6/14, now 8/14)
- Go: MCP security + rings + lifecycle (was 4/14, now 7/14)

All SDKs now have lifecycle management. Core governance (policy, identity,
trust, audit) + lifecycle = 5 primitives shared across all 5 languages.

Co-authored-by: Copilot <[email protected]>

* docs: add LIMITATIONS.md - honest design boundaries and layered defense (microsoft#953)

Addresses valid external critique of AGT's architectural blind spots:

1. Action vs Intent: AGT governs individual actions, not reasoning or
   action sequences. Documents the compound-action gap explicitly and
   recommends content policies + model safety layers.

2. Audit logs record attempts, not outcomes: Documents that post-action
   state verification is the user's responsibility today, with hooks planned.

3. Performance honesty: README now notes that <0.1ms is policy-eval only;
   distributed mesh adds 5-50ms. Full breakdown in LIMITATIONS.md.

4. Complexity spectrum: Documents the minimal path (just PolicyEvaluator,
   no mesh/crypto) vs full enterprise stack.

5. Vendor independence: Documents zero cloud dependencies in core,
   standard formats for all state, migration path.

6. Recommended layered defense architecture diagram showing AGT as one
   layer alongside model safety, application logic, and infrastructure.

Co-authored-by: Copilot <[email protected]>

* fix(docs): rewrite OpenClaw sidecar deployment with working K8s manifests (microsoft#954)

Closes microsoft#952

Co-authored-by: Copilot <[email protected]>

* feat: reversibility checker, trust calibration guide, escalation tests (microsoft#955)

ReversibilityChecker with 4 levels and compensation plans. Trust score calibration guide with weights, decay, thresholds. 19 tests. Co-authored-by: Copilot <[email protected]>

* feat: AGT Lite — zero-config governance in 3 lines + fix broken quickstart (microsoft#956)

agent_os.lite: govern() factory, sub-ms enforcement, 16 tests. Fixed quickstart that called nonexistent add_rules(). Co-authored-by: Copilot <[email protected]>

* fix: bump all runtime versions to 3.1.0 and fix CI lint/test failures (microsoft#957)

- Bump __version__ in 29 Python __init__.py files from 3.0.2 to 3.1.0
- Bump version= in 6 setup.py files from 3.0.2 to 3.1.0
- Bump meter version strings in _mcp_metrics.py
- Bump 9 package.json files from 3.0.2 to 3.1.0
- Bump .NET csproj Version from 3.0.2 to 3.1.0
- Bump Rust workspace Cargo.toml from 3.0.2 to 3.1.0
- Create Go sdk doc.go with version marker 3.1.0
- Fix ruff W292 (missing newline at EOF) in data_classification.py
- Fix CLI init regex to allow dots in agent names (test_init_special_characters)

Co-authored-by: Copilot <[email protected]>

* fix(openclaw): critical honesty pass — document what works vs what's planned (microsoft#958)

Co-authored-by: Copilot <[email protected]>

* fix(ci): fix Rust crate packaging - use workspace root with -p agentmesh (microsoft#959)

* fix(openclaw): critical honesty pass — document what works vs what's planned

Server (__main__.py):
- Add --host/--port argparse + env var support (was hardcoded 127.0.0.1:8080)

Dockerfile.sidecar:
- Copy modules/ directory (was missing, causing build failure)
- Use 0.0.0.0 for container binding (127.0.0.1 is wrong inside containers)
- Remove phantom port 9091 (no separate metrics listener exists)

openclaw-sidecar.md — full honesty rewrite:
- Add status banner: transparent interception is NOT yet implemented
- Document actual sidecar API endpoints (health, detect/injection, execute, metrics)
- Fix Docker Compose to use Dockerfile.sidecar (was using wrong Dockerfile)
- Remove GOVERNANCE_PROXY claim (OpenClaw doesn't natively read this)
- Replace fictional SLO/Grafana sections with real /api/v1/metrics docs
- Add Roadmap section listing what's planned vs shipped

openshell.md:
- Remove references to non-existent shell scripts
- Fix python -m agentmesh.server to python -m agent_os.server
- Add note that sidecar doesn't transparently intercept (must call API)
- Replace pip install agentmesh-platform with Python skill library usage

Co-authored-by: Copilot <[email protected]>

* fix(ci): fix Rust crate packaging — use workspace root with -p agentmesh

cargo package in a workspace writes .crate files to the workspace root's
target/package/, not the individual crate's directory. The pipeline was
running from the crate subdirectory and couldn't find the output.

Fix: change workingDirectory from packages/agent-mesh/sdks/rust/agentmesh
to packages/agent-mesh/sdks/rust (workspace root) and add -p agentmesh
to all cargo commands to target the specific crate.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* docs(adr): ADR 0005 — Liveness attestation extension for TrustHandshake (microsoft#948)

Proposes liveness attestation as opt-in gate for TrustHandshake. Addresses ghost-agent and ungraceful-handoff gaps from microsoft#772.

Co-authored-by: kevinkaylie <[email protected]>

* blog: MCP Security — Why Your AI Agent Tool Calls Need a Firewall (microsoft#899)

Co-authored-by: aymenhmaidiwastaken <[email protected]>

* feat: add LotL prevention policy for security measures (microsoft#949)

YAML policy template for Living-off-the-Land detection and prevention.

* feat(examples): add ATR community security rules for PolicyEvaluator (microsoft#908)

15 curated ATR detection rules + sync script. Closes microsoft#901.

* fix(docs): correct npm package name and stale version refs across 21 files (microsoft#960)

- Fix @agentmesh/sdk → @microsoft/agentmesh-sdk in 13 markdown files
  (README, QUICKSTART, tutorials, SDK docs, i18n, changelog)
- Fix broken demo path in agent-os README (agent-os/demo.py → demo/maf_governance_demo.py)
- Remove stale v1.0.0 labels from extension status table
- Bump AGT Version refs 3.0.2 → 3.1.0 in case study templates and
  ATF conformance assessment

Co-authored-by: Copilot <[email protected]>

* fix(ci): use ESRP Release for NuGet signing (microsoft#961)

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing (microsoft#962)

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag

Three gaps found during publish verification:

1. PyPI: add agentmesh-marketplace (8th package, was missing from matrix)
2. Rust: build+publish both workspace crates (agentmesh + agentmesh-mcp)
   - Changed from single-crate to workspace build (--workspace)
   - Package loop builds both .crate files
   - Renamed artifact from 'rust-agentmesh' to 'rust-crates'
3. Go: add 'v' prefix to version in doc.go (3.1.0 → v3.1.0)
   - Go module tags require semver with v prefix
   - Pipeline grep expects '// Version: v...' format

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing — 'NuGet' not 'Nuget'

ESRP Release rejected 'Nuget' with: 'The value provided for
ReleaseContentType property is invalid.' ErrorCode 2254.

ESRP content types are case-sensitive. Fix: 'Nuget' -> 'NuGet'.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag (microsoft#963)

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag

Three gaps found during publish verification:

1. PyPI: add agentmesh-marketplace (8th package, was missing from matrix)
2. Rust: build+publish both workspace crates (agentmesh + agentmesh-mcp)
   - Changed from single-crate to workspace build (--workspace)
   - Package loop builds both .crate files
   - Renamed artifact from 'rust-agentmesh' to 'rust-crates'
3. Go: add 'v' prefix to version in doc.go (3.1.0 → v3.1.0)
   - Go module tags require semver with v prefix
   - Pipeline grep expects '// Version: v...' format

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing — 'NuGet' not 'Nuget'

ESRP Release rejected 'Nuget' with: 'The value provided for
ReleaseContentType property is invalid.' ErrorCode 2254.

ESRP content types are case-sensitive. Fix: 'Nuget' -> 'NuGet'.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix(ci): use EsrpCodeSigning + dotnet push for NuGet (microsoft#965)

EsrpRelease@11 does not support NuGet as a contenttype — it's for
PyPI/npm/Maven/crates.io package distribution. NuGet packages must be
signed with EsrpCodeSigning@5 first, then pushed with dotnet nuget push.

New flow:
1. EsrpCodeSigning@5 with NuGetSign + NuGetVerify operations (CP-401405)
2. dotnet nuget push with the signed .nupkg to nuget.org

This matches the standard Microsoft NuGet ESRP signing pattern used by
azure-sdk, dotnet runtime, and other Microsoft OSS projects.

Co-authored-by: Copilot <[email protected]>

* fix(security): upgrade axios to 1.15.0 - CVE-2026-40175, CVE-2025-62718 (microsoft#966)

Critical S360 action items for SFI-ES5.2 1ES Open Source Vulnerabilities.

CVE-2026-40175 (CVSS 9.9): Unrestricted Cloud Metadata Exfiltration
via Header Injection Chain — prototype pollution gadget enables CRLF
injection in HTTP headers, bypassing AWS IMDSv2 session tokens.

CVE-2025-62718: NO_PROXY Bypass via Hostname Normalization — trailing
dots and IPv6 literals skip NO_PROXY matching, enabling SSRF through
attacker-controlled proxy.

Upgraded in 3 packages:
- extensions/copilot: 1.14.0 → 1.15.0
- extensions/cursor:  1.13.5 → 1.15.0
- agent-os-vscode:    1.13.6 → 1.15.0

Co-authored-by: Copilot <[email protected]>

* fix(ci): resolve ESRP_DOMAIN_TENANT_ID cyclical reference (microsoft#967)

The ADO variable ESRP_DOMAIN_TENANT_ID had a cyclical self-reference,
preventing ESRP authentication across ALL publishing stages (PyPI, npm,
NuGet, crates.io).

Fix: Define MICROSOFT_TENANT_ID as a pipeline-level variable with the
well-known Microsoft corporate tenant ID (72f988bf-..., same default
used by ESRP Release action.yml). This is a public value, not a secret.

Also: NuGet publishing requires Microsoft as co-owner of the package
on NuGet.org. See https://aka.ms/Microsoft-NuGet-Compliance

Co-authored-by: Copilot <[email protected]>

* docs: sync audit redaction status and framing with current code

- Update SOC2 mapping to reflect CredentialRedactor now redacts
  credential-like secrets before audit persistence (API keys, tokens,
  JWTs, connection strings, etc.). Remaining gap: non-credential PII
  (email, phone, addresses) not yet redacted in audit entries.
- Replace 'kernel-level enforcement' with 'policy-layer enforcement'
  in README, OWASP compliance, and architecture overview to match the
  existing 'application-level governance' framing in README Security
  section and LIMITATIONS.md.
- Qualify 10/10 OWASP coverage claim in COMPARISON.md with footnote
  clarifying this means mitigation components exist per risk category,
  not full elimination.
- Update owasp-llm-top10-mapping.md LLM06 row for credential redaction.

Addresses doc/code inconsistencies identified in external review.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>
MohammadHaroonAbuomar pushed a commit to MohammadHaroonAbuomar/agt-acs that referenced this pull request Jun 1, 2026
* feat(dotnet): add kill switch and lifecycle management to .NET SDK (microsoft#5)

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add 26 xUnit tests
- Update README

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK (microsoft#6)

* feat(dotnet): add kill switch and lifecycle management to .NET SDK

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add comprehensive xUnit tests for both components (26 tests)
- Update .NET SDK README with usage documentation

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK

Add two new modules to the agentmesh Rust crate:

- rings.rs: Four-level execution privilege ring model (Admin/Standard/
  Restricted/Sandboxed) with per-agent assignment and per-ring action
  permissions, ported from the Python hypervisor enforcer.

- lifecycle.rs: Eight-state agent lifecycle manager (Provisioning through
  Decommissioned) with validated state transitions and event history,
  matching the lifecycle model used across other SDK languages.

Both modules include comprehensive unit tests and are re-exported from
the crate root. README updated with API tables and usage examples.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* feat(go): add MCP security, execution rings, and lifecycle management to Go SDK (microsoft#7)

* feat(openshell): add governance skill package and runnable example (microsoft#942)

Co-authored-by: Copilot <[email protected]>

* feat(go): add MCP security, execution rings, and lifecycle management to Go SDK

- mcp.go: MCP security scanner detecting tool poisoning, typosquatting,
  hidden instructions (zero-width chars, homoglyphs), and rug pulls
- rings.go: Execution privilege ring model (Admin/Standard/Restricted/Sandboxed)
  with default-deny access control
- lifecycle.go: Eight-state agent lifecycle manager with validated transitions
- Full test coverage for all three modules
- Updated README with API docs and examples

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* docs: sync audit redaction status and framing with current code (microsoft#8)

* feat(openshell): add governance skill package and runnable example (microsoft#942)

Co-authored-by: Copilot <[email protected]>

* feat(typescript): add MCP security scanner and lifecycle management to TS SDK (microsoft#947)

Co-authored-by: Copilot <[email protected]>

* docs: update SDK feature matrix after parity pass (microsoft#950)

Reflects new capabilities added in PRs microsoft#947 (TS), .NET, Rust, Go:
- TypeScript: MCP security scanner + lifecycle management (was 5/14, now 7/14)
- .NET: Kill switch + lifecycle management (was 8/14, now 10/14)
- Rust: Execution rings + lifecycle management (was 6/14, now 8/14)
- Go: MCP security + rings + lifecycle (was 4/14, now 7/14)

All SDKs now have lifecycle management. Core governance (policy, identity,
trust, audit) + lifecycle = 5 primitives shared across all 5 languages.

Co-authored-by: Copilot <[email protected]>

* docs: add LIMITATIONS.md - honest design boundaries and layered defense (microsoft#953)

Addresses valid external critique of AGT's architectural blind spots:

1. Action vs Intent: AGT governs individual actions, not reasoning or
   action sequences. Documents the compound-action gap explicitly and
   recommends content policies + model safety layers.

2. Audit logs record attempts, not outcomes: Documents that post-action
   state verification is the user's responsibility today, with hooks planned.

3. Performance honesty: README now notes that <0.1ms is policy-eval only;
   distributed mesh adds 5-50ms. Full breakdown in LIMITATIONS.md.

4. Complexity spectrum: Documents the minimal path (just PolicyEvaluator,
   no mesh/crypto) vs full enterprise stack.

5. Vendor independence: Documents zero cloud dependencies in core,
   standard formats for all state, migration path.

6. Recommended layered defense architecture diagram showing AGT as one
   layer alongside model safety, application logic, and infrastructure.

Co-authored-by: Copilot <[email protected]>

* fix(docs): rewrite OpenClaw sidecar deployment with working K8s manifests (microsoft#954)

Closes microsoft#952

Co-authored-by: Copilot <[email protected]>

* feat: reversibility checker, trust calibration guide, escalation tests (microsoft#955)

ReversibilityChecker with 4 levels and compensation plans. Trust score calibration guide with weights, decay, thresholds. 19 tests. Co-authored-by: Copilot <[email protected]>

* feat: AGT Lite — zero-config governance in 3 lines + fix broken quickstart (microsoft#956)

agent_os.lite: govern() factory, sub-ms enforcement, 16 tests. Fixed quickstart that called nonexistent add_rules(). Co-authored-by: Copilot <[email protected]>

* fix: bump all runtime versions to 3.1.0 and fix CI lint/test failures (microsoft#957)

- Bump __version__ in 29 Python __init__.py files from 3.0.2 to 3.1.0
- Bump version= in 6 setup.py files from 3.0.2 to 3.1.0
- Bump meter version strings in _mcp_metrics.py
- Bump 9 package.json files from 3.0.2 to 3.1.0
- Bump .NET csproj Version from 3.0.2 to 3.1.0
- Bump Rust workspace Cargo.toml from 3.0.2 to 3.1.0
- Create Go sdk doc.go with version marker 3.1.0
- Fix ruff W292 (missing newline at EOF) in data_classification.py
- Fix CLI init regex to allow dots in agent names (test_init_special_characters)

Co-authored-by: Copilot <[email protected]>

* fix(openclaw): critical honesty pass — document what works vs what's planned (microsoft#958)

Co-authored-by: Copilot <[email protected]>

* fix(ci): fix Rust crate packaging - use workspace root with -p agentmesh (microsoft#959)

* fix(openclaw): critical honesty pass — document what works vs what's planned

Server (__main__.py):
- Add --host/--port argparse + env var support (was hardcoded 127.0.0.1:8080)

Dockerfile.sidecar:
- Copy modules/ directory (was missing, causing build failure)
- Use 0.0.0.0 for container binding (127.0.0.1 is wrong inside containers)
- Remove phantom port 9091 (no separate metrics listener exists)

openclaw-sidecar.md — full honesty rewrite:
- Add status banner: transparent interception is NOT yet implemented
- Document actual sidecar API endpoints (health, detect/injection, execute, metrics)
- Fix Docker Compose to use Dockerfile.sidecar (was using wrong Dockerfile)
- Remove GOVERNANCE_PROXY claim (OpenClaw doesn't natively read this)
- Replace fictional SLO/Grafana sections with real /api/v1/metrics docs
- Add Roadmap section listing what's planned vs shipped

openshell.md:
- Remove references to non-existent shell scripts
- Fix python -m agentmesh.server to python -m agent_os.server
- Add note that sidecar doesn't transparently intercept (must call API)
- Replace pip install agentmesh-platform with Python skill library usage

Co-authored-by: Copilot <[email protected]>

* fix(ci): fix Rust crate packaging — use workspace root with -p agentmesh

cargo package in a workspace writes .crate files to the workspace root's
target/package/, not the individual crate's directory. The pipeline was
running from the crate subdirectory and couldn't find the output.

Fix: change workingDirectory from packages/agent-mesh/sdks/rust/agentmesh
to packages/agent-mesh/sdks/rust (workspace root) and add -p agentmesh
to all cargo commands to target the specific crate.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* docs(adr): ADR 0005 — Liveness attestation extension for TrustHandshake (microsoft#948)

Proposes liveness attestation as opt-in gate for TrustHandshake. Addresses ghost-agent and ungraceful-handoff gaps from microsoft#772.

Co-authored-by: kevinkaylie <[email protected]>

* blog: MCP Security — Why Your AI Agent Tool Calls Need a Firewall (microsoft#899)

Co-authored-by: aymenhmaidiwastaken <[email protected]>

* feat: add LotL prevention policy for security measures (microsoft#949)

YAML policy template for Living-off-the-Land detection and prevention.

* feat(examples): add ATR community security rules for PolicyEvaluator (microsoft#908)

15 curated ATR detection rules + sync script. Closes microsoft#901.

* fix(docs): correct npm package name and stale version refs across 21 files (microsoft#960)

- Fix @agentmesh/sdk → @microsoft/agentmesh-sdk in 13 markdown files
  (README, QUICKSTART, tutorials, SDK docs, i18n, changelog)
- Fix broken demo path in agent-os README (agent-os/demo.py → demo/maf_governance_demo.py)
- Remove stale v1.0.0 labels from extension status table
- Bump AGT Version refs 3.0.2 → 3.1.0 in case study templates and
  ATF conformance assessment

Co-authored-by: Copilot <[email protected]>

* fix(ci): use ESRP Release for NuGet signing (microsoft#961)

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing (microsoft#962)

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag

Three gaps found during publish verification:

1. PyPI: add agentmesh-marketplace (8th package, was missing from matrix)
2. Rust: build+publish both workspace crates (agentmesh + agentmesh-mcp)
   - Changed from single-crate to workspace build (--workspace)
   - Package loop builds both .crate files
   - Renamed artifact from 'rust-agentmesh' to 'rust-crates'
3. Go: add 'v' prefix to version in doc.go (3.1.0 → v3.1.0)
   - Go module tags require semver with v prefix
   - Pipeline grep expects '// Version: v...' format

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing — 'NuGet' not 'Nuget'

ESRP Release rejected 'Nuget' with: 'The value provided for
ReleaseContentType property is invalid.' ErrorCode 2254.

ESRP content types are case-sensitive. Fix: 'Nuget' -> 'NuGet'.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag (microsoft#963)

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag

Three gaps found during publish verification:

1. PyPI: add agentmesh-marketplace (8th package, was missing from matrix)
2. Rust: build+publish both workspace crates (agentmesh + agentmesh-mcp)
   - Changed from single-crate to workspace build (--workspace)
   - Package loop builds both .crate files
   - Renamed artifact from 'rust-agentmesh' to 'rust-crates'
3. Go: add 'v' prefix to version in doc.go (3.1.0 → v3.1.0)
   - Go module tags require semver with v prefix
   - Pipeline grep expects '// Version: v...' format

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing — 'NuGet' not 'Nuget'

ESRP Release rejected 'Nuget' with: 'The value provided for
ReleaseContentType property is invalid.' ErrorCode 2254.

ESRP content types are case-sensitive. Fix: 'Nuget' -> 'NuGet'.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix(ci): use EsrpCodeSigning + dotnet push for NuGet (microsoft#965)

EsrpRelease@11 does not support NuGet as a contenttype — it's for
PyPI/npm/Maven/crates.io package distribution. NuGet packages must be
signed with EsrpCodeSigning@5 first, then pushed with dotnet nuget push.

New flow:
1. EsrpCodeSigning@5 with NuGetSign + NuGetVerify operations (CP-401405)
2. dotnet nuget push with the signed .nupkg to nuget.org

This matches the standard Microsoft NuGet ESRP signing pattern used by
azure-sdk, dotnet runtime, and other Microsoft OSS projects.

Co-authored-by: Copilot <[email protected]>

* fix(security): upgrade axios to 1.15.0 - CVE-2026-40175, CVE-2025-62718 (microsoft#966)

Critical S360 action items for SFI-ES5.2 1ES Open Source Vulnerabilities.

CVE-2026-40175 (CVSS 9.9): Unrestricted Cloud Metadata Exfiltration
via Header Injection Chain — prototype pollution gadget enables CRLF
injection in HTTP headers, bypassing AWS IMDSv2 session tokens.

CVE-2025-62718: NO_PROXY Bypass via Hostname Normalization — trailing
dots and IPv6 literals skip NO_PROXY matching, enabling SSRF through
attacker-controlled proxy.

Upgraded in 3 packages:
- extensions/copilot: 1.14.0 → 1.15.0
- extensions/cursor:  1.13.5 → 1.15.0
- agent-os-vscode:    1.13.6 → 1.15.0

Co-authored-by: Copilot <[email protected]>

* fix(ci): resolve ESRP_DOMAIN_TENANT_ID cyclical reference (microsoft#967)

The ADO variable ESRP_DOMAIN_TENANT_ID had a cyclical self-reference,
preventing ESRP authentication across ALL publishing stages (PyPI, npm,
NuGet, crates.io).

Fix: Define MICROSOFT_TENANT_ID as a pipeline-level variable with the
well-known Microsoft corporate tenant ID (72f988bf-..., same default
used by ESRP Release action.yml). This is a public value, not a secret.

Also: NuGet publishing requires Microsoft as co-owner of the package
on NuGet.org. See https://aka.ms/Microsoft-NuGet-Compliance

Co-authored-by: Copilot <[email protected]>

* docs: sync audit redaction status and framing with current code

- Update SOC2 mapping to reflect CredentialRedactor now redacts
  credential-like secrets before audit persistence (API keys, tokens,
  JWTs, connection strings, etc.). Remaining gap: non-credential PII
  (email, phone, addresses) not yet redacted in audit entries.
- Replace 'kernel-level enforcement' with 'policy-layer enforcement'
  in README, OWASP compliance, and architecture overview to match the
  existing 'application-level governance' framing in README Security
  section and LIMITATIONS.md.
- Qualify 10/10 OWASP coverage claim in COMPARISON.md with footnote
  clarifying this means mitigation components exist per risk category,
  not full elimination.
- Update owasp-llm-top10-mapping.md LLM06 row for credential redaction.

Addresses doc/code inconsistencies identified in external review.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>
MohammadHaroonAbuomar pushed a commit to MohammadHaroonAbuomar/agt-acs that referenced this pull request Jun 1, 2026
…microsoft#1166)

* feat(dotnet): add MCP security namespace — completes cross-language MCP parity

* fix(ci): add path filters and concurrency; announce v3.1.0 release

CI optimization:
- Add paths-ignore for docs to 5 code-only workflows
- Add paths filter to Link Check (only run on docs changes)
- Add concurrency groups to 7 heavy workflows
- Docs-only PRs drop from ~14 checks to ~4

README:
- Add v3.1.0 release announcement callout
- Add PyPI version badge
- Update tutorial count to 31

Co-authored-by: Copilot <[email protected]>

* docs: update SOC2 mapping for resolved kill switch and DeltaEngine gaps

- Kill switch is no longer placeholder: now implements saga handoff
  with handoff_success_count tracking (kill_switch.py:69-178)
- DeltaEngine verify_chain() is no longer a stub: now performs SHA-256
  chain verification (delta.py:67-127)
- Move both from Critical/High gaps to new 'Resolved' section
- Update Processing Integrity coverage (2 of 4 defects, not 3 of 4)
- Update evidence table with current line ranges

Co-authored-by: Copilot <[email protected]>

* feat(dotnet): add MCP security namespace with scanner, gateway, redactor, and sanitizer

Add AgentGovernance.Mcp namespace implementing full MCP security parity with
TypeScript and Rust SDKs:

- McpSecurityScanner: tool poisoning, typosquatting, hidden instructions,
  rug pull, schema abuse, cross-server attack, and description injection detection
- McpCredentialRedactor: regex-based redaction of API keys, bearer tokens,
  connection strings, and secret assignments
- McpResponseSanitizer: response scanning for prompt injection tags,
  imperative phrasing, credential leakage, and exfiltration URLs
- McpGateway: policy enforcement pipeline with deny/allow lists, payload
  sanitization, rate limiting, and human approval gates

Includes 46 xUnit tests covering all threat categories. Updates
SDK-FEATURE-MATRIX.md to flip .NET MCP Security from — to ✅.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* docs: add Entra Agent ID bridge tutorial (Tutorial 31) (microsoft#10)

* fix(pipeline): run NuGet ESRP signing on Windows agent (microsoft#1022)

The EsrpCodeSigning@5 task constructs internal paths (batchSignPolicyFile,
ciPolicyFile) using Windows-style backslashes. Running on ubuntu-latest
produced garbled mixed paths like '/home/vsts/work/1/s/src\myapp\'.

Changes:
- Add per-job pool override: PublishNuGet runs on windows-latest
- Convert FolderPath and all shell commands to Windows paths
- Replace bash scripts with PowerShell for the Windows agent
- PyPI and npm stages remain on ubuntu-latest (unchanged)
- Add comment to delete orphaned ESRP_DOMAIN_TENANT_ID ADO variable

Co-authored-by: Copilot <[email protected]>

* docs: reland empty-merge changes from PRs microsoft#1017 and microsoft#1020 (microsoft#1125)

PRs microsoft#1017 and microsoft#1020 were squash-merged as empty commits (0 file
changes). This commit re-applies the intended documentation updates.

From PR microsoft#1017 (critic gaps):
- LIMITATIONS.md: add sections 7 (knowledge governance gap), 8
  (credential persistence gap), 9 (initialization bypass risk)
- LIMITATIONS.md: add knowledge governance and enforcement infra
  rows to 'What AGT Is Not' table
- THREAT_MODEL.md: add knowledge flow and credential persistence
  to residual risks, add configuration bypass vectors table,
  remove stale '10/10' qualifier

From PR microsoft#1020 (SOC2 resolved gaps):
- soc2-mapping.md: mark kill switch as resolved (saga handoff
  implemented in kill_switch.py:69-178)
- soc2-mapping.md: mark DeltaEngine verify_chain() as resolved
  (SHA-256 chain verification in delta.py:67-127)
- soc2-mapping.md: add Resolved section to gaps summary, update
  Processing Integrity to 2 of 4 defects (was 3 of 4)

Co-authored-by: Copilot <[email protected]>

* feat(dotnet): add MCP security namespace — completes cross-language MCP parity (microsoft#1021)

* fix(ci): add path filters and concurrency; announce v3.1.0 release

CI optimization:
- Add paths-ignore for docs to 5 code-only workflows
- Add paths filter to Link Check (only run on docs changes)
- Add concurrency groups to 7 heavy workflows
- Docs-only PRs drop from ~14 checks to ~4

README:
- Add v3.1.0 release announcement callout
- Add PyPI version badge
- Update tutorial count to 31



* docs: update SOC2 mapping for resolved kill switch and DeltaEngine gaps

- Kill switch is no longer placeholder: now implements saga handoff
  with handoff_success_count tracking (kill_switch.py:69-178)
- DeltaEngine verify_chain() is no longer a stub: now performs SHA-256
  chain verification (delta.py:67-127)
- Move both from Critical/High gaps to new 'Resolved' section
- Update Processing Integrity coverage (2 of 4 defects, not 3 of 4)
- Update evidence table with current line ranges



* feat(dotnet): add MCP security namespace with scanner, gateway, redactor, and sanitizer

Add AgentGovernance.Mcp namespace implementing full MCP security parity with
TypeScript and Rust SDKs:

- McpSecurityScanner: tool poisoning, typosquatting, hidden instructions,
  rug pull, schema abuse, cross-server attack, and description injection detection
- McpCredentialRedactor: regex-based redaction of API keys, bearer tokens,
  connection strings, and secret assignments
- McpResponseSanitizer: response scanning for prompt injection tags,
  imperative phrasing, credential leakage, and exfiltration URLs
- McpGateway: policy enforcement pipeline with deny/allow lists, payload
  sanitization, rate limiting, and human approval gates

Includes 46 xUnit tests covering all threat categories. Updates
SDK-FEATURE-MATRIX.md to flip .NET MCP Security from — to ✅.



---------

Co-authored-by: Copilot <[email protected]>

* docs: address external critic gaps (microsoft#1025)

* feat(dotnet): add kill switch and lifecycle management to .NET SDK (microsoft#5)

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add 26 xUnit tests
- Update README

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK (microsoft#6)

* feat(dotnet): add kill switch and lifecycle management to .NET SDK

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add comprehensive xUnit tests for both components (26 tests)
- Update .NET SDK README with usage documentation

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK

Add two new modules to the agentmesh Rust crate:

- rings.rs: Four-level execution privilege ring model (Admin/Standard/
  Restricted/Sandboxed) with per-agent assignment and per-ring action
  permissions, ported from the Python hypervisor enforcer.

- lifecycle.rs: Eight-state agent lifecycle manager (Provisioning through
  Decommissioned) with validated state transitions and event history,
  matching the lifecycle model used across other SDK languages.

Both modules include comprehensive unit tests and are re-exported from
the crate root. README updated with API tables and usage examples.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* feat(go): add MCP security, execution rings, and lifecycle management to Go SDK (microsoft#7)

* feat(openshell): add governance skill package and runnable example (microsoft#942)

Co-authored-by: Copilot <[email protected]>

* feat(go): add MCP security, execution rings, and lifecycle management to Go SDK

- mcp.go: MCP security scanner detecting tool poisoning, typosquatting,
  hidden instructions (zero-width chars, homoglyphs), and rug pulls
- rings.go: Execution privilege ring model (Admin/Standard/Restricted/Sandboxed)
  with default-deny access control
- lifecycle.go: Eight-state agent lifecycle manager with validated transitions
- Full test coverage for all three modules
- Updated README with API docs and examples

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* docs: sync audit redaction status and framing with current code (microsoft#8)

* feat(openshell): add governance skill package and runnable example (microsoft#942)

Co-authored-by: Copilot <[email protected]>

* feat(typescript): add MCP security scanner and lifecycle management to TS SDK (microsoft#947)

Co-authored-by: Copilot <[email protected]>

* docs: update SDK feature matrix after parity pass (microsoft#950)

Reflects new capabilities added in PRs microsoft#947 (TS), .NET, Rust, Go:
- TypeScript: MCP security scanner + lifecycle management (was 5/14, now 7/14)
- .NET: Kill switch + lifecycle management (was 8/14, now 10/14)
- Rust: Execution rings + lifecycle management (was 6/14, now 8/14)
- Go: MCP security + rings + lifecycle (was 4/14, now 7/14)

All SDKs now have lifecycle management. Core governance (policy, identity,
trust, audit) + lifecycle = 5 primitives shared across all 5 languages.

Co-authored-by: Copilot <[email protected]>

* docs: add LIMITATIONS.md - honest design boundaries and layered defense (microsoft#953)

Addresses valid external critique of AGT's architectural blind spots:

1. Action vs Intent: AGT governs individual actions, not reasoning or
   action sequences. Documents the compound-action gap explicitly and
   recommends content policies + model safety layers.

2. Audit logs record attempts, not outcomes: Documents that post-action
   state verification is the user's responsibility today, with hooks planned.

3. Performance honesty: README now notes that <0.1ms is policy-eval only;
   distributed mesh adds 5-50ms. Full breakdown in LIMITATIONS.md.

4. Complexity spectrum: Documents the minimal path (just PolicyEvaluator,
   no mesh/crypto) vs full enterprise stack.

5. Vendor independence: Documents zero cloud dependencies in core,
   standard formats for all state, migration path.

6. Recommended layered defense architecture diagram showing AGT as one
   layer alongside model safety, application logic, and infrastructure.

Co-authored-by: Copilot <[email protected]>

* fix(docs): rewrite OpenClaw sidecar deployment with working K8s manifests (microsoft#954)

Closes microsoft#952

Co-authored-by: Copilot <[email protected]>

* feat: reversibility checker, trust calibration guide, escalation tests (microsoft#955)

ReversibilityChecker with 4 levels and compensation plans. Trust score calibration guide with weights, decay, thresholds. 19 tests. Co-authored-by: Copilot <[email protected]>

* feat: AGT Lite — zero-config governance in 3 lines + fix broken quickstart (microsoft#956)

agent_os.lite: govern() factory, sub-ms enforcement, 16 tests. Fixed quickstart that called nonexistent add_rules(). Co-authored-by: Copilot <[email protected]>

* fix: bump all runtime versions to 3.1.0 and fix CI lint/test failures (microsoft#957)

- Bump __version__ in 29 Python __init__.py files from 3.0.2 to 3.1.0
- Bump version= in 6 setup.py files from 3.0.2 to 3.1.0
- Bump meter version strings in _mcp_metrics.py
- Bump 9 package.json files from 3.0.2 to 3.1.0
- Bump .NET csproj Version from 3.0.2 to 3.1.0
- Bump Rust workspace Cargo.toml from 3.0.2 to 3.1.0
- Create Go sdk doc.go with version marker 3.1.0
- Fix ruff W292 (missing newline at EOF) in data_classification.py
- Fix CLI init regex to allow dots in agent names (test_init_special_characters)

Co-authored-by: Copilot <[email protected]>

* fix(openclaw): critical honesty pass — document what works vs what's planned (microsoft#958)

Co-authored-by: Copilot <[email protected]>

* fix(ci): fix Rust crate packaging - use workspace root with -p agentmesh (microsoft#959)

* fix(openclaw): critical honesty pass — document what works vs what's planned

Server (__main__.py):
- Add --host/--port argparse + env var support (was hardcoded 127.0.0.1:8080)

Dockerfile.sidecar:
- Copy modules/ directory (was missing, causing build failure)
- Use 0.0.0.0 for container binding (127.0.0.1 is wrong inside containers)
- Remove phantom port 9091 (no separate metrics listener exists)

openclaw-sidecar.md — full honesty rewrite:
- Add status banner: transparent interception is NOT yet implemented
- Document actual sidecar API endpoints (health, detect/injection, execute, metrics)
- Fix Docker Compose to use Dockerfile.sidecar (was using wrong Dockerfile)
- Remove GOVERNANCE_PROXY claim (OpenClaw doesn't natively read this)
- Replace fictional SLO/Grafana sections with real /api/v1/metrics docs
- Add Roadmap section listing what's planned vs shipped

openshell.md:
- Remove references to non-existent shell scripts
- Fix python -m agentmesh.server to python -m agent_os.server
- Add note that sidecar doesn't transparently intercept (must call API)
- Replace pip install agentmesh-platform with Python skill library usage

Co-authored-by: Copilot <[email protected]>

* fix(ci): fix Rust crate packaging — use workspace root with -p agentmesh

cargo package in a workspace writes .crate files to the workspace root's
target/package/, not the individual crate's directory. The pipeline was
running from the crate subdirectory and couldn't find the output.

Fix: change workingDirectory from packages/agent-mesh/sdks/rust/agentmesh
to packages/agent-mesh/sdks/rust (workspace root) and add -p agentmesh
to all cargo commands to target the specific crate.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* docs(adr): ADR 0005 — Liveness attestation extension for TrustHandshake (microsoft#948)

Proposes liveness attestation as opt-in gate for TrustHandshake. Addresses ghost-agent and ungraceful-handoff gaps from microsoft#772.

Co-authored-by: kevinkaylie <[email protected]>

* blog: MCP Security — Why Your AI Agent Tool Calls Need a Firewall (microsoft#899)

Co-authored-by: aymenhmaidiwastaken <[email protected]>

* feat: add LotL prevention policy for security measures (microsoft#949)

YAML policy template for Living-off-the-Land detection and prevention.

* feat(examples): add ATR community security rules for PolicyEvaluator (microsoft#908)

15 curated ATR detection rules + sync script. Closes microsoft#901.

* fix(docs): correct npm package name and stale version refs across 21 files (microsoft#960)

- Fix @agentmesh/sdk → @microsoft/agentmesh-sdk in 13 markdown files
  (README, QUICKSTART, tutorials, SDK docs, i18n, changelog)
- Fix broken demo path in agent-os README (agent-os/demo.py → demo/maf_governance_demo.py)
- Remove stale v1.0.0 labels from extension status table
- Bump AGT Version refs 3.0.2 → 3.1.0 in case study templates and
  ATF conformance assessment

Co-authored-by: Copilot <[email protected]>

* fix(ci): use ESRP Release for NuGet signing (microsoft#961)

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing (microsoft#962)

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag

Three gaps found during publish verification:

1. PyPI: add agentmesh-marketplace (8th package, was missing from matrix)
2. Rust: build+publish both workspace crates (agentmesh + agentmesh-mcp)
   - Changed from single-crate to workspace build (--workspace)
   - Package loop builds both .crate files
   - Renamed artifact from 'rust-agentmesh' to 'rust-crates'
3. Go: add 'v' prefix to version in doc.go (3.1.0 → v3.1.0)
   - Go module tags require semver with v prefix
   - Pipeline grep expects '// Version: v...' format

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing — 'NuGet' not 'Nuget'

ESRP Release rejected 'Nuget' with: 'The value provided for
ReleaseContentType property is invalid.' ErrorCode 2254.

ESRP content types are case-sensitive. Fix: 'Nuget' -> 'NuGet'.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag (microsoft#963)

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag

Three gaps found during publish verification:

1. PyPI: add agentmesh-marketplace (8th package, was missing from matrix)
2. Rust: build+publish both workspace crates (agentmesh + agentmesh-mcp)
   - Changed from single-crate to workspace build (--workspace)
   - Package loop builds both .crate files
   - Renamed artifact from 'rust-agentmesh' to 'rust-crates'
3. Go: add 'v' prefix to version in doc.go (3.1.0 → v3.1.0)
   - Go module tags require semver with v prefix
   - Pipeline grep expects '// Version: v...' format

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing — 'NuGet' not 'Nuget'

ESRP Release rejected 'Nuget' with: 'The value provided for
ReleaseContentType property is invalid.' ErrorCode 2254.

ESRP content types are case-sensitive. Fix: 'Nuget' -> 'NuGet'.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix(ci): use EsrpCodeSigning + dotnet push for NuGet (microsoft#965)

EsrpRelease@11 does not support NuGet as a contenttype — it's for
PyPI/npm/Maven/crates.io package distribution. NuGet packages must be
signed with EsrpCodeSigning@5 first, then pushed with dotnet nuget push.

New flow:
1. EsrpCodeSigning@5 with NuGetSign + NuGetVerify operations (CP-401405)
2. dotnet nuget push with the signed .nupkg to nuget.org

This matches the standard Microsoft NuGet ESRP signing pattern used by
azure-sdk, dotnet runtime, and other Microsoft OSS projects.

Co-authored-by: Copilot <[email protected]>

* fix(security): upgrade axios to 1.15.0 - CVE-2026-40175, CVE-2025-62718 (microsoft#966)

Critical S360 action items for SFI-ES5.2 1ES Open Source Vulnerabilities.

CVE-2026-40175 (CVSS 9.9): Unrestricted Cloud Metadata Exfiltration
via Header Injection Chain — prototype pollution gadget enables CRLF
injection in HTTP headers, bypassing AWS IMDSv2 session tokens.

CVE-2025-62718: NO_PROXY Bypass via Hostname Normalization — trailing
dots and IPv6 literals skip NO_PROXY matching, enabling SSRF through
attacker-controlled proxy.

Upgraded in 3 packages:
- extensions/copilot: 1.14.0 → 1.15.0
- extensions/cursor:  1.13.5 → 1.15.0
- agent-os-vscode:    1.13.6 → 1.15.0

Co-authored-by: Copilot <[email protected]>

* fix(ci): resolve ESRP_DOMAIN_TENANT_ID cyclical reference (microsoft#967)

The ADO variable ESRP_DOMAIN_TENANT_ID had a cyclical self-reference,
preventing ESRP authentication across ALL publishing stages (PyPI, npm,
NuGet, crates.io).

Fix: Define MICROSOFT_TENANT_ID as a pipeline-level variable with the
well-known Microsoft corporate tenant ID (72f988bf-..., same default
used by ESRP Release action.yml). This is a public value, not a secret.

Also: NuGet publishing requires Microsoft as co-owner of the package
on NuGet.org. See https://aka.ms/Microsoft-NuGet-Compliance

Co-authored-by: Copilot <[email protected]>

* docs: sync audit redaction status and framing with current code

- Update SOC2 mapping to reflect CredentialRedactor now redacts
  credential-like secrets before audit persistence (API keys, tokens,
  JWTs, connection strings, etc.). Remaining gap: non-credential PII
  (email, phone, addresses) not yet redacted in audit entries.
- Replace 'kernel-level enforcement' with 'policy-layer enforcement'
  in README, OWASP compliance, and architecture overview to match the
  existing 'application-level governance' framing in README Security
  section and LIMITATIONS.md.
- Qualify 10/10 OWASP coverage claim in COMPARISON.md with footnote
  clarifying this means mitigation components exist per risk category,
  not full elimination.
- Update owasp-llm-top10-mapping.md LLM06 row for credential redaction.

Addresses doc/code inconsistencies identified in external review.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>

* fix(lint): resolve agent-mesh lint errors in eu_ai_act.py (microsoft#1028)

- Remove unused variable profiling_override (F841)
- Remove f-string without placeholders (F541)
- Fix whitespace in docstrings (W293)

Co-authored-by: Copilot <[email protected]>

* fix(ci): add path filters and concurrency; announce v3.1.0 release (microsoft#1039)

CI optimization:
- Add paths-ignore for docs to 5 code-only workflows
- Add paths filter to Link Check (only run on docs changes)
- Add concurrency groups to 7 heavy workflows
- Docs-only PRs drop from ~14 checks to ~4

README:
- Add v3.1.0 release announcement callout
- Add PyPI version badge
- Update tutorial count to 31

Co-authored-by: Copilot <[email protected]>

* docs: add ADOPTERS.md and make deployment guides multi-cloud (microsoft#1040)

- New ADOPTERS.md following Backstage/Flatcar pattern with Production,
  Evaluation, and Academic tables + instructions for adding your org
- Rewrite docs/deployment/README.md from Azure-only to multi-cloud:
  Azure (AKS, Foundry, Container Apps), AWS (ECS/Fargate), GCP (GKE),
  Docker Compose, self-hosted. Updated architecture diagram to show
  cloud-agnostic deployment patterns.
- Fix broken AWS/GCP links (pointed to non-existent paths)
- README now links to 'Deployment Guides' (multi-cloud) instead of
  'Azure Deployment'
- README Contributing section invites adopters to add their org

Co-authored-by: Copilot <[email protected]>

* feat: add AGT Lite — zero-config governance in 3 lines, fix broken quickstart (microsoft#1044)

Addresses the microsoft#1 developer experience criticism: AGT is too complex to start.

New: agent_os.lite — lightweight governance module
- govern() factory: one line to create a governance gate
- check(action): one line to enforce — raises GovernanceViolation or returns True
- check.is_allowed(action): non-raising bool version
- Allow lists, deny lists, regex patterns, content filtering, rate limiting
- Built-in audit trail and stats
- Sub-millisecond evaluation (0.003ms avg, 1000 evals in <100ms)
- Zero dependencies beyond stdlib (re, time, datetime)
- 16 tests passing

Fix: govern_in_60_seconds.py quickstart
- BROKEN: was calling PolicyEvaluator.add_rules() which does not exist
- FIXED: now uses agent_os.lite.govern() which actually works
- Verified end-to-end: script runs and produces correct output

The lite module is for developers who just want basic governance
without learning PolicyEvaluator, YAML, OPA/Rego, trust mesh, etc.
Upgrade to the full stack when you need it.

Co-authored-by: Copilot <[email protected]>

* feat(ci): enhance weekly security audit with 7 new scan jobs (microsoft#1051)

Add comprehensive security checks based on issues found during
the MSRC-111178 security audit and ongoing post-merge reviews:

- Workflow security regression (MSRC-111178 pull_request_target check)
- Expression injection scan (github.event.* in run: blocks)
- Docker security (root containers, wildcard CORS, hardcoded passwords,
  0.0.0.0 bindings)
- XSS and unsafe DOM (innerHTML, eval, yaml.load, shell=True)
- Action SHA pinning compliance
- Version pinning (pyproject.toml upper bounds, Docker :latest tags,
  license field format)
- Dependency confusion with --strict mode (pyproject.toml + package.json)
- Retention days updated to 180 (EU AI Act Art. 26(6))

Co-authored-by: Copilot <[email protected]>

* fix(ci): fix OpenShell integration CI — spelling, link check, policy validation (microsoft#1057)

- Add OpenShell/NVIDIA terms to cspell dictionary (Landlock, seccomp, syscall, etc.)
- Fix broken link: openclaw-skill -> openshell-skill in docs/integrations/openshell.md
- Fix policy validation: replace starts_with (invalid) with matches + regex

Co-authored-by: Copilot <[email protected]>

* feat: add reversibility checker, trust calibration guide, and escalation/reversibility tests (microsoft#1061)

Addresses critical review feedback:

1. Rollback/reversibility (agent_os.reversibility)
   - ReversibilityChecker: pre-execution assessment of action reversibility
   - 4 levels: fully_reversible, partially_reversible, irreversible, unknown
   - CompensatingAction: structured undo plans for each action type
   - Built-in rules for 12 common actions (write, deploy, delete, email, etc.)
   - block_irreversible mode for strict environments

2. Trust score calibration guide (docs/security/trust-score-calibration.md)
   - Score component weights (compliance 35%, task 25%, behavior 25%, identity 15%)
   - Decay functions with tier floors
   - Initial score assignments by agent origin
   - Threshold recommendations (conservative/moderate/permissive)
   - Anti-gaming measures and operational playbook

3. Tests: 19 passing (10 escalation + 9 reversibility)

Co-authored-by: Copilot <[email protected]>

* feat: deployment runtime (Docker/AKS) and shared trust core types (microsoft#1062)

agent-runtime: Evolve from thin re-export shim to deployment runtime
- DockerDeployer: container deployment with security hardening
  (cap-drop ALL, no-new-privileges, read-only rootfs)
- KubernetesDeployer: AKS pod deployment with governance sidecars
  (runAsNonRoot, seccompProfile, resource limits)
- GovernanceConfig: policy/trust/audit config injected as env vars
- DeploymentTarget protocol for extensibility (ADC, nono, etc.)
- 24 tests (all subprocess calls mocked)

agent-mesh: Extract shared trust types into agentmesh.trust_types
- TrustScore, AgentProfile, TrustRecord, TrustTracker
- Canonical implementations replacing ~800 lines of duplicated code
  across 6+ integration packages
- 25 tests covering clamping, scoring, history, capabilities

Co-authored-by: Copilot <[email protected]>

* feat(dotnet): add kill switch and lifecycle management to .NET SDK (microsoft#1065)

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add comprehensive xUnit tests for both components (26 tests)
- Update .NET SDK README with usage documentation

Co-authored-by: Copilot <[email protected]>

* feat(go): add MCP security, execution rings, and lifecycle management to Go SDK (microsoft#1066)

- mcp.go: MCP security scanner detecting tool poisoning, typosquatting,
  hidden instructions (zero-width chars, homoglyphs), and rug pulls
- rings.go: Execution privilege ring model (Admin/Standard/Restricted/Sandboxed)
  with default-deny access control
- lifecycle.go: Eight-state agent lifecycle manager with validated transitions
- Full test coverage for all three modules
- Updated README with API docs and examples

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK (microsoft#1067)

* feat(dotnet): add kill switch and lifecycle management to .NET SDK

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add comprehensive xUnit tests for both components (26 tests)
- Update .NET SDK README with usage documentation

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK

Add two new modules to the agentmesh Rust crate:

- rings.rs: Four-level execution privilege ring model (Admin/Standard/
  Restricted/Sandboxed) with per-agent assignment and per-ring action
  permissions, ported from the Python hypervisor enforcer.

- lifecycle.rs: Eight-state agent lifecycle manager (Provisioning through
  Decommissioned) with validated state transitions and event history,
  matching the lifecycle model used across other SDK languages.

Both modules include comprehensive unit tests and are re-exported from
the crate root. README updated with API tables and usage examples.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix: align lotl_prevention_policy.yaml with PolicyDocument schema

The policy file used an incompatible schema format (id, parameter,
regex_match, effect) instead of the expected PolicyDocument fields
(name, condition.field, operator, action). This caused the
validate-policies CI check to fail for all PRs.

Changes:
- id → name
- condition.parameter → condition.field
- operator: regex_match → operator: matches
- action at rule level (shell_exec/file_read) → action: deny
- effect: DENY → removed (redundant with action: deny)
- Added version, name, description, disclaimer at top level

Co-authored-by: Copilot <[email protected]>

* fix: resolve .NET ESRP signing issues blocking NuGet publish

GitHub Actions (publish.yml):
- Fix broken if-guards on signing steps: env.ESRP_AAD_ID was set in
  step-level env (invisible to if-expressions). Replace with job-level
  ESRP_CONFIGURED env derived from secrets.
- Add missing ESRP_CERT_IDENTIFIER to signing step env blocks.
- Gate the publish step on ESRP_CONFIGURED so unsigned packages are
  never pushed to NuGet.org under the Microsoft.* prefix.
- Make stub signing steps fail-fast (exit 1) instead of silently
  succeeding, preventing unsigned packages from reaching NuGet push.

ADO Pipeline (esrp-publish.yml):
- Add UseDotNet@2 task to Publish_NuGet stage so dotnet nuget push
  has a guaranteed SDK version on the Windows agent.

Co-authored-by: Copilot <[email protected]>

* fix(docs): fix OpenClaw sidecar demo and add limitations callout (microsoft#1163)

The docker-compose example in openclaw-sidecar.md was illustrative only
and did not work — it referenced a non-existent OpenClaw image and lacked
healthchecks. Users were hitting this and getting confused.

Changes:
- Add working demo at demo/openclaw-governed/ with docker-compose.yaml
  that builds and runs the governance sidecar from source
- Replace the inline docker-compose in the doc with a link to the demo
  plus a clearly-labeled reference template for custom deployments
- Add prominent WARNING callout listing known limitations (no native
  OpenClaw integration, no published images, explicit API required)
- Remove stale orphaned curl snippet after the docker-compose block
- Add healthcheck to docker-compose governance-sidecar service
- Fix OpenClaw image reference from ghcr.io/openclaw/openclaw:latest
  to a placeholder users must replace with their own image

Co-authored-by: Copilot <[email protected]>

* fix(docs): fix OpenClaw sidecar demo and add limitations callout (microsoft#1164)

The docker-compose example in openclaw-sidecar.md was illustrative only
and did not work — it referenced a non-existent OpenClaw image and lacked
healthchecks. Users were hitting this and getting confused.

Changes:
- Add working demo at demo/openclaw-governed/ with docker-compose.yaml
  that builds and runs the governance sidecar from source
- Replace the inline docker-compose in the doc with a link to the demo
  plus a clearly-labeled reference template for custom deployments
- Add prominent WARNING callout listing known limitations (no native
  OpenClaw integration, no published images, explicit API required)
- Remove stale orphaned curl snippet after the docker-compose block
- Add healthcheck to docker-compose governance-sidecar service
- Fix OpenClaw image reference from ghcr.io/openclaw/openclaw:latest
  to a placeholder users must replace with their own image

Co-authored-by: Copilot <[email protected]>

* fix(ci): use PME tenant ID for ESRP cert signing

The ESRP signing cert lives in the PME (Partner Managed Engineering)
tenant (975f013f), not the Microsoft corporate tenant (72f988bf).
Using the wrong tenant ID causes ESRP signing to fail when looking
up the cert.

Co-authored-by: Copilot <[email protected]>

* docs: Add Scaling AI Agents article to COMMUNITY.md (microsoft#857)

Co-authored-by: deepsearch <[email protected]>

* Add runtime evidence mode to agt verify (microsoft#969)

* Track agt verify evidence plan

* Add runtime evidence mode to agt verify

* Add runtime evidence verifier tests

* Add CLI tests for agt verify evidence mode

* Document evidence mode for compliance verification

* Remove local implementation notes

* Document agt verify evidence mode

* Harden evidence path handling in verify

---------

Co-authored-by: T. Smith <[email protected]>

* docs: add Entra Agent ID bridge tutorial with R&R matrix and DID fix

- Add Tutorial 31: Bridging AGT Identity with Microsoft Entra Agent ID
  - Detailed roles & responsibilities between AGT and Entra/Agent365
  - Architecture diagram showing the identity bridge
  - Step-by-step: DID creation, Entra binding, AKS workload identity,
    token validation, lifecycle sync, access verification
  - Known gaps and limitations table
  - Platform independence note (AWS, GCP, Okta patterns)
- Fix DID prefix in .NET MCP gateway tests (did:agentmesh → did:mesh
  for consistency with Python reference implementation and .NET SDK)
- Update tutorials README with Enterprise Identity section

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>
Co-authored-by: Jack Batzner <[email protected]>
Co-authored-by: lawcontinue <[email protected]>
Co-authored-by: deepsearch <[email protected]>
Co-authored-by: ewmh <[email protected]>
Co-authored-by: T. Smith <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>
Co-authored-by: Jack Batzner <[email protected]>
Co-authored-by: lawcontinue <[email protected]>
Co-authored-by: deepsearch <[email protected]>
Co-authored-by: ewmh <[email protected]>
Co-authored-by: T. Smith <[email protected]>
MohammadHaroonAbuomar pushed a commit to MohammadHaroonAbuomar/agt-acs that referenced this pull request Jun 1, 2026
…) + critic gap docs (microsoft#1170)

* feat(dotnet): add MCP security namespace — completes cross-language MCP parity

* fix(ci): add path filters and concurrency; announce v3.1.0 release

CI optimization:
- Add paths-ignore for docs to 5 code-only workflows
- Add paths filter to Link Check (only run on docs changes)
- Add concurrency groups to 7 heavy workflows
- Docs-only PRs drop from ~14 checks to ~4

README:
- Add v3.1.0 release announcement callout
- Add PyPI version badge
- Update tutorial count to 31

Co-authored-by: Copilot <[email protected]>

* docs: update SOC2 mapping for resolved kill switch and DeltaEngine gaps

- Kill switch is no longer placeholder: now implements saga handoff
  with handoff_success_count tracking (kill_switch.py:69-178)
- DeltaEngine verify_chain() is no longer a stub: now performs SHA-256
  chain verification (delta.py:67-127)
- Move both from Critical/High gaps to new 'Resolved' section
- Update Processing Integrity coverage (2 of 4 defects, not 3 of 4)
- Update evidence table with current line ranges

Co-authored-by: Copilot <[email protected]>

* feat(dotnet): add MCP security namespace with scanner, gateway, redactor, and sanitizer

Add AgentGovernance.Mcp namespace implementing full MCP security parity with
TypeScript and Rust SDKs:

- McpSecurityScanner: tool poisoning, typosquatting, hidden instructions,
  rug pull, schema abuse, cross-server attack, and description injection detection
- McpCredentialRedactor: regex-based redaction of API keys, bearer tokens,
  connection strings, and secret assignments
- McpResponseSanitizer: response scanning for prompt injection tags,
  imperative phrasing, credential leakage, and exfiltration URLs
- McpGateway: policy enforcement pipeline with deny/allow lists, payload
  sanitization, rate limiting, and human approval gates

Includes 46 xUnit tests covering all threat categories. Updates
SDK-FEATURE-MATRIX.md to flip .NET MCP Security from — to ✅.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* docs: add Entra Agent ID bridge tutorial (Tutorial 31) (microsoft#10)

* fix(pipeline): run NuGet ESRP signing on Windows agent (microsoft#1022)

The EsrpCodeSigning@5 task constructs internal paths (batchSignPolicyFile,
ciPolicyFile) using Windows-style backslashes. Running on ubuntu-latest
produced garbled mixed paths like '/home/vsts/work/1/s/src\myapp\'.

Changes:
- Add per-job pool override: PublishNuGet runs on windows-latest
- Convert FolderPath and all shell commands to Windows paths
- Replace bash scripts with PowerShell for the Windows agent
- PyPI and npm stages remain on ubuntu-latest (unchanged)
- Add comment to delete orphaned ESRP_DOMAIN_TENANT_ID ADO variable

Co-authored-by: Copilot <[email protected]>

* docs: reland empty-merge changes from PRs microsoft#1017 and microsoft#1020 (microsoft#1125)

PRs microsoft#1017 and microsoft#1020 were squash-merged as empty commits (0 file
changes). This commit re-applies the intended documentation updates.

From PR microsoft#1017 (critic gaps):
- LIMITATIONS.md: add sections 7 (knowledge governance gap), 8
  (credential persistence gap), 9 (initialization bypass risk)
- LIMITATIONS.md: add knowledge governance and enforcement infra
  rows to 'What AGT Is Not' table
- THREAT_MODEL.md: add knowledge flow and credential persistence
  to residual risks, add configuration bypass vectors table,
  remove stale '10/10' qualifier

From PR microsoft#1020 (SOC2 resolved gaps):
- soc2-mapping.md: mark kill switch as resolved (saga handoff
  implemented in kill_switch.py:69-178)
- soc2-mapping.md: mark DeltaEngine verify_chain() as resolved
  (SHA-256 chain verification in delta.py:67-127)
- soc2-mapping.md: add Resolved section to gaps summary, update
  Processing Integrity to 2 of 4 defects (was 3 of 4)

Co-authored-by: Copilot <[email protected]>

* feat(dotnet): add MCP security namespace — completes cross-language MCP parity (microsoft#1021)

* fix(ci): add path filters and concurrency; announce v3.1.0 release

CI optimization:
- Add paths-ignore for docs to 5 code-only workflows
- Add paths filter to Link Check (only run on docs changes)
- Add concurrency groups to 7 heavy workflows
- Docs-only PRs drop from ~14 checks to ~4

README:
- Add v3.1.0 release announcement callout
- Add PyPI version badge
- Update tutorial count to 31



* docs: update SOC2 mapping for resolved kill switch and DeltaEngine gaps

- Kill switch is no longer placeholder: now implements saga handoff
  with handoff_success_count tracking (kill_switch.py:69-178)
- DeltaEngine verify_chain() is no longer a stub: now performs SHA-256
  chain verification (delta.py:67-127)
- Move both from Critical/High gaps to new 'Resolved' section
- Update Processing Integrity coverage (2 of 4 defects, not 3 of 4)
- Update evidence table with current line ranges



* feat(dotnet): add MCP security namespace with scanner, gateway, redactor, and sanitizer

Add AgentGovernance.Mcp namespace implementing full MCP security parity with
TypeScript and Rust SDKs:

- McpSecurityScanner: tool poisoning, typosquatting, hidden instructions,
  rug pull, schema abuse, cross-server attack, and description injection detection
- McpCredentialRedactor: regex-based redaction of API keys, bearer tokens,
  connection strings, and secret assignments
- McpResponseSanitizer: response scanning for prompt injection tags,
  imperative phrasing, credential leakage, and exfiltration URLs
- McpGateway: policy enforcement pipeline with deny/allow lists, payload
  sanitization, rate limiting, and human approval gates

Includes 46 xUnit tests covering all threat categories. Updates
SDK-FEATURE-MATRIX.md to flip .NET MCP Security from — to ✅.



---------

Co-authored-by: Copilot <[email protected]>

* docs: address external critic gaps (microsoft#1025)

* feat(dotnet): add kill switch and lifecycle management to .NET SDK (microsoft#5)

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add 26 xUnit tests
- Update README

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK (microsoft#6)

* feat(dotnet): add kill switch and lifecycle management to .NET SDK

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add comprehensive xUnit tests for both components (26 tests)
- Update .NET SDK README with usage documentation

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK

Add two new modules to the agentmesh Rust crate:

- rings.rs: Four-level execution privilege ring model (Admin/Standard/
  Restricted/Sandboxed) with per-agent assignment and per-ring action
  permissions, ported from the Python hypervisor enforcer.

- lifecycle.rs: Eight-state agent lifecycle manager (Provisioning through
  Decommissioned) with validated state transitions and event history,
  matching the lifecycle model used across other SDK languages.

Both modules include comprehensive unit tests and are re-exported from
the crate root. README updated with API tables and usage examples.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* feat(go): add MCP security, execution rings, and lifecycle management to Go SDK (microsoft#7)

* feat(openshell): add governance skill package and runnable example (microsoft#942)

Co-authored-by: Copilot <[email protected]>

* feat(go): add MCP security, execution rings, and lifecycle management to Go SDK

- mcp.go: MCP security scanner detecting tool poisoning, typosquatting,
  hidden instructions (zero-width chars, homoglyphs), and rug pulls
- rings.go: Execution privilege ring model (Admin/Standard/Restricted/Sandboxed)
  with default-deny access control
- lifecycle.go: Eight-state agent lifecycle manager with validated transitions
- Full test coverage for all three modules
- Updated README with API docs and examples

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* docs: sync audit redaction status and framing with current code (microsoft#8)

* feat(openshell): add governance skill package and runnable example (microsoft#942)

Co-authored-by: Copilot <[email protected]>

* feat(typescript): add MCP security scanner and lifecycle management to TS SDK (microsoft#947)

Co-authored-by: Copilot <[email protected]>

* docs: update SDK feature matrix after parity pass (microsoft#950)

Reflects new capabilities added in PRs microsoft#947 (TS), .NET, Rust, Go:
- TypeScript: MCP security scanner + lifecycle management (was 5/14, now 7/14)
- .NET: Kill switch + lifecycle management (was 8/14, now 10/14)
- Rust: Execution rings + lifecycle management (was 6/14, now 8/14)
- Go: MCP security + rings + lifecycle (was 4/14, now 7/14)

All SDKs now have lifecycle management. Core governance (policy, identity,
trust, audit) + lifecycle = 5 primitives shared across all 5 languages.

Co-authored-by: Copilot <[email protected]>

* docs: add LIMITATIONS.md - honest design boundaries and layered defense (microsoft#953)

Addresses valid external critique of AGT's architectural blind spots:

1. Action vs Intent: AGT governs individual actions, not reasoning or
   action sequences. Documents the compound-action gap explicitly and
   recommends content policies + model safety layers.

2. Audit logs record attempts, not outcomes: Documents that post-action
   state verification is the user's responsibility today, with hooks planned.

3. Performance honesty: README now notes that <0.1ms is policy-eval only;
   distributed mesh adds 5-50ms. Full breakdown in LIMITATIONS.md.

4. Complexity spectrum: Documents the minimal path (just PolicyEvaluator,
   no mesh/crypto) vs full enterprise stack.

5. Vendor independence: Documents zero cloud dependencies in core,
   standard formats for all state, migration path.

6. Recommended layered defense architecture diagram showing AGT as one
   layer alongside model safety, application logic, and infrastructure.

Co-authored-by: Copilot <[email protected]>

* fix(docs): rewrite OpenClaw sidecar deployment with working K8s manifests (microsoft#954)

Closes microsoft#952

Co-authored-by: Copilot <[email protected]>

* feat: reversibility checker, trust calibration guide, escalation tests (microsoft#955)

ReversibilityChecker with 4 levels and compensation plans. Trust score calibration guide with weights, decay, thresholds. 19 tests. Co-authored-by: Copilot <[email protected]>

* feat: AGT Lite — zero-config governance in 3 lines + fix broken quickstart (microsoft#956)

agent_os.lite: govern() factory, sub-ms enforcement, 16 tests. Fixed quickstart that called nonexistent add_rules(). Co-authored-by: Copilot <[email protected]>

* fix: bump all runtime versions to 3.1.0 and fix CI lint/test failures (microsoft#957)

- Bump __version__ in 29 Python __init__.py files from 3.0.2 to 3.1.0
- Bump version= in 6 setup.py files from 3.0.2 to 3.1.0
- Bump meter version strings in _mcp_metrics.py
- Bump 9 package.json files from 3.0.2 to 3.1.0
- Bump .NET csproj Version from 3.0.2 to 3.1.0
- Bump Rust workspace Cargo.toml from 3.0.2 to 3.1.0
- Create Go sdk doc.go with version marker 3.1.0
- Fix ruff W292 (missing newline at EOF) in data_classification.py
- Fix CLI init regex to allow dots in agent names (test_init_special_characters)

Co-authored-by: Copilot <[email protected]>

* fix(openclaw): critical honesty pass — document what works vs what's planned (microsoft#958)

Co-authored-by: Copilot <[email protected]>

* fix(ci): fix Rust crate packaging - use workspace root with -p agentmesh (microsoft#959)

* fix(openclaw): critical honesty pass — document what works vs what's planned

Server (__main__.py):
- Add --host/--port argparse + env var support (was hardcoded 127.0.0.1:8080)

Dockerfile.sidecar:
- Copy modules/ directory (was missing, causing build failure)
- Use 0.0.0.0 for container binding (127.0.0.1 is wrong inside containers)
- Remove phantom port 9091 (no separate metrics listener exists)

openclaw-sidecar.md — full honesty rewrite:
- Add status banner: transparent interception is NOT yet implemented
- Document actual sidecar API endpoints (health, detect/injection, execute, metrics)
- Fix Docker Compose to use Dockerfile.sidecar (was using wrong Dockerfile)
- Remove GOVERNANCE_PROXY claim (OpenClaw doesn't natively read this)
- Replace fictional SLO/Grafana sections with real /api/v1/metrics docs
- Add Roadmap section listing what's planned vs shipped

openshell.md:
- Remove references to non-existent shell scripts
- Fix python -m agentmesh.server to python -m agent_os.server
- Add note that sidecar doesn't transparently intercept (must call API)
- Replace pip install agentmesh-platform with Python skill library usage

Co-authored-by: Copilot <[email protected]>

* fix(ci): fix Rust crate packaging — use workspace root with -p agentmesh

cargo package in a workspace writes .crate files to the workspace root's
target/package/, not the individual crate's directory. The pipeline was
running from the crate subdirectory and couldn't find the output.

Fix: change workingDirectory from packages/agent-mesh/sdks/rust/agentmesh
to packages/agent-mesh/sdks/rust (workspace root) and add -p agentmesh
to all cargo commands to target the specific crate.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* docs(adr): ADR 0005 — Liveness attestation extension for TrustHandshake (microsoft#948)

Proposes liveness attestation as opt-in gate for TrustHandshake. Addresses ghost-agent and ungraceful-handoff gaps from microsoft#772.

Co-authored-by: kevinkaylie <[email protected]>

* blog: MCP Security — Why Your AI Agent Tool Calls Need a Firewall (microsoft#899)

Co-authored-by: aymenhmaidiwastaken <[email protected]>

* feat: add LotL prevention policy for security measures (microsoft#949)

YAML policy template for Living-off-the-Land detection and prevention.

* feat(examples): add ATR community security rules for PolicyEvaluator (microsoft#908)

15 curated ATR detection rules + sync script. Closes microsoft#901.

* fix(docs): correct npm package name and stale version refs across 21 files (microsoft#960)

- Fix @agentmesh/sdk → @microsoft/agentmesh-sdk in 13 markdown files
  (README, QUICKSTART, tutorials, SDK docs, i18n, changelog)
- Fix broken demo path in agent-os README (agent-os/demo.py → demo/maf_governance_demo.py)
- Remove stale v1.0.0 labels from extension status table
- Bump AGT Version refs 3.0.2 → 3.1.0 in case study templates and
  ATF conformance assessment

Co-authored-by: Copilot <[email protected]>

* fix(ci): use ESRP Release for NuGet signing (microsoft#961)

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing (microsoft#962)

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag

Three gaps found during publish verification:

1. PyPI: add agentmesh-marketplace (8th package, was missing from matrix)
2. Rust: build+publish both workspace crates (agentmesh + agentmesh-mcp)
   - Changed from single-crate to workspace build (--workspace)
   - Package loop builds both .crate files
   - Renamed artifact from 'rust-agentmesh' to 'rust-crates'
3. Go: add 'v' prefix to version in doc.go (3.1.0 → v3.1.0)
   - Go module tags require semver with v prefix
   - Pipeline grep expects '// Version: v...' format

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing — 'NuGet' not 'Nuget'

ESRP Release rejected 'Nuget' with: 'The value provided for
ReleaseContentType property is invalid.' ErrorCode 2254.

ESRP content types are case-sensitive. Fix: 'Nuget' -> 'NuGet'.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag (microsoft#963)

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag

Three gaps found during publish verification:

1. PyPI: add agentmesh-marketplace (8th package, was missing from matrix)
2. Rust: build+publish both workspace crates (agentmesh + agentmesh-mcp)
   - Changed from single-crate to workspace build (--workspace)
   - Package loop builds both .crate files
   - Renamed artifact from 'rust-agentmesh' to 'rust-crates'
3. Go: add 'v' prefix to version in doc.go (3.1.0 → v3.1.0)
   - Go module tags require semver with v prefix
   - Pipeline grep expects '// Version: v...' format

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing — 'NuGet' not 'Nuget'

ESRP Release rejected 'Nuget' with: 'The value provided for
ReleaseContentType property is invalid.' ErrorCode 2254.

ESRP content types are case-sensitive. Fix: 'Nuget' -> 'NuGet'.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix(ci): use EsrpCodeSigning + dotnet push for NuGet (microsoft#965)

EsrpRelease@11 does not support NuGet as a contenttype — it's for
PyPI/npm/Maven/crates.io package distribution. NuGet packages must be
signed with EsrpCodeSigning@5 first, then pushed with dotnet nuget push.

New flow:
1. EsrpCodeSigning@5 with NuGetSign + NuGetVerify operations (CP-401405)
2. dotnet nuget push with the signed .nupkg to nuget.org

This matches the standard Microsoft NuGet ESRP signing pattern used by
azure-sdk, dotnet runtime, and other Microsoft OSS projects.

Co-authored-by: Copilot <[email protected]>

* fix(security): upgrade axios to 1.15.0 - CVE-2026-40175, CVE-2025-62718 (microsoft#966)

Critical S360 action items for SFI-ES5.2 1ES Open Source Vulnerabilities.

CVE-2026-40175 (CVSS 9.9): Unrestricted Cloud Metadata Exfiltration
via Header Injection Chain — prototype pollution gadget enables CRLF
injection in HTTP headers, bypassing AWS IMDSv2 session tokens.

CVE-2025-62718: NO_PROXY Bypass via Hostname Normalization — trailing
dots and IPv6 literals skip NO_PROXY matching, enabling SSRF through
attacker-controlled proxy.

Upgraded in 3 packages:
- extensions/copilot: 1.14.0 → 1.15.0
- extensions/cursor:  1.13.5 → 1.15.0
- agent-os-vscode:    1.13.6 → 1.15.0

Co-authored-by: Copilot <[email protected]>

* fix(ci): resolve ESRP_DOMAIN_TENANT_ID cyclical reference (microsoft#967)

The ADO variable ESRP_DOMAIN_TENANT_ID had a cyclical self-reference,
preventing ESRP authentication across ALL publishing stages (PyPI, npm,
NuGet, crates.io).

Fix: Define MICROSOFT_TENANT_ID as a pipeline-level variable with the
well-known Microsoft corporate tenant ID (72f988bf-..., same default
used by ESRP Release action.yml). This is a public value, not a secret.

Also: NuGet publishing requires Microsoft as co-owner of the package
on NuGet.org. See https://aka.ms/Microsoft-NuGet-Compliance

Co-authored-by: Copilot <[email protected]>

* docs: sync audit redaction status and framing with current code

- Update SOC2 mapping to reflect CredentialRedactor now redacts
  credential-like secrets before audit persistence (API keys, tokens,
  JWTs, connection strings, etc.). Remaining gap: non-credential PII
  (email, phone, addresses) not yet redacted in audit entries.
- Replace 'kernel-level enforcement' with 'policy-layer enforcement'
  in README, OWASP compliance, and architecture overview to match the
  existing 'application-level governance' framing in README Security
  section and LIMITATIONS.md.
- Qualify 10/10 OWASP coverage claim in COMPARISON.md with footnote
  clarifying this means mitigation components exist per risk category,
  not full elimination.
- Update owasp-llm-top10-mapping.md LLM06 row for credential redaction.

Addresses doc/code inconsistencies identified in external review.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>

* fix(lint): resolve agent-mesh lint errors in eu_ai_act.py (microsoft#1028)

- Remove unused variable profiling_override (F841)
- Remove f-string without placeholders (F541)
- Fix whitespace in docstrings (W293)

Co-authored-by: Copilot <[email protected]>

* fix(ci): add path filters and concurrency; announce v3.1.0 release (microsoft#1039)

CI optimization:
- Add paths-ignore for docs to 5 code-only workflows
- Add paths filter to Link Check (only run on docs changes)
- Add concurrency groups to 7 heavy workflows
- Docs-only PRs drop from ~14 checks to ~4

README:
- Add v3.1.0 release announcement callout
- Add PyPI version badge
- Update tutorial count to 31

Co-authored-by: Copilot <[email protected]>

* docs: add ADOPTERS.md and make deployment guides multi-cloud (microsoft#1040)

- New ADOPTERS.md following Backstage/Flatcar pattern with Production,
  Evaluation, and Academic tables + instructions for adding your org
- Rewrite docs/deployment/README.md from Azure-only to multi-cloud:
  Azure (AKS, Foundry, Container Apps), AWS (ECS/Fargate), GCP (GKE),
  Docker Compose, self-hosted. Updated architecture diagram to show
  cloud-agnostic deployment patterns.
- Fix broken AWS/GCP links (pointed to non-existent paths)
- README now links to 'Deployment Guides' (multi-cloud) instead of
  'Azure Deployment'
- README Contributing section invites adopters to add their org

Co-authored-by: Copilot <[email protected]>

* feat: add AGT Lite — zero-config governance in 3 lines, fix broken quickstart (microsoft#1044)

Addresses the microsoft#1 developer experience criticism: AGT is too complex to start.

New: agent_os.lite — lightweight governance module
- govern() factory: one line to create a governance gate
- check(action): one line to enforce — raises GovernanceViolation or returns True
- check.is_allowed(action): non-raising bool version
- Allow lists, deny lists, regex patterns, content filtering, rate limiting
- Built-in audit trail and stats
- Sub-millisecond evaluation (0.003ms avg, 1000 evals in <100ms)
- Zero dependencies beyond stdlib (re, time, datetime)
- 16 tests passing

Fix: govern_in_60_seconds.py quickstart
- BROKEN: was calling PolicyEvaluator.add_rules() which does not exist
- FIXED: now uses agent_os.lite.govern() which actually works
- Verified end-to-end: script runs and produces correct output

The lite module is for developers who just want basic governance
without learning PolicyEvaluator, YAML, OPA/Rego, trust mesh, etc.
Upgrade to the full stack when you need it.

Co-authored-by: Copilot <[email protected]>

* feat(ci): enhance weekly security audit with 7 new scan jobs (microsoft#1051)

Add comprehensive security checks based on issues found during
the MSRC-111178 security audit and ongoing post-merge reviews:

- Workflow security regression (MSRC-111178 pull_request_target check)
- Expression injection scan (github.event.* in run: blocks)
- Docker security (root containers, wildcard CORS, hardcoded passwords,
  0.0.0.0 bindings)
- XSS and unsafe DOM (innerHTML, eval, yaml.load, shell=True)
- Action SHA pinning compliance
- Version pinning (pyproject.toml upper bounds, Docker :latest tags,
  license field format)
- Dependency confusion with --strict mode (pyproject.toml + package.json)
- Retention days updated to 180 (EU AI Act Art. 26(6))

Co-authored-by: Copilot <[email protected]>

* fix(ci): fix OpenShell integration CI — spelling, link check, policy validation (microsoft#1057)

- Add OpenShell/NVIDIA terms to cspell dictionary (Landlock, seccomp, syscall, etc.)
- Fix broken link: openclaw-skill -> openshell-skill in docs/integrations/openshell.md
- Fix policy validation: replace starts_with (invalid) with matches + regex

Co-authored-by: Copilot <[email protected]>

* feat: add reversibility checker, trust calibration guide, and escalation/reversibility tests (microsoft#1061)

Addresses critical review feedback:

1. Rollback/reversibility (agent_os.reversibility)
   - ReversibilityChecker: pre-execution assessment of action reversibility
   - 4 levels: fully_reversible, partially_reversible, irreversible, unknown
   - CompensatingAction: structured undo plans for each action type
   - Built-in rules for 12 common actions (write, deploy, delete, email, etc.)
   - block_irreversible mode for strict environments

2. Trust score calibration guide (docs/security/trust-score-calibration.md)
   - Score component weights (compliance 35%, task 25%, behavior 25%, identity 15%)
   - Decay functions with tier floors
   - Initial score assignments by agent origin
   - Threshold recommendations (conservative/moderate/permissive)
   - Anti-gaming measures and operational playbook

3. Tests: 19 passing (10 escalation + 9 reversibility)

Co-authored-by: Copilot <[email protected]>

* feat: deployment runtime (Docker/AKS) and shared trust core types (microsoft#1062)

agent-runtime: Evolve from thin re-export shim to deployment runtime
- DockerDeployer: container deployment with security hardening
  (cap-drop ALL, no-new-privileges, read-only rootfs)
- KubernetesDeployer: AKS pod deployment with governance sidecars
  (runAsNonRoot, seccompProfile, resource limits)
- GovernanceConfig: policy/trust/audit config injected as env vars
- DeploymentTarget protocol for extensibility (ADC, nono, etc.)
- 24 tests (all subprocess calls mocked)

agent-mesh: Extract shared trust types into agentmesh.trust_types
- TrustScore, AgentProfile, TrustRecord, TrustTracker
- Canonical implementations replacing ~800 lines of duplicated code
  across 6+ integration packages
- 25 tests covering clamping, scoring, history, capabilities

Co-authored-by: Copilot <[email protected]>

* feat(dotnet): add kill switch and lifecycle management to .NET SDK (microsoft#1065)

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add comprehensive xUnit tests for both components (26 tests)
- Update .NET SDK README with usage documentation

Co-authored-by: Copilot <[email protected]>

* feat(go): add MCP security, execution rings, and lifecycle management to Go SDK (microsoft#1066)

- mcp.go: MCP security scanner detecting tool poisoning, typosquatting,
  hidden instructions (zero-width chars, homoglyphs), and rug pulls
- rings.go: Execution privilege ring model (Admin/Standard/Restricted/Sandboxed)
  with default-deny access control
- lifecycle.go: Eight-state agent lifecycle manager with validated transitions
- Full test coverage for all three modules
- Updated README with API docs and examples

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK (microsoft#1067)

* feat(dotnet): add kill switch and lifecycle management to .NET SDK

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add comprehensive xUnit tests for both components (26 tests)
- Update .NET SDK README with usage documentation

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK

Add two new modules to the agentmesh Rust crate:

- rings.rs: Four-level execution privilege ring model (Admin/Standard/
  Restricted/Sandboxed) with per-agent assignment and per-ring action
  permissions, ported from the Python hypervisor enforcer.

- lifecycle.rs: Eight-state agent lifecycle manager (Provisioning through
  Decommissioned) with validated state transitions and event history,
  matching the lifecycle model used across other SDK languages.

Both modules include comprehensive unit tests and are re-exported from
the crate root. README updated with API tables and usage examples.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix: align lotl_prevention_policy.yaml with PolicyDocument schema

The policy file used an incompatible schema format (id, parameter,
regex_match, effect) instead of the expected PolicyDocument fields
(name, condition.field, operator, action). This caused the
validate-policies CI check to fail for all PRs.

Changes:
- id → name
- condition.parameter → condition.field
- operator: regex_match → operator: matches
- action at rule level (shell_exec/file_read) → action: deny
- effect: DENY → removed (redundant with action: deny)
- Added version, name, description, disclaimer at top level

Co-authored-by: Copilot <[email protected]>

* fix: resolve .NET ESRP signing issues blocking NuGet publish

GitHub Actions (publish.yml):
- Fix broken if-guards on signing steps: env.ESRP_AAD_ID was set in
  step-level env (invisible to if-expressions). Replace with job-level
  ESRP_CONFIGURED env derived from secrets.
- Add missing ESRP_CERT_IDENTIFIER to signing step env blocks.
- Gate the publish step on ESRP_CONFIGURED so unsigned packages are
  never pushed to NuGet.org under the Microsoft.* prefix.
- Make stub signing steps fail-fast (exit 1) instead of silently
  succeeding, preventing unsigned packages from reaching NuGet push.

ADO Pipeline (esrp-publish.yml):
- Add UseDotNet@2 task to Publish_NuGet stage so dotnet nuget push
  has a guaranteed SDK version on the Windows agent.

Co-authored-by: Copilot <[email protected]>

* fix(docs): fix OpenClaw sidecar demo and add limitations callout (microsoft#1163)

The docker-compose example in openclaw-sidecar.md was illustrative only
and did not work — it referenced a non-existent OpenClaw image and lacked
healthchecks. Users were hitting this and getting confused.

Changes:
- Add working demo at demo/openclaw-governed/ with docker-compose.yaml
  that builds and runs the governance sidecar from source
- Replace the inline docker-compose in the doc with a link to the demo
  plus a clearly-labeled reference template for custom deployments
- Add prominent WARNING callout listing known limitations (no native
  OpenClaw integration, no published images, explicit API required)
- Remove stale orphaned curl snippet after the docker-compose block
- Add healthcheck to docker-compose governance-sidecar service
- Fix OpenClaw image reference from ghcr.io/openclaw/openclaw:latest
  to a placeholder users must replace with their own image

Co-authored-by: Copilot <[email protected]>

* fix(docs): fix OpenClaw sidecar demo and add limitations callout (microsoft#1164)

The docker-compose example in openclaw-sidecar.md was illustrative only
and did not work — it referenced a non-existent OpenClaw image and lacked
healthchecks. Users were hitting this and getting confused.

Changes:
- Add working demo at demo/openclaw-governed/ with docker-compose.yaml
  that builds and runs the governance sidecar from source
- Replace the inline docker-compose in the doc with a link to the demo
  plus a clearly-labeled reference template for custom deployments
- Add prominent WARNING callout listing known limitations (no native
  OpenClaw integration, no published images, explicit API required)
- Remove stale orphaned curl snippet after the docker-compose block
- Add healthcheck to docker-compose governance-sidecar service
- Fix OpenClaw image reference from ghcr.io/openclaw/openclaw:latest
  to a placeholder users must replace with their own image

Co-authored-by: Copilot <[email protected]>

* fix(ci): use PME tenant ID for ESRP cert signing

The ESRP signing cert lives in the PME (Partner Managed Engineering)
tenant (975f013f), not the Microsoft corporate tenant (72f988bf).
Using the wrong tenant ID causes ESRP signing to fail when looking
up the cert.

Co-authored-by: Copilot <[email protected]>

* docs: Add Scaling AI Agents article to COMMUNITY.md (microsoft#857)

Co-authored-by: deepsearch <[email protected]>

* Add runtime evidence mode to agt verify (microsoft#969)

* Track agt verify evidence plan

* Add runtime evidence mode to agt verify

* Add runtime evidence verifier tests

* Add CLI tests for agt verify evidence mode

* Document evidence mode for compliance verification

* Remove local implementation notes

* Document agt verify evidence mode

* Harden evidence path handling in verify

---------

Co-authored-by: T. Smith <[email protected]>

* docs: add Entra Agent ID bridge tutorial with R&R matrix and DID fix

- Add Tutorial 31: Bridging AGT Identity with Microsoft Entra Agent ID
  - Detailed roles & responsibilities between AGT and Entra/Agent365
  - Architecture diagram showing the identity bridge
  - Step-by-step: DID creation, Entra binding, AKS workload identity,
    token validation, lifecycle sync, access verification
  - Known gaps and limitations table
  - Platform independence note (AWS, GCP, Okta patterns)
- Fix DID prefix in .NET MCP gateway tests (did:agentmesh → did:mesh
  for consistency with Python reference implementation and .NET SDK)
- Update tutorials README with Enterprise Identity section

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>
Co-authored-by: Jack Batzner <[email protected]>
Co-authored-by: lawcontinue <[email protected]>
Co-authored-by: deepsearch <[email protected]>
Co-authored-by: ewmh <[email protected]>
Co-authored-by: T. Smith <[email protected]>

* docs: address external critic gaps in limitations and threat model (microsoft#11)

Add three new sections to LIMITATIONS.md addressing gaps identified in
public criticism and external security analysis:

- §10 Physical AI and Embodied Agent Governance: documents that AGT
  governs software agents not physical actuators, with mitigations
- §11 Streaming Data and Real-Time Assurance: documents that AGT
  evaluates per-action not continuously over data streams
- §12 DID Method Inconsistency Across SDKs: documents the did:mesh
  vs did:agentmesh split with migration plan for v4.0

Update THREAT_MODEL.md residual risks to reference all three new
limitation sections.

Co-authored-by: Copilot <[email protected]>

* fix!: standardize DID method to did:agentmesh across all SDKs (microsoft#12)

* fix!: standardize DID method to did:agentmesh across all SDKs

BREAKING CHANGE: All agent DIDs now use the did:agentmesh: prefix.
The legacy did:mesh: prefix used by Python and .NET has been migrated
to match the did:agentmesh: convention already used by TypeScript,
Rust, and Go SDKs.

Changes:
- Python: agent_id.py, delegation.py, entra.py, all integrations
- .NET: AgentIdentity.cs, Jwk.cs, GovernanceKernel.cs, all tests
- Docs: README, tutorials, identity docs, FAQ, compliance docs
- Tests: all test fixtures updated across Python, .NET, TS, VSCode
- Version bump: 3.1.0 → 3.2.0 (.NET, Python agent-mesh, TypeScript)

Migration: replace did:mesh: with did:agentmesh: in your policies,
identity registries, and agent configurations.

Co-authored-by: Copilot <[email protected]>

* docs: add Q11-Q13 to FAQ — AGT scope, Agent 365, and DLP comparison

Adds three new customer Q&As:
- Q11: Is AGT for Foundry agents or any agent type? (any)
- Q12: Relationship between AGT and Agent 365 (different layers)
- Q13: How is AGT different from DLP/communication compliance
  (content vs action governance)

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>
Co-authored-by: Jack Batzner <[email protected]>
Co-authored-by: lawcontinue <[email protected]>
Co-authored-by: deepsearch <[email protected]>
Co-authored-by: ewmh <[email protected]>
Co-authored-by: T. Smith <[email protected]>
MohammadHaroonAbuomar pushed a commit to MohammadHaroonAbuomar/agt-acs that referenced this pull request Jun 1, 2026
…icrosoft#1192)

* feat(dotnet): add MCP security namespace — completes cross-language MCP parity

* fix(ci): add path filters and concurrency; announce v3.1.0 release

CI optimization:
- Add paths-ignore for docs to 5 code-only workflows
- Add paths filter to Link Check (only run on docs changes)
- Add concurrency groups to 7 heavy workflows
- Docs-only PRs drop from ~14 checks to ~4

README:
- Add v3.1.0 release announcement callout
- Add PyPI version badge
- Update tutorial count to 31

Co-authored-by: Copilot <[email protected]>

* docs: update SOC2 mapping for resolved kill switch and DeltaEngine gaps

- Kill switch is no longer placeholder: now implements saga handoff
  with handoff_success_count tracking (kill_switch.py:69-178)
- DeltaEngine verify_chain() is no longer a stub: now performs SHA-256
  chain verification (delta.py:67-127)
- Move both from Critical/High gaps to new 'Resolved' section
- Update Processing Integrity coverage (2 of 4 defects, not 3 of 4)
- Update evidence table with current line ranges

Co-authored-by: Copilot <[email protected]>

* feat(dotnet): add MCP security namespace with scanner, gateway, redactor, and sanitizer

Add AgentGovernance.Mcp namespace implementing full MCP security parity with
TypeScript and Rust SDKs:

- McpSecurityScanner: tool poisoning, typosquatting, hidden instructions,
  rug pull, schema abuse, cross-server attack, and description injection detection
- McpCredentialRedactor: regex-based redaction of API keys, bearer tokens,
  connection strings, and secret assignments
- McpResponseSanitizer: response scanning for prompt injection tags,
  imperative phrasing, credential leakage, and exfiltration URLs
- McpGateway: policy enforcement pipeline with deny/allow lists, payload
  sanitization, rate limiting, and human approval gates

Includes 46 xUnit tests covering all threat categories. Updates
SDK-FEATURE-MATRIX.md to flip .NET MCP Security from — to ✅.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* docs: add Entra Agent ID bridge tutorial (Tutorial 31) (microsoft#10)

* fix(pipeline): run NuGet ESRP signing on Windows agent (microsoft#1022)

The EsrpCodeSigning@5 task constructs internal paths (batchSignPolicyFile,
ciPolicyFile) using Windows-style backslashes. Running on ubuntu-latest
produced garbled mixed paths like '/home/vsts/work/1/s/src\myapp\'.

Changes:
- Add per-job pool override: PublishNuGet runs on windows-latest
- Convert FolderPath and all shell commands to Windows paths
- Replace bash scripts with PowerShell for the Windows agent
- PyPI and npm stages remain on ubuntu-latest (unchanged)
- Add comment to delete orphaned ESRP_DOMAIN_TENANT_ID ADO variable

Co-authored-by: Copilot <[email protected]>

* docs: reland empty-merge changes from PRs microsoft#1017 and microsoft#1020 (microsoft#1125)

PRs microsoft#1017 and microsoft#1020 were squash-merged as empty commits (0 file
changes). This commit re-applies the intended documentation updates.

From PR microsoft#1017 (critic gaps):
- LIMITATIONS.md: add sections 7 (knowledge governance gap), 8
  (credential persistence gap), 9 (initialization bypass risk)
- LIMITATIONS.md: add knowledge governance and enforcement infra
  rows to 'What AGT Is Not' table
- THREAT_MODEL.md: add knowledge flow and credential persistence
  to residual risks, add configuration bypass vectors table,
  remove stale '10/10' qualifier

From PR microsoft#1020 (SOC2 resolved gaps):
- soc2-mapping.md: mark kill switch as resolved (saga handoff
  implemented in kill_switch.py:69-178)
- soc2-mapping.md: mark DeltaEngine verify_chain() as resolved
  (SHA-256 chain verification in delta.py:67-127)
- soc2-mapping.md: add Resolved section to gaps summary, update
  Processing Integrity to 2 of 4 defects (was 3 of 4)

Co-authored-by: Copilot <[email protected]>

* feat(dotnet): add MCP security namespace — completes cross-language MCP parity (microsoft#1021)

* fix(ci): add path filters and concurrency; announce v3.1.0 release

CI optimization:
- Add paths-ignore for docs to 5 code-only workflows
- Add paths filter to Link Check (only run on docs changes)
- Add concurrency groups to 7 heavy workflows
- Docs-only PRs drop from ~14 checks to ~4

README:
- Add v3.1.0 release announcement callout
- Add PyPI version badge
- Update tutorial count to 31



* docs: update SOC2 mapping for resolved kill switch and DeltaEngine gaps

- Kill switch is no longer placeholder: now implements saga handoff
  with handoff_success_count tracking (kill_switch.py:69-178)
- DeltaEngine verify_chain() is no longer a stub: now performs SHA-256
  chain verification (delta.py:67-127)
- Move both from Critical/High gaps to new 'Resolved' section
- Update Processing Integrity coverage (2 of 4 defects, not 3 of 4)
- Update evidence table with current line ranges



* feat(dotnet): add MCP security namespace with scanner, gateway, redactor, and sanitizer

Add AgentGovernance.Mcp namespace implementing full MCP security parity with
TypeScript and Rust SDKs:

- McpSecurityScanner: tool poisoning, typosquatting, hidden instructions,
  rug pull, schema abuse, cross-server attack, and description injection detection
- McpCredentialRedactor: regex-based redaction of API keys, bearer tokens,
  connection strings, and secret assignments
- McpResponseSanitizer: response scanning for prompt injection tags,
  imperative phrasing, credential leakage, and exfiltration URLs
- McpGateway: policy enforcement pipeline with deny/allow lists, payload
  sanitization, rate limiting, and human approval gates

Includes 46 xUnit tests covering all threat categories. Updates
SDK-FEATURE-MATRIX.md to flip .NET MCP Security from — to ✅.



---------

Co-authored-by: Copilot <[email protected]>

* docs: address external critic gaps (microsoft#1025)

* feat(dotnet): add kill switch and lifecycle management to .NET SDK (microsoft#5)

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add 26 xUnit tests
- Update README

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK (microsoft#6)

* feat(dotnet): add kill switch and lifecycle management to .NET SDK

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add comprehensive xUnit tests for both components (26 tests)
- Update .NET SDK README with usage documentation

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK

Add two new modules to the agentmesh Rust crate:

- rings.rs: Four-level execution privilege ring model (Admin/Standard/
  Restricted/Sandboxed) with per-agent assignment and per-ring action
  permissions, ported from the Python hypervisor enforcer.

- lifecycle.rs: Eight-state agent lifecycle manager (Provisioning through
  Decommissioned) with validated state transitions and event history,
  matching the lifecycle model used across other SDK languages.

Both modules include comprehensive unit tests and are re-exported from
the crate root. README updated with API tables and usage examples.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* feat(go): add MCP security, execution rings, and lifecycle management to Go SDK (microsoft#7)

* feat(openshell): add governance skill package and runnable example (microsoft#942)

Co-authored-by: Copilot <[email protected]>

* feat(go): add MCP security, execution rings, and lifecycle management to Go SDK

- mcp.go: MCP security scanner detecting tool poisoning, typosquatting,
  hidden instructions (zero-width chars, homoglyphs), and rug pulls
- rings.go: Execution privilege ring model (Admin/Standard/Restricted/Sandboxed)
  with default-deny access control
- lifecycle.go: Eight-state agent lifecycle manager with validated transitions
- Full test coverage for all three modules
- Updated README with API docs and examples

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* docs: sync audit redaction status and framing with current code (microsoft#8)

* feat(openshell): add governance skill package and runnable example (microsoft#942)

Co-authored-by: Copilot <[email protected]>

* feat(typescript): add MCP security scanner and lifecycle management to TS SDK (microsoft#947)

Co-authored-by: Copilot <[email protected]>

* docs: update SDK feature matrix after parity pass (microsoft#950)

Reflects new capabilities added in PRs microsoft#947 (TS), .NET, Rust, Go:
- TypeScript: MCP security scanner + lifecycle management (was 5/14, now 7/14)
- .NET: Kill switch + lifecycle management (was 8/14, now 10/14)
- Rust: Execution rings + lifecycle management (was 6/14, now 8/14)
- Go: MCP security + rings + lifecycle (was 4/14, now 7/14)

All SDKs now have lifecycle management. Core governance (policy, identity,
trust, audit) + lifecycle = 5 primitives shared across all 5 languages.

Co-authored-by: Copilot <[email protected]>

* docs: add LIMITATIONS.md - honest design boundaries and layered defense (microsoft#953)

Addresses valid external critique of AGT's architectural blind spots:

1. Action vs Intent: AGT governs individual actions, not reasoning or
   action sequences. Documents the compound-action gap explicitly and
   recommends content policies + model safety layers.

2. Audit logs record attempts, not outcomes: Documents that post-action
   state verification is the user's responsibility today, with hooks planned.

3. Performance honesty: README now notes that <0.1ms is policy-eval only;
   distributed mesh adds 5-50ms. Full breakdown in LIMITATIONS.md.

4. Complexity spectrum: Documents the minimal path (just PolicyEvaluator,
   no mesh/crypto) vs full enterprise stack.

5. Vendor independence: Documents zero cloud dependencies in core,
   standard formats for all state, migration path.

6. Recommended layered defense architecture diagram showing AGT as one
   layer alongside model safety, application logic, and infrastructure.

Co-authored-by: Copilot <[email protected]>

* fix(docs): rewrite OpenClaw sidecar deployment with working K8s manifests (microsoft#954)

Closes microsoft#952

Co-authored-by: Copilot <[email protected]>

* feat: reversibility checker, trust calibration guide, escalation tests (microsoft#955)

ReversibilityChecker with 4 levels and compensation plans. Trust score calibration guide with weights, decay, thresholds. 19 tests. Co-authored-by: Copilot <[email protected]>

* feat: AGT Lite — zero-config governance in 3 lines + fix broken quickstart (microsoft#956)

agent_os.lite: govern() factory, sub-ms enforcement, 16 tests. Fixed quickstart that called nonexistent add_rules(). Co-authored-by: Copilot <[email protected]>

* fix: bump all runtime versions to 3.1.0 and fix CI lint/test failures (microsoft#957)

- Bump __version__ in 29 Python __init__.py files from 3.0.2 to 3.1.0
- Bump version= in 6 setup.py files from 3.0.2 to 3.1.0
- Bump meter version strings in _mcp_metrics.py
- Bump 9 package.json files from 3.0.2 to 3.1.0
- Bump .NET csproj Version from 3.0.2 to 3.1.0
- Bump Rust workspace Cargo.toml from 3.0.2 to 3.1.0
- Create Go sdk doc.go with version marker 3.1.0
- Fix ruff W292 (missing newline at EOF) in data_classification.py
- Fix CLI init regex to allow dots in agent names (test_init_special_characters)

Co-authored-by: Copilot <[email protected]>

* fix(openclaw): critical honesty pass — document what works vs what's planned (microsoft#958)

Co-authored-by: Copilot <[email protected]>

* fix(ci): fix Rust crate packaging - use workspace root with -p agentmesh (microsoft#959)

* fix(openclaw): critical honesty pass — document what works vs what's planned

Server (__main__.py):
- Add --host/--port argparse + env var support (was hardcoded 127.0.0.1:8080)

Dockerfile.sidecar:
- Copy modules/ directory (was missing, causing build failure)
- Use 0.0.0.0 for container binding (127.0.0.1 is wrong inside containers)
- Remove phantom port 9091 (no separate metrics listener exists)

openclaw-sidecar.md — full honesty rewrite:
- Add status banner: transparent interception is NOT yet implemented
- Document actual sidecar API endpoints (health, detect/injection, execute, metrics)
- Fix Docker Compose to use Dockerfile.sidecar (was using wrong Dockerfile)
- Remove GOVERNANCE_PROXY claim (OpenClaw doesn't natively read this)
- Replace fictional SLO/Grafana sections with real /api/v1/metrics docs
- Add Roadmap section listing what's planned vs shipped

openshell.md:
- Remove references to non-existent shell scripts
- Fix python -m agentmesh.server to python -m agent_os.server
- Add note that sidecar doesn't transparently intercept (must call API)
- Replace pip install agentmesh-platform with Python skill library usage

Co-authored-by: Copilot <[email protected]>

* fix(ci): fix Rust crate packaging — use workspace root with -p agentmesh

cargo package in a workspace writes .crate files to the workspace root's
target/package/, not the individual crate's directory. The pipeline was
running from the crate subdirectory and couldn't find the output.

Fix: change workingDirectory from packages/agent-mesh/sdks/rust/agentmesh
to packages/agent-mesh/sdks/rust (workspace root) and add -p agentmesh
to all cargo commands to target the specific crate.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* docs(adr): ADR 0005 — Liveness attestation extension for TrustHandshake (microsoft#948)

Proposes liveness attestation as opt-in gate for TrustHandshake. Addresses ghost-agent and ungraceful-handoff gaps from microsoft#772.

Co-authored-by: kevinkaylie <[email protected]>

* blog: MCP Security — Why Your AI Agent Tool Calls Need a Firewall (microsoft#899)

Co-authored-by: aymenhmaidiwastaken <[email protected]>

* feat: add LotL prevention policy for security measures (microsoft#949)

YAML policy template for Living-off-the-Land detection and prevention.

* feat(examples): add ATR community security rules for PolicyEvaluator (microsoft#908)

15 curated ATR detection rules + sync script. Closes microsoft#901.

* fix(docs): correct npm package name and stale version refs across 21 files (microsoft#960)

- Fix @agentmesh/sdk → @microsoft/agentmesh-sdk in 13 markdown files
  (README, QUICKSTART, tutorials, SDK docs, i18n, changelog)
- Fix broken demo path in agent-os README (agent-os/demo.py → demo/maf_governance_demo.py)
- Remove stale v1.0.0 labels from extension status table
- Bump AGT Version refs 3.0.2 → 3.1.0 in case study templates and
  ATF conformance assessment

Co-authored-by: Copilot <[email protected]>

* fix(ci): use ESRP Release for NuGet signing (microsoft#961)

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing (microsoft#962)

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag

Three gaps found during publish verification:

1. PyPI: add agentmesh-marketplace (8th package, was missing from matrix)
2. Rust: build+publish both workspace crates (agentmesh + agentmesh-mcp)
   - Changed from single-crate to workspace build (--workspace)
   - Package loop builds both .crate files
   - Renamed artifact from 'rust-agentmesh' to 'rust-crates'
3. Go: add 'v' prefix to version in doc.go (3.1.0 → v3.1.0)
   - Go module tags require semver with v prefix
   - Pipeline grep expects '// Version: v...' format

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing — 'NuGet' not 'Nuget'

ESRP Release rejected 'Nuget' with: 'The value provided for
ReleaseContentType property is invalid.' ErrorCode 2254.

ESRP content types are case-sensitive. Fix: 'Nuget' -> 'NuGet'.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag (microsoft#963)

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag

Three gaps found during publish verification:

1. PyPI: add agentmesh-marketplace (8th package, was missing from matrix)
2. Rust: build+publish both workspace crates (agentmesh + agentmesh-mcp)
   - Changed from single-crate to workspace build (--workspace)
   - Package loop builds both .crate files
   - Renamed artifact from 'rust-agentmesh' to 'rust-crates'
3. Go: add 'v' prefix to version in doc.go (3.1.0 → v3.1.0)
   - Go module tags require semver with v prefix
   - Pipeline grep expects '// Version: v...' format

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing — 'NuGet' not 'Nuget'

ESRP Release rejected 'Nuget' with: 'The value provided for
ReleaseContentType property is invalid.' ErrorCode 2254.

ESRP content types are case-sensitive. Fix: 'Nuget' -> 'NuGet'.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix(ci): use EsrpCodeSigning + dotnet push for NuGet (microsoft#965)

EsrpRelease@11 does not support NuGet as a contenttype — it's for
PyPI/npm/Maven/crates.io package distribution. NuGet packages must be
signed with EsrpCodeSigning@5 first, then pushed with dotnet nuget push.

New flow:
1. EsrpCodeSigning@5 with NuGetSign + NuGetVerify operations (CP-401405)
2. dotnet nuget push with the signed .nupkg to nuget.org

This matches the standard Microsoft NuGet ESRP signing pattern used by
azure-sdk, dotnet runtime, and other Microsoft OSS projects.

Co-authored-by: Copilot <[email protected]>

* fix(security): upgrade axios to 1.15.0 - CVE-2026-40175, CVE-2025-62718 (microsoft#966)

Critical S360 action items for SFI-ES5.2 1ES Open Source Vulnerabilities.

CVE-2026-40175 (CVSS 9.9): Unrestricted Cloud Metadata Exfiltration
via Header Injection Chain — prototype pollution gadget enables CRLF
injection in HTTP headers, bypassing AWS IMDSv2 session tokens.

CVE-2025-62718: NO_PROXY Bypass via Hostname Normalization — trailing
dots and IPv6 literals skip NO_PROXY matching, enabling SSRF through
attacker-controlled proxy.

Upgraded in 3 packages:
- extensions/copilot: 1.14.0 → 1.15.0
- extensions/cursor:  1.13.5 → 1.15.0
- agent-os-vscode:    1.13.6 → 1.15.0

Co-authored-by: Copilot <[email protected]>

* fix(ci): resolve ESRP_DOMAIN_TENANT_ID cyclical reference (microsoft#967)

The ADO variable ESRP_DOMAIN_TENANT_ID had a cyclical self-reference,
preventing ESRP authentication across ALL publishing stages (PyPI, npm,
NuGet, crates.io).

Fix: Define MICROSOFT_TENANT_ID as a pipeline-level variable with the
well-known Microsoft corporate tenant ID (72f988bf-..., same default
used by ESRP Release action.yml). This is a public value, not a secret.

Also: NuGet publishing requires Microsoft as co-owner of the package
on NuGet.org. See https://aka.ms/Microsoft-NuGet-Compliance

Co-authored-by: Copilot <[email protected]>

* docs: sync audit redaction status and framing with current code

- Update SOC2 mapping to reflect CredentialRedactor now redacts
  credential-like secrets before audit persistence (API keys, tokens,
  JWTs, connection strings, etc.). Remaining gap: non-credential PII
  (email, phone, addresses) not yet redacted in audit entries.
- Replace 'kernel-level enforcement' with 'policy-layer enforcement'
  in README, OWASP compliance, and architecture overview to match the
  existing 'application-level governance' framing in README Security
  section and LIMITATIONS.md.
- Qualify 10/10 OWASP coverage claim in COMPARISON.md with footnote
  clarifying this means mitigation components exist per risk category,
  not full elimination.
- Update owasp-llm-top10-mapping.md LLM06 row for credential redaction.

Addresses doc/code inconsistencies identified in external review.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>

* fix(lint): resolve agent-mesh lint errors in eu_ai_act.py (microsoft#1028)

- Remove unused variable profiling_override (F841)
- Remove f-string without placeholders (F541)
- Fix whitespace in docstrings (W293)

Co-authored-by: Copilot <[email protected]>

* fix(ci): add path filters and concurrency; announce v3.1.0 release (microsoft#1039)

CI optimization:
- Add paths-ignore for docs to 5 code-only workflows
- Add paths filter to Link Check (only run on docs changes)
- Add concurrency groups to 7 heavy workflows
- Docs-only PRs drop from ~14 checks to ~4

README:
- Add v3.1.0 release announcement callout
- Add PyPI version badge
- Update tutorial count to 31

Co-authored-by: Copilot <[email protected]>

* docs: add ADOPTERS.md and make deployment guides multi-cloud (microsoft#1040)

- New ADOPTERS.md following Backstage/Flatcar pattern with Production,
  Evaluation, and Academic tables + instructions for adding your org
- Rewrite docs/deployment/README.md from Azure-only to multi-cloud:
  Azure (AKS, Foundry, Container Apps), AWS (ECS/Fargate), GCP (GKE),
  Docker Compose, self-hosted. Updated architecture diagram to show
  cloud-agnostic deployment patterns.
- Fix broken AWS/GCP links (pointed to non-existent paths)
- README now links to 'Deployment Guides' (multi-cloud) instead of
  'Azure Deployment'
- README Contributing section invites adopters to add their org

Co-authored-by: Copilot <[email protected]>

* feat: add AGT Lite — zero-config governance in 3 lines, fix broken quickstart (microsoft#1044)

Addresses the microsoft#1 developer experience criticism: AGT is too complex to start.

New: agent_os.lite — lightweight governance module
- govern() factory: one line to create a governance gate
- check(action): one line to enforce — raises GovernanceViolation or returns True
- check.is_allowed(action): non-raising bool version
- Allow lists, deny lists, regex patterns, content filtering, rate limiting
- Built-in audit trail and stats
- Sub-millisecond evaluation (0.003ms avg, 1000 evals in <100ms)
- Zero dependencies beyond stdlib (re, time, datetime)
- 16 tests passing

Fix: govern_in_60_seconds.py quickstart
- BROKEN: was calling PolicyEvaluator.add_rules() which does not exist
- FIXED: now uses agent_os.lite.govern() which actually works
- Verified end-to-end: script runs and produces correct output

The lite module is for developers who just want basic governance
without learning PolicyEvaluator, YAML, OPA/Rego, trust mesh, etc.
Upgrade to the full stack when you need it.

Co-authored-by: Copilot <[email protected]>

* feat(ci): enhance weekly security audit with 7 new scan jobs (microsoft#1051)

Add comprehensive security checks based on issues found during
the MSRC-111178 security audit and ongoing post-merge reviews:

- Workflow security regression (MSRC-111178 pull_request_target check)
- Expression injection scan (github.event.* in run: blocks)
- Docker security (root containers, wildcard CORS, hardcoded passwords,
  0.0.0.0 bindings)
- XSS and unsafe DOM (innerHTML, eval, yaml.load, shell=True)
- Action SHA pinning compliance
- Version pinning (pyproject.toml upper bounds, Docker :latest tags,
  license field format)
- Dependency confusion with --strict mode (pyproject.toml + package.json)
- Retention days updated to 180 (EU AI Act Art. 26(6))

Co-authored-by: Copilot <[email protected]>

* fix(ci): fix OpenShell integration CI — spelling, link check, policy validation (microsoft#1057)

- Add OpenShell/NVIDIA terms to cspell dictionary (Landlock, seccomp, syscall, etc.)
- Fix broken link: openclaw-skill -> openshell-skill in docs/integrations/openshell.md
- Fix policy validation: replace starts_with (invalid) with matches + regex

Co-authored-by: Copilot <[email protected]>

* feat: add reversibility checker, trust calibration guide, and escalation/reversibility tests (microsoft#1061)

Addresses critical review feedback:

1. Rollback/reversibility (agent_os.reversibility)
   - ReversibilityChecker: pre-execution assessment of action reversibility
   - 4 levels: fully_reversible, partially_reversible, irreversible, unknown
   - CompensatingAction: structured undo plans for each action type
   - Built-in rules for 12 common actions (write, deploy, delete, email, etc.)
   - block_irreversible mode for strict environments

2. Trust score calibration guide (docs/security/trust-score-calibration.md)
   - Score component weights (compliance 35%, task 25%, behavior 25%, identity 15%)
   - Decay functions with tier floors
   - Initial score assignments by agent origin
   - Threshold recommendations (conservative/moderate/permissive)
   - Anti-gaming measures and operational playbook

3. Tests: 19 passing (10 escalation + 9 reversibility)

Co-authored-by: Copilot <[email protected]>

* feat: deployment runtime (Docker/AKS) and shared trust core types (microsoft#1062)

agent-runtime: Evolve from thin re-export shim to deployment runtime
- DockerDeployer: container deployment with security hardening
  (cap-drop ALL, no-new-privileges, read-only rootfs)
- KubernetesDeployer: AKS pod deployment with governance sidecars
  (runAsNonRoot, seccompProfile, resource limits)
- GovernanceConfig: policy/trust/audit config injected as env vars
- DeploymentTarget protocol for extensibility (ADC, nono, etc.)
- 24 tests (all subprocess calls mocked)

agent-mesh: Extract shared trust types into agentmesh.trust_types
- TrustScore, AgentProfile, TrustRecord, TrustTracker
- Canonical implementations replacing ~800 lines of duplicated code
  across 6+ integration packages
- 25 tests covering clamping, scoring, history, capabilities

Co-authored-by: Copilot <[email protected]>

* feat(dotnet): add kill switch and lifecycle management to .NET SDK (microsoft#1065)

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add comprehensive xUnit tests for both components (26 tests)
- Update .NET SDK README with usage documentation

Co-authored-by: Copilot <[email protected]>

* feat(go): add MCP security, execution rings, and lifecycle management to Go SDK (microsoft#1066)

- mcp.go: MCP security scanner detecting tool poisoning, typosquatting,
  hidden instructions (zero-width chars, homoglyphs), and rug pulls
- rings.go: Execution privilege ring model (Admin/Standard/Restricted/Sandboxed)
  with default-deny access control
- lifecycle.go: Eight-state agent lifecycle manager with validated transitions
- Full test coverage for all three modules
- Updated README with API docs and examples

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK (microsoft#1067)

* feat(dotnet): add kill switch and lifecycle management to .NET SDK

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add comprehensive xUnit tests for both components (26 tests)
- Update .NET SDK README with usage documentation

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK

Add two new modules to the agentmesh Rust crate:

- rings.rs: Four-level execution privilege ring model (Admin/Standard/
  Restricted/Sandboxed) with per-agent assignment and per-ring action
  permissions, ported from the Python hypervisor enforcer.

- lifecycle.rs: Eight-state agent lifecycle manager (Provisioning through
  Decommissioned) with validated state transitions and event history,
  matching the lifecycle model used across other SDK languages.

Both modules include comprehensive unit tests and are re-exported from
the crate root. README updated with API tables and usage examples.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix: align lotl_prevention_policy.yaml with PolicyDocument schema

The policy file used an incompatible schema format (id, parameter,
regex_match, effect) instead of the expected PolicyDocument fields
(name, condition.field, operator, action). This caused the
validate-policies CI check to fail for all PRs.

Changes:
- id → name
- condition.parameter → condition.field
- operator: regex_match → operator: matches
- action at rule level (shell_exec/file_read) → action: deny
- effect: DENY → removed (redundant with action: deny)
- Added version, name, description, disclaimer at top level

Co-authored-by: Copilot <[email protected]>

* fix: resolve .NET ESRP signing issues blocking NuGet publish

GitHub Actions (publish.yml):
- Fix broken if-guards on signing steps: env.ESRP_AAD_ID was set in
  step-level env (invisible to if-expressions). Replace with job-level
  ESRP_CONFIGURED env derived from secrets.
- Add missing ESRP_CERT_IDENTIFIER to signing step env blocks.
- Gate the publish step on ESRP_CONFIGURED so unsigned packages are
  never pushed to NuGet.org under the Microsoft.* prefix.
- Make stub signing steps fail-fast (exit 1) instead of silently
  succeeding, preventing unsigned packages from reaching NuGet push.

ADO Pipeline (esrp-publish.yml):
- Add UseDotNet@2 task to Publish_NuGet stage so dotnet nuget push
  has a guaranteed SDK version on the Windows agent.

Co-authored-by: Copilot <[email protected]>

* fix(docs): fix OpenClaw sidecar demo and add limitations callout (microsoft#1163)

The docker-compose example in openclaw-sidecar.md was illustrative only
and did not work — it referenced a non-existent OpenClaw image and lacked
healthchecks. Users were hitting this and getting confused.

Changes:
- Add working demo at demo/openclaw-governed/ with docker-compose.yaml
  that builds and runs the governance sidecar from source
- Replace the inline docker-compose in the doc with a link to the demo
  plus a clearly-labeled reference template for custom deployments
- Add prominent WARNING callout listing known limitations (no native
  OpenClaw integration, no published images, explicit API required)
- Remove stale orphaned curl snippet after the docker-compose block
- Add healthcheck to docker-compose governance-sidecar service
- Fix OpenClaw image reference from ghcr.io/openclaw/openclaw:latest
  to a placeholder users must replace with their own image

Co-authored-by: Copilot <[email protected]>

* fix(docs): fix OpenClaw sidecar demo and add limitations callout (microsoft#1164)

The docker-compose example in openclaw-sidecar.md was illustrative only
and did not work — it referenced a non-existent OpenClaw image and lacked
healthchecks. Users were hitting this and getting confused.

Changes:
- Add working demo at demo/openclaw-governed/ with docker-compose.yaml
  that builds and runs the governance sidecar from source
- Replace the inline docker-compose in the doc with a link to the demo
  plus a clearly-labeled reference template for custom deployments
- Add prominent WARNING callout listing known limitations (no native
  OpenClaw integration, no published images, explicit API required)
- Remove stale orphaned curl snippet after the docker-compose block
- Add healthcheck to docker-compose governance-sidecar service
- Fix OpenClaw image reference from ghcr.io/openclaw/openclaw:latest
  to a placeholder users must replace with their own image

Co-authored-by: Copilot <[email protected]>

* fix(ci): use PME tenant ID for ESRP cert signing

The ESRP signing cert lives in the PME (Partner Managed Engineering)
tenant (975f013f), not the Microsoft corporate tenant (72f988bf).
Using the wrong tenant ID causes ESRP signing to fail when looking
up the cert.

Co-authored-by: Copilot <[email protected]>

* docs: Add Scaling AI Agents article to COMMUNITY.md (microsoft#857)

Co-authored-by: deepsearch <[email protected]>

* Add runtime evidence mode to agt verify (microsoft#969)

* Track agt verify evidence plan

* Add runtime evidence mode to agt verify

* Add runtime evidence verifier tests

* Add CLI tests for agt verify evidence mode

* Document evidence mode for compliance verification

* Remove local implementation notes

* Document agt verify evidence mode

* Harden evidence path handling in verify

---------

Co-authored-by: T. Smith <[email protected]>

* docs: add Entra Agent ID bridge tutorial with R&R matrix and DID fix

- Add Tutorial 31: Bridging AGT Identity with Microsoft Entra Agent ID
  - Detailed roles & responsibilities between AGT and Entra/Agent365
  - Architecture diagram showing the identity bridge
  - Step-by-step: DID creation, Entra binding, AKS workload identity,
    token validation, lifecycle sync, access verification
  - Known gaps and limitations table
  - Platform independence note (AWS, GCP, Okta patterns)
- Fix DID prefix in .NET MCP gateway tests (did:agentmesh → did:mesh
  for consistency with Python reference implementation and .NET SDK)
- Update tutorials README with Enterprise Identity section

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>
Co-authored-by: Jack Batzner <[email protected]>
Co-authored-by: lawcontinue <[email protected]>
Co-authored-by: deepsearch <[email protected]>
Co-authored-by: ewmh <[email protected]>
Co-authored-by: T. Smith <[email protected]>

* docs: address external critic gaps in limitations and threat model (microsoft#11)

Add three new sections to LIMITATIONS.md addressing gaps identified in
public criticism and external security analysis:

- §10 Physical AI and Embodied Agent Governance: documents that AGT
  governs software agents not physical actuators, with mitigations
- §11 Streaming Data and Real-Time Assurance: documents that AGT
  evaluates per-action not continuously over data streams
- §12 DID Method Inconsistency Across SDKs: documents the did:mesh
  vs did:agentmesh split with migration plan for v4.0

Update THREAT_MODEL.md residual risks to reference all three new
limitation sections.

Co-authored-by: Copilot <[email protected]>

* fix!: standardize DID method to did:agentmesh across all SDKs (microsoft#12)

* fix!: standardize DID method to did:agentmesh across all SDKs

BREAKING CHANGE: All agent DIDs now use the did:agentmesh: prefix.
The legacy did:mesh: prefix used by Python and .NET has been migrated
to match the did:agentmesh: convention already used by TypeScript,
Rust, and Go SDKs.

Changes:
- Python: agent_id.py, delegation.py, entra.py, all integrations
- .NET: AgentIdentity.cs, Jwk.cs, GovernanceKernel.cs, all tests
- Docs: README, tutorials, identity docs, FAQ, compliance docs
- Tests: all test fixtures updated across Python, .NET, TS, VSCode
- Version bump: 3.1.0 → 3.2.0 (.NET, Python agent-mesh, TypeScript)

Migration: replace did:mesh: with did:agentmesh: in your policies,
identity registries, and agent configurations.

Co-authored-by: Copilot <[email protected]>

* docs: add Q11-Q13 to FAQ — AGT scope, Agent 365, and DLP comparison

Adds three new customer Q&As:
- Q11: Is AGT for Foundry agents or any agent type? (any)
- Q12: Relationship between AGT and Agent 365 (different layers)
- Q13: How is AGT different from DLP/communication compliance
  (content vs action governance)

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix(ci): fix lint errors and remove pi-mono breaking dep scan

Two CI failures on main:

1. lint (agent-compliance): W293/W292 trailing whitespace and missing
   newlines in agt.py and verify.py — fixed.

2. dependency-scan: pi-mono-agentmesh references unregistered npm
   packages — removed entire pi-mono integration that was merged
   from draft PR microsoft#970 without proper review.

Co-authored-by: Copilot <[email protected]>

* feat: add AgentMesh component container images and GHCR publishing

Add FastAPI server entrypoints for all four AgentMesh components:
- trust-engine (port 8443): Agent identity verification, IATP handshakes
- policy-server (port 8444): Governance policy evaluation from YAML/JSON
- audit-collector (port 8445): Merkle-chained audit logging with persistence
- api-gateway (port 8446): Reverse proxy with per-agent rate limiting

Infrastructure:
- Single Dockerfile with COMPONENT build arg (non-root, tini, health checks)
- GitHub Actions workflow for GHCR publishing (multi-arch amd64/arm64)
- Helm chart updated to reference ghcr.io/microsoft/agentmesh/* images
- 28 integration tests covering all server endpoints

Resolves the missing container images that blocked full AgentMesh cluster
deployment (images were referenced in Helm chart but never built).

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>
Co-authored-by: Jack Batzner <[email protected]>
Co-authored-by: lawcontinue <[email protected]>
Co-authored-by: deepsearch <[email protected]>
Co-authored-by: ewmh <[email protected]>
Co-authored-by: T. Smith <[email protected]>
MohammadHaroonAbuomar pushed a commit to MohammadHaroonAbuomar/agt-acs that referenced this pull request Jun 1, 2026
* feat(dotnet): add MCP security namespace — completes cross-language MCP parity

* fix(ci): add path filters and concurrency; announce v3.1.0 release

CI optimization:
- Add paths-ignore for docs to 5 code-only workflows
- Add paths filter to Link Check (only run on docs changes)
- Add concurrency groups to 7 heavy workflows
- Docs-only PRs drop from ~14 checks to ~4

README:
- Add v3.1.0 release announcement callout
- Add PyPI version badge
- Update tutorial count to 31

Co-authored-by: Copilot <[email protected]>

* docs: update SOC2 mapping for resolved kill switch and DeltaEngine gaps

- Kill switch is no longer placeholder: now implements saga handoff
  with handoff_success_count tracking (kill_switch.py:69-178)
- DeltaEngine verify_chain() is no longer a stub: now performs SHA-256
  chain verification (delta.py:67-127)
- Move both from Critical/High gaps to new 'Resolved' section
- Update Processing Integrity coverage (2 of 4 defects, not 3 of 4)
- Update evidence table with current line ranges

Co-authored-by: Copilot <[email protected]>

* feat(dotnet): add MCP security namespace with scanner, gateway, redactor, and sanitizer

Add AgentGovernance.Mcp namespace implementing full MCP security parity with
TypeScript and Rust SDKs:

- McpSecurityScanner: tool poisoning, typosquatting, hidden instructions,
  rug pull, schema abuse, cross-server attack, and description injection detection
- McpCredentialRedactor: regex-based redaction of API keys, bearer tokens,
  connection strings, and secret assignments
- McpResponseSanitizer: response scanning for prompt injection tags,
  imperative phrasing, credential leakage, and exfiltration URLs
- McpGateway: policy enforcement pipeline with deny/allow lists, payload
  sanitization, rate limiting, and human approval gates

Includes 46 xUnit tests covering all threat categories. Updates
SDK-FEATURE-MATRIX.md to flip .NET MCP Security from — to ✅.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* docs: add Entra Agent ID bridge tutorial (Tutorial 31) (microsoft#10)

* fix(pipeline): run NuGet ESRP signing on Windows agent (microsoft#1022)

The EsrpCodeSigning@5 task constructs internal paths (batchSignPolicyFile,
ciPolicyFile) using Windows-style backslashes. Running on ubuntu-latest
produced garbled mixed paths like '/home/vsts/work/1/s/src\myapp\'.

Changes:
- Add per-job pool override: PublishNuGet runs on windows-latest
- Convert FolderPath and all shell commands to Windows paths
- Replace bash scripts with PowerShell for the Windows agent
- PyPI and npm stages remain on ubuntu-latest (unchanged)
- Add comment to delete orphaned ESRP_DOMAIN_TENANT_ID ADO variable

Co-authored-by: Copilot <[email protected]>

* docs: reland empty-merge changes from PRs microsoft#1017 and microsoft#1020 (microsoft#1125)

PRs microsoft#1017 and microsoft#1020 were squash-merged as empty commits (0 file
changes). This commit re-applies the intended documentation updates.

From PR microsoft#1017 (critic gaps):
- LIMITATIONS.md: add sections 7 (knowledge governance gap), 8
  (credential persistence gap), 9 (initialization bypass risk)
- LIMITATIONS.md: add knowledge governance and enforcement infra
  rows to 'What AGT Is Not' table
- THREAT_MODEL.md: add knowledge flow and credential persistence
  to residual risks, add configuration bypass vectors table,
  remove stale '10/10' qualifier

From PR microsoft#1020 (SOC2 resolved gaps):
- soc2-mapping.md: mark kill switch as resolved (saga handoff
  implemented in kill_switch.py:69-178)
- soc2-mapping.md: mark DeltaEngine verify_chain() as resolved
  (SHA-256 chain verification in delta.py:67-127)
- soc2-mapping.md: add Resolved section to gaps summary, update
  Processing Integrity to 2 of 4 defects (was 3 of 4)

Co-authored-by: Copilot <[email protected]>

* feat(dotnet): add MCP security namespace — completes cross-language MCP parity (microsoft#1021)

* fix(ci): add path filters and concurrency; announce v3.1.0 release

CI optimization:
- Add paths-ignore for docs to 5 code-only workflows
- Add paths filter to Link Check (only run on docs changes)
- Add concurrency groups to 7 heavy workflows
- Docs-only PRs drop from ~14 checks to ~4

README:
- Add v3.1.0 release announcement callout
- Add PyPI version badge
- Update tutorial count to 31



* docs: update SOC2 mapping for resolved kill switch and DeltaEngine gaps

- Kill switch is no longer placeholder: now implements saga handoff
  with handoff_success_count tracking (kill_switch.py:69-178)
- DeltaEngine verify_chain() is no longer a stub: now performs SHA-256
  chain verification (delta.py:67-127)
- Move both from Critical/High gaps to new 'Resolved' section
- Update Processing Integrity coverage (2 of 4 defects, not 3 of 4)
- Update evidence table with current line ranges



* feat(dotnet): add MCP security namespace with scanner, gateway, redactor, and sanitizer

Add AgentGovernance.Mcp namespace implementing full MCP security parity with
TypeScript and Rust SDKs:

- McpSecurityScanner: tool poisoning, typosquatting, hidden instructions,
  rug pull, schema abuse, cross-server attack, and description injection detection
- McpCredentialRedactor: regex-based redaction of API keys, bearer tokens,
  connection strings, and secret assignments
- McpResponseSanitizer: response scanning for prompt injection tags,
  imperative phrasing, credential leakage, and exfiltration URLs
- McpGateway: policy enforcement pipeline with deny/allow lists, payload
  sanitization, rate limiting, and human approval gates

Includes 46 xUnit tests covering all threat categories. Updates
SDK-FEATURE-MATRIX.md to flip .NET MCP Security from — to ✅.



---------

Co-authored-by: Copilot <[email protected]>

* docs: address external critic gaps (microsoft#1025)

* feat(dotnet): add kill switch and lifecycle management to .NET SDK (microsoft#5)

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add 26 xUnit tests
- Update README

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK (microsoft#6)

* feat(dotnet): add kill switch and lifecycle management to .NET SDK

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add comprehensive xUnit tests for both components (26 tests)
- Update .NET SDK README with usage documentation

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK

Add two new modules to the agentmesh Rust crate:

- rings.rs: Four-level execution privilege ring model (Admin/Standard/
  Restricted/Sandboxed) with per-agent assignment and per-ring action
  permissions, ported from the Python hypervisor enforcer.

- lifecycle.rs: Eight-state agent lifecycle manager (Provisioning through
  Decommissioned) with validated state transitions and event history,
  matching the lifecycle model used across other SDK languages.

Both modules include comprehensive unit tests and are re-exported from
the crate root. README updated with API tables and usage examples.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* feat(go): add MCP security, execution rings, and lifecycle management to Go SDK (microsoft#7)

* feat(openshell): add governance skill package and runnable example (microsoft#942)

Co-authored-by: Copilot <[email protected]>

* feat(go): add MCP security, execution rings, and lifecycle management to Go SDK

- mcp.go: MCP security scanner detecting tool poisoning, typosquatting,
  hidden instructions (zero-width chars, homoglyphs), and rug pulls
- rings.go: Execution privilege ring model (Admin/Standard/Restricted/Sandboxed)
  with default-deny access control
- lifecycle.go: Eight-state agent lifecycle manager with validated transitions
- Full test coverage for all three modules
- Updated README with API docs and examples

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* docs: sync audit redaction status and framing with current code (microsoft#8)

* feat(openshell): add governance skill package and runnable example (microsoft#942)

Co-authored-by: Copilot <[email protected]>

* feat(typescript): add MCP security scanner and lifecycle management to TS SDK (microsoft#947)

Co-authored-by: Copilot <[email protected]>

* docs: update SDK feature matrix after parity pass (microsoft#950)

Reflects new capabilities added in PRs microsoft#947 (TS), .NET, Rust, Go:
- TypeScript: MCP security scanner + lifecycle management (was 5/14, now 7/14)
- .NET: Kill switch + lifecycle management (was 8/14, now 10/14)
- Rust: Execution rings + lifecycle management (was 6/14, now 8/14)
- Go: MCP security + rings + lifecycle (was 4/14, now 7/14)

All SDKs now have lifecycle management. Core governance (policy, identity,
trust, audit) + lifecycle = 5 primitives shared across all 5 languages.

Co-authored-by: Copilot <[email protected]>

* docs: add LIMITATIONS.md - honest design boundaries and layered defense (microsoft#953)

Addresses valid external critique of AGT's architectural blind spots:

1. Action vs Intent: AGT governs individual actions, not reasoning or
   action sequences. Documents the compound-action gap explicitly and
   recommends content policies + model safety layers.

2. Audit logs record attempts, not outcomes: Documents that post-action
   state verification is the user's responsibility today, with hooks planned.

3. Performance honesty: README now notes that <0.1ms is policy-eval only;
   distributed mesh adds 5-50ms. Full breakdown in LIMITATIONS.md.

4. Complexity spectrum: Documents the minimal path (just PolicyEvaluator,
   no mesh/crypto) vs full enterprise stack.

5. Vendor independence: Documents zero cloud dependencies in core,
   standard formats for all state, migration path.

6. Recommended layered defense architecture diagram showing AGT as one
   layer alongside model safety, application logic, and infrastructure.

Co-authored-by: Copilot <[email protected]>

* fix(docs): rewrite OpenClaw sidecar deployment with working K8s manifests (microsoft#954)

Closes microsoft#952

Co-authored-by: Copilot <[email protected]>

* feat: reversibility checker, trust calibration guide, escalation tests (microsoft#955)

ReversibilityChecker with 4 levels and compensation plans. Trust score calibration guide with weights, decay, thresholds. 19 tests. Co-authored-by: Copilot <[email protected]>

* feat: AGT Lite — zero-config governance in 3 lines + fix broken quickstart (microsoft#956)

agent_os.lite: govern() factory, sub-ms enforcement, 16 tests. Fixed quickstart that called nonexistent add_rules(). Co-authored-by: Copilot <[email protected]>

* fix: bump all runtime versions to 3.1.0 and fix CI lint/test failures (microsoft#957)

- Bump __version__ in 29 Python __init__.py files from 3.0.2 to 3.1.0
- Bump version= in 6 setup.py files from 3.0.2 to 3.1.0
- Bump meter version strings in _mcp_metrics.py
- Bump 9 package.json files from 3.0.2 to 3.1.0
- Bump .NET csproj Version from 3.0.2 to 3.1.0
- Bump Rust workspace Cargo.toml from 3.0.2 to 3.1.0
- Create Go sdk doc.go with version marker 3.1.0
- Fix ruff W292 (missing newline at EOF) in data_classification.py
- Fix CLI init regex to allow dots in agent names (test_init_special_characters)

Co-authored-by: Copilot <[email protected]>

* fix(openclaw): critical honesty pass — document what works vs what's planned (microsoft#958)

Co-authored-by: Copilot <[email protected]>

* fix(ci): fix Rust crate packaging - use workspace root with -p agentmesh (microsoft#959)

* fix(openclaw): critical honesty pass — document what works vs what's planned

Server (__main__.py):
- Add --host/--port argparse + env var support (was hardcoded 127.0.0.1:8080)

Dockerfile.sidecar:
- Copy modules/ directory (was missing, causing build failure)
- Use 0.0.0.0 for container binding (127.0.0.1 is wrong inside containers)
- Remove phantom port 9091 (no separate metrics listener exists)

openclaw-sidecar.md — full honesty rewrite:
- Add status banner: transparent interception is NOT yet implemented
- Document actual sidecar API endpoints (health, detect/injection, execute, metrics)
- Fix Docker Compose to use Dockerfile.sidecar (was using wrong Dockerfile)
- Remove GOVERNANCE_PROXY claim (OpenClaw doesn't natively read this)
- Replace fictional SLO/Grafana sections with real /api/v1/metrics docs
- Add Roadmap section listing what's planned vs shipped

openshell.md:
- Remove references to non-existent shell scripts
- Fix python -m agentmesh.server to python -m agent_os.server
- Add note that sidecar doesn't transparently intercept (must call API)
- Replace pip install agentmesh-platform with Python skill library usage

Co-authored-by: Copilot <[email protected]>

* fix(ci): fix Rust crate packaging — use workspace root with -p agentmesh

cargo package in a workspace writes .crate files to the workspace root's
target/package/, not the individual crate's directory. The pipeline was
running from the crate subdirectory and couldn't find the output.

Fix: change workingDirectory from packages/agent-mesh/sdks/rust/agentmesh
to packages/agent-mesh/sdks/rust (workspace root) and add -p agentmesh
to all cargo commands to target the specific crate.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* docs(adr): ADR 0005 — Liveness attestation extension for TrustHandshake (microsoft#948)

Proposes liveness attestation as opt-in gate for TrustHandshake. Addresses ghost-agent and ungraceful-handoff gaps from microsoft#772.

Co-authored-by: kevinkaylie <[email protected]>

* blog: MCP Security — Why Your AI Agent Tool Calls Need a Firewall (microsoft#899)

Co-authored-by: aymenhmaidiwastaken <[email protected]>

* feat: add LotL prevention policy for security measures (microsoft#949)

YAML policy template for Living-off-the-Land detection and prevention.

* feat(examples): add ATR community security rules for PolicyEvaluator (microsoft#908)

15 curated ATR detection rules + sync script. Closes microsoft#901.

* fix(docs): correct npm package name and stale version refs across 21 files (microsoft#960)

- Fix @agentmesh/sdk → @microsoft/agentmesh-sdk in 13 markdown files
  (README, QUICKSTART, tutorials, SDK docs, i18n, changelog)
- Fix broken demo path in agent-os README (agent-os/demo.py → demo/maf_governance_demo.py)
- Remove stale v1.0.0 labels from extension status table
- Bump AGT Version refs 3.0.2 → 3.1.0 in case study templates and
  ATF conformance assessment

Co-authored-by: Copilot <[email protected]>

* fix(ci): use ESRP Release for NuGet signing (microsoft#961)

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing (microsoft#962)

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag

Three gaps found during publish verification:

1. PyPI: add agentmesh-marketplace (8th package, was missing from matrix)
2. Rust: build+publish both workspace crates (agentmesh + agentmesh-mcp)
   - Changed from single-crate to workspace build (--workspace)
   - Package loop builds both .crate files
   - Renamed artifact from 'rust-agentmesh' to 'rust-crates'
3. Go: add 'v' prefix to version in doc.go (3.1.0 → v3.1.0)
   - Go module tags require semver with v prefix
   - Pipeline grep expects '// Version: v...' format

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing — 'NuGet' not 'Nuget'

ESRP Release rejected 'Nuget' with: 'The value provided for
ReleaseContentType property is invalid.' ErrorCode 2254.

ESRP content types are case-sensitive. Fix: 'Nuget' -> 'NuGet'.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag (microsoft#963)

* fix(ci): add missing packages to ESRP pipeline and fix Go version tag

Three gaps found during publish verification:

1. PyPI: add agentmesh-marketplace (8th package, was missing from matrix)
2. Rust: build+publish both workspace crates (agentmesh + agentmesh-mcp)
   - Changed from single-crate to workspace build (--workspace)
   - Package loop builds both .crate files
   - Renamed artifact from 'rust-agentmesh' to 'rust-crates'
3. Go: add 'v' prefix to version in doc.go (3.1.0 → v3.1.0)
   - Go module tags require semver with v prefix
   - Pipeline grep expects '// Version: v...' format

Co-authored-by: Copilot <[email protected]>

* fix(ci): correct ESRP NuGet contenttype casing — 'NuGet' not 'Nuget'

ESRP Release rejected 'Nuget' with: 'The value provided for
ReleaseContentType property is invalid.' ErrorCode 2254.

ESRP content types are case-sensitive. Fix: 'Nuget' -> 'NuGet'.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix(ci): use EsrpCodeSigning + dotnet push for NuGet (microsoft#965)

EsrpRelease@11 does not support NuGet as a contenttype — it's for
PyPI/npm/Maven/crates.io package distribution. NuGet packages must be
signed with EsrpCodeSigning@5 first, then pushed with dotnet nuget push.

New flow:
1. EsrpCodeSigning@5 with NuGetSign + NuGetVerify operations (CP-401405)
2. dotnet nuget push with the signed .nupkg to nuget.org

This matches the standard Microsoft NuGet ESRP signing pattern used by
azure-sdk, dotnet runtime, and other Microsoft OSS projects.

Co-authored-by: Copilot <[email protected]>

* fix(security): upgrade axios to 1.15.0 - CVE-2026-40175, CVE-2025-62718 (microsoft#966)

Critical S360 action items for SFI-ES5.2 1ES Open Source Vulnerabilities.

CVE-2026-40175 (CVSS 9.9): Unrestricted Cloud Metadata Exfiltration
via Header Injection Chain — prototype pollution gadget enables CRLF
injection in HTTP headers, bypassing AWS IMDSv2 session tokens.

CVE-2025-62718: NO_PROXY Bypass via Hostname Normalization — trailing
dots and IPv6 literals skip NO_PROXY matching, enabling SSRF through
attacker-controlled proxy.

Upgraded in 3 packages:
- extensions/copilot: 1.14.0 → 1.15.0
- extensions/cursor:  1.13.5 → 1.15.0
- agent-os-vscode:    1.13.6 → 1.15.0

Co-authored-by: Copilot <[email protected]>

* fix(ci): resolve ESRP_DOMAIN_TENANT_ID cyclical reference (microsoft#967)

The ADO variable ESRP_DOMAIN_TENANT_ID had a cyclical self-reference,
preventing ESRP authentication across ALL publishing stages (PyPI, npm,
NuGet, crates.io).

Fix: Define MICROSOFT_TENANT_ID as a pipeline-level variable with the
well-known Microsoft corporate tenant ID (72f988bf-..., same default
used by ESRP Release action.yml). This is a public value, not a secret.

Also: NuGet publishing requires Microsoft as co-owner of the package
on NuGet.org. See https://aka.ms/Microsoft-NuGet-Compliance

Co-authored-by: Copilot <[email protected]>

* docs: sync audit redaction status and framing with current code

- Update SOC2 mapping to reflect CredentialRedactor now redacts
  credential-like secrets before audit persistence (API keys, tokens,
  JWTs, connection strings, etc.). Remaining gap: non-credential PII
  (email, phone, addresses) not yet redacted in audit entries.
- Replace 'kernel-level enforcement' with 'policy-layer enforcement'
  in README, OWASP compliance, and architecture overview to match the
  existing 'application-level governance' framing in README Security
  section and LIMITATIONS.md.
- Qualify 10/10 OWASP coverage claim in COMPARISON.md with footnote
  clarifying this means mitigation components exist per risk category,
  not full elimination.
- Update owasp-llm-top10-mapping.md LLM06 row for credential redaction.

Addresses doc/code inconsistencies identified in external review.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>

* fix(lint): resolve agent-mesh lint errors in eu_ai_act.py (microsoft#1028)

- Remove unused variable profiling_override (F841)
- Remove f-string without placeholders (F541)
- Fix whitespace in docstrings (W293)

Co-authored-by: Copilot <[email protected]>

* fix(ci): add path filters and concurrency; announce v3.1.0 release (microsoft#1039)

CI optimization:
- Add paths-ignore for docs to 5 code-only workflows
- Add paths filter to Link Check (only run on docs changes)
- Add concurrency groups to 7 heavy workflows
- Docs-only PRs drop from ~14 checks to ~4

README:
- Add v3.1.0 release announcement callout
- Add PyPI version badge
- Update tutorial count to 31

Co-authored-by: Copilot <[email protected]>

* docs: add ADOPTERS.md and make deployment guides multi-cloud (microsoft#1040)

- New ADOPTERS.md following Backstage/Flatcar pattern with Production,
  Evaluation, and Academic tables + instructions for adding your org
- Rewrite docs/deployment/README.md from Azure-only to multi-cloud:
  Azure (AKS, Foundry, Container Apps), AWS (ECS/Fargate), GCP (GKE),
  Docker Compose, self-hosted. Updated architecture diagram to show
  cloud-agnostic deployment patterns.
- Fix broken AWS/GCP links (pointed to non-existent paths)
- README now links to 'Deployment Guides' (multi-cloud) instead of
  'Azure Deployment'
- README Contributing section invites adopters to add their org

Co-authored-by: Copilot <[email protected]>

* feat: add AGT Lite — zero-config governance in 3 lines, fix broken quickstart (microsoft#1044)

Addresses the microsoft#1 developer experience criticism: AGT is too complex to start.

New: agent_os.lite — lightweight governance module
- govern() factory: one line to create a governance gate
- check(action): one line to enforce — raises GovernanceViolation or returns True
- check.is_allowed(action): non-raising bool version
- Allow lists, deny lists, regex patterns, content filtering, rate limiting
- Built-in audit trail and stats
- Sub-millisecond evaluation (0.003ms avg, 1000 evals in <100ms)
- Zero dependencies beyond stdlib (re, time, datetime)
- 16 tests passing

Fix: govern_in_60_seconds.py quickstart
- BROKEN: was calling PolicyEvaluator.add_rules() which does not exist
- FIXED: now uses agent_os.lite.govern() which actually works
- Verified end-to-end: script runs and produces correct output

The lite module is for developers who just want basic governance
without learning PolicyEvaluator, YAML, OPA/Rego, trust mesh, etc.
Upgrade to the full stack when you need it.

Co-authored-by: Copilot <[email protected]>

* feat(ci): enhance weekly security audit with 7 new scan jobs (microsoft#1051)

Add comprehensive security checks based on issues found during
the MSRC-111178 security audit and ongoing post-merge reviews:

- Workflow security regression (MSRC-111178 pull_request_target check)
- Expression injection scan (github.event.* in run: blocks)
- Docker security (root containers, wildcard CORS, hardcoded passwords,
  0.0.0.0 bindings)
- XSS and unsafe DOM (innerHTML, eval, yaml.load, shell=True)
- Action SHA pinning compliance
- Version pinning (pyproject.toml upper bounds, Docker :latest tags,
  license field format)
- Dependency confusion with --strict mode (pyproject.toml + package.json)
- Retention days updated to 180 (EU AI Act Art. 26(6))

Co-authored-by: Copilot <[email protected]>

* fix(ci): fix OpenShell integration CI — spelling, link check, policy validation (microsoft#1057)

- Add OpenShell/NVIDIA terms to cspell dictionary (Landlock, seccomp, syscall, etc.)
- Fix broken link: openclaw-skill -> openshell-skill in docs/integrations/openshell.md
- Fix policy validation: replace starts_with (invalid) with matches + regex

Co-authored-by: Copilot <[email protected]>

* feat: add reversibility checker, trust calibration guide, and escalation/reversibility tests (microsoft#1061)

Addresses critical review feedback:

1. Rollback/reversibility (agent_os.reversibility)
   - ReversibilityChecker: pre-execution assessment of action reversibility
   - 4 levels: fully_reversible, partially_reversible, irreversible, unknown
   - CompensatingAction: structured undo plans for each action type
   - Built-in rules for 12 common actions (write, deploy, delete, email, etc.)
   - block_irreversible mode for strict environments

2. Trust score calibration guide (docs/security/trust-score-calibration.md)
   - Score component weights (compliance 35%, task 25%, behavior 25%, identity 15%)
   - Decay functions with tier floors
   - Initial score assignments by agent origin
   - Threshold recommendations (conservative/moderate/permissive)
   - Anti-gaming measures and operational playbook

3. Tests: 19 passing (10 escalation + 9 reversibility)

Co-authored-by: Copilot <[email protected]>

* feat: deployment runtime (Docker/AKS) and shared trust core types (microsoft#1062)

agent-runtime: Evolve from thin re-export shim to deployment runtime
- DockerDeployer: container deployment with security hardening
  (cap-drop ALL, no-new-privileges, read-only rootfs)
- KubernetesDeployer: AKS pod deployment with governance sidecars
  (runAsNonRoot, seccompProfile, resource limits)
- GovernanceConfig: policy/trust/audit config injected as env vars
- DeploymentTarget protocol for extensibility (ADC, nono, etc.)
- 24 tests (all subprocess calls mocked)

agent-mesh: Extract shared trust types into agentmesh.trust_types
- TrustScore, AgentProfile, TrustRecord, TrustTracker
- Canonical implementations replacing ~800 lines of duplicated code
  across 6+ integration packages
- 25 tests covering clamping, scoring, history, capabilities

Co-authored-by: Copilot <[email protected]>

* feat(dotnet): add kill switch and lifecycle management to .NET SDK (microsoft#1065)

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add comprehensive xUnit tests for both components (26 tests)
- Update .NET SDK README with usage documentation

Co-authored-by: Copilot <[email protected]>

* feat(go): add MCP security, execution rings, and lifecycle management to Go SDK (microsoft#1066)

- mcp.go: MCP security scanner detecting tool poisoning, typosquatting,
  hidden instructions (zero-width chars, homoglyphs), and rug pulls
- rings.go: Execution privilege ring model (Admin/Standard/Restricted/Sandboxed)
  with default-deny access control
- lifecycle.go: Eight-state agent lifecycle manager with validated transitions
- Full test coverage for all three modules
- Updated README with API docs and examples

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK (microsoft#1067)

* feat(dotnet): add kill switch and lifecycle management to .NET SDK

- Add KillSwitch with arm/disarm, event history, and subscriber notifications
- Add LifecycleManager with 8-state machine and validated transitions
- Add comprehensive xUnit tests for both components (26 tests)
- Update .NET SDK README with usage documentation

Co-authored-by: Copilot <[email protected]>

* feat(rust): add execution rings and lifecycle management to Rust SDK

Add two new modules to the agentmesh Rust crate:

- rings.rs: Four-level execution privilege ring model (Admin/Standard/
  Restricted/Sandboxed) with per-agent assignment and per-ring action
  permissions, ported from the Python hypervisor enforcer.

- lifecycle.rs: Eight-state agent lifecycle manager (Provisioning through
  Decommissioned) with validated state transitions and event history,
  matching the lifecycle model used across other SDK languages.

Both modules include comprehensive unit tests and are re-exported from
the crate root. README updated with API tables and usage examples.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix: align lotl_prevention_policy.yaml with PolicyDocument schema

The policy file used an incompatible schema format (id, parameter,
regex_match, effect) instead of the expected PolicyDocument fields
(name, condition.field, operator, action). This caused the
validate-policies CI check to fail for all PRs.

Changes:
- id → name
- condition.parameter → condition.field
- operator: regex_match → operator: matches
- action at rule level (shell_exec/file_read) → action: deny
- effect: DENY → removed (redundant with action: deny)
- Added version, name, description, disclaimer at top level

Co-authored-by: Copilot <[email protected]>

* fix: resolve .NET ESRP signing issues blocking NuGet publish

GitHub Actions (publish.yml):
- Fix broken if-guards on signing steps: env.ESRP_AAD_ID was set in
  step-level env (invisible to if-expressions). Replace with job-level
  ESRP_CONFIGURED env derived from secrets.
- Add missing ESRP_CERT_IDENTIFIER to signing step env blocks.
- Gate the publish step on ESRP_CONFIGURED so unsigned packages are
  never pushed to NuGet.org under the Microsoft.* prefix.
- Make stub signing steps fail-fast (exit 1) instead of silently
  succeeding, preventing unsigned packages from reaching NuGet push.

ADO Pipeline (esrp-publish.yml):
- Add UseDotNet@2 task to Publish_NuGet stage so dotnet nuget push
  has a guaranteed SDK version on the Windows agent.

Co-authored-by: Copilot <[email protected]>

* fix(docs): fix OpenClaw sidecar demo and add limitations callout (microsoft#1163)

The docker-compose example in openclaw-sidecar.md was illustrative only
and did not work — it referenced a non-existent OpenClaw image and lacked
healthchecks. Users were hitting this and getting confused.

Changes:
- Add working demo at demo/openclaw-governed/ with docker-compose.yaml
  that builds and runs the governance sidecar from source
- Replace the inline docker-compose in the doc with a link to the demo
  plus a clearly-labeled reference template for custom deployments
- Add prominent WARNING callout listing known limitations (no native
  OpenClaw integration, no published images, explicit API required)
- Remove stale orphaned curl snippet after the docker-compose block
- Add healthcheck to docker-compose governance-sidecar service
- Fix OpenClaw image reference from ghcr.io/openclaw/openclaw:latest
  to a placeholder users must replace with their own image

Co-authored-by: Copilot <[email protected]>

* fix(docs): fix OpenClaw sidecar demo and add limitations callout (microsoft#1164)

The docker-compose example in openclaw-sidecar.md was illustrative only
and did not work — it referenced a non-existent OpenClaw image and lacked
healthchecks. Users were hitting this and getting confused.

Changes:
- Add working demo at demo/openclaw-governed/ with docker-compose.yaml
  that builds and runs the governance sidecar from source
- Replace the inline docker-compose in the doc with a link to the demo
  plus a clearly-labeled reference template for custom deployments
- Add prominent WARNING callout listing known limitations (no native
  OpenClaw integration, no published images, explicit API required)
- Remove stale orphaned curl snippet after the docker-compose block
- Add healthcheck to docker-compose governance-sidecar service
- Fix OpenClaw image reference from ghcr.io/openclaw/openclaw:latest
  to a placeholder users must replace with their own image

Co-authored-by: Copilot <[email protected]>

* fix(ci): use PME tenant ID for ESRP cert signing

The ESRP signing cert lives in the PME (Partner Managed Engineering)
tenant (975f013f), not the Microsoft corporate tenant (72f988bf).
Using the wrong tenant ID causes ESRP signing to fail when looking
up the cert.

Co-authored-by: Copilot <[email protected]>

* docs: Add Scaling AI Agents article to COMMUNITY.md (microsoft#857)

Co-authored-by: deepsearch <[email protected]>

* Add runtime evidence mode to agt verify (microsoft#969)

* Track agt verify evidence plan

* Add runtime evidence mode to agt verify

* Add runtime evidence verifier tests

* Add CLI tests for agt verify evidence mode

* Document evidence mode for compliance verification

* Remove local implementation notes

* Document agt verify evidence mode

* Harden evidence path handling in verify

---------

Co-authored-by: T. Smith <[email protected]>

* docs: add Entra Agent ID bridge tutorial with R&R matrix and DID fix

- Add Tutorial 31: Bridging AGT Identity with Microsoft Entra Agent ID
  - Detailed roles & responsibilities between AGT and Entra/Agent365
  - Architecture diagram showing the identity bridge
  - Step-by-step: DID creation, Entra binding, AKS workload identity,
    token validation, lifecycle sync, access verification
  - Known gaps and limitations table
  - Platform independence note (AWS, GCP, Okta patterns)
- Fix DID prefix in .NET MCP gateway tests (did:agentmesh → did:mesh
  for consistency with Python reference implementation and .NET SDK)
- Update tutorials README with Enterprise Identity section

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>
Co-authored-by: Jack Batzner <[email protected]>
Co-authored-by: lawcontinue <[email protected]>
Co-authored-by: deepsearch <[email protected]>
Co-authored-by: ewmh <[email protected]>
Co-authored-by: T. Smith <[email protected]>

* docs: address external critic gaps in limitations and threat model (microsoft#11)

Add three new sections to LIMITATIONS.md addressing gaps identified in
public criticism and external security analysis:

- §10 Physical AI and Embodied Agent Governance: documents that AGT
  governs software agents not physical actuators, with mitigations
- §11 Streaming Data and Real-Time Assurance: documents that AGT
  evaluates per-action not continuously over data streams
- §12 DID Method Inconsistency Across SDKs: documents the did:mesh
  vs did:agentmesh split with migration plan for v4.0

Update THREAT_MODEL.md residual risks to reference all three new
limitation sections.

Co-authored-by: Copilot <[email protected]>

* fix!: standardize DID method to did:agentmesh across all SDKs (microsoft#12)

* fix!: standardize DID method to did:agentmesh across all SDKs

BREAKING CHANGE: All agent DIDs now use the did:agentmesh: prefix.
The legacy did:mesh: prefix used by Python and .NET has been migrated
to match the did:agentmesh: convention already used by TypeScript,
Rust, and Go SDKs.

Changes:
- Python: agent_id.py, delegation.py, entra.py, all integrations
- .NET: AgentIdentity.cs, Jwk.cs, GovernanceKernel.cs, all tests
- Docs: README, tutorials, identity docs, FAQ, compliance docs
- Tests: all test fixtures updated across Python, .NET, TS, VSCode
- Version bump: 3.1.0 → 3.2.0 (.NET, Python agent-mesh, TypeScript)

Migration: replace did:mesh: with did:agentmesh: in your policies,
identity registries, and agent configurations.

Co-authored-by: Copilot <[email protected]>

* docs: add Q11-Q13 to FAQ — AGT scope, Agent 365, and DLP comparison

Adds three new customer Q&As:
- Q11: Is AGT for Foundry agents or any agent type? (any)
- Q12: Relationship between AGT and Agent 365 (different layers)
- Q13: How is AGT different from DLP/communication compliance
  (content vs action governance)

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

* fix(security): address all 14 open code scanning alerts (microsoft#13)

* fix: address 6 Dependabot security vulnerabilities

- python-multipart 0.0.22 → 0.0.26 (DoS via large preamble/epilogue)
- pytest 8.4.1 → 9.0.3 (tmpdir handling vulnerability)
- langchain-core 1.2.11 → 1.2.28 (SSRF, path traversal, f-string validation)
- langchain-core >=0.2.0,<1.0 → >=1.2.28 in langchain-agentmesh pyproject.toml
- tsup 8.0.0 → 8.5.1 (DOM clobbering vulnerability)
- rand 0.8.5: dismissed microsoft#176 as inaccurate (vuln affects rand::rng() 0.9.x API only)

Fixes Dependabot alerts: microsoft#177, microsoft#175, microsoft#166, microsoft#164, microsoft#157, microsoft#156
Dismissed: microsoft#176 (not applicable to rand 0.8.x)

Co-authored-by: Copilot <[email protected]>

* fix(security): address all 14 open code scanning alerts

Scorecard HIGH:
- publish-containers.yml: scope packages:write to job level (microsoft#316)

Scorecard MEDIUM (pinned dependencies):
- docs.yml: pin 4 GitHub Actions by SHA hash (microsoft#311-314)
- docs.yml: use requirements.txt for pip install (microsoft#315)
- agent-mesh Dockerfile: pin python:3.11-slim by SHA (microsoft#317,microsoft#318)
- agent-os Dockerfile.sidecar: pin python:3.14-slim by SHA (microsoft#295,microsoft#296)
- dashboard Dockerfile: pin python:3.12-slim by SHA (microsoft#291,microsoft#293)

CodeQL:
- test_time_decay.py: timedelta(days=365) -> 366 for leap safety (microsoft#289,microsoft#290)

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: kevinkaylie <[email protected]>
Co-authored-by: Aymen Hmaidi <[email protected]>
Co-authored-by: harshnair75567-cloud <[email protected]>
Co-authored-by: Adamthereal <[email protected]>
Co-authored-by: Jack Batzner <[email protected]>
Co-authored-by: lawcontinue <[email protected]>
Co-authored-by: deepsearch <[email protected]>
Co-authored-by: ewmh <[email protected]>
Co-authored-by: T. Smith <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agent-mesh agent-mesh package documentation Improvements or additions to documentation size/XL Extra large PR (500+ lines)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Deployment gaps: missing container images, OpenClaw sidecar Helm support, doc accuracy

1 participant