Skip to content

feat(skills): sync vendored skills with skills main 8287f83a - #25

Closed
arcjet-rei wants to merge 2 commits into
mainfrom
rei/feat/vendor-agent-framework-go-skill
Closed

arcjet-rei wants to merge 2 commits into
mainfrom
rei/feat/vendor-agent-framework-go-skill

Conversation

@arcjet-rei

@arcjet-rei arcjet-rei commented Sep 17, 2026

Copy link
Copy Markdown
Contributor

Vendors the skill tree from arcjet/skills main at b7514f09, the tip after skills#62 and skills#65 merged. Follow-up to the #22 sync of d9aadab3.

New skill: integrate-arcjet-guard-agent-framework-go, for Go agents built on Microsoft Agent Framework. It covers GuardTool for a single tool, GuardTools and GuardMiddleware for every tool an agent can see plus inbound screening, and arcjet.GuardAction for any Go function outside the framework. The arcjet router skill and the Go Guard reference route to it.

The coverage test in the new skill is attached to the policy it verifies. arcjet-review caught this on this PR: the example asserted that every tool comes back guarded while the sentence above it offered that as the check for an allow-by-default policy, which declines unrecognized tools by design, so the example was a test that always fails. Deny by default keeps that assertion; allow by default gets its own, naming the tools deliberately left unguarded and asserting they are the only ones. Fixed upstream in skills#65 first, so the vendored tree does not diverge from main.

The Go references now describe a released SDK rather than a pre-release. github.com/arcjet/arcjet-go v1.0.0 and github.com/arcjet/arcjet-go/agentframework v0.1.0 were tagged on 2026-09-17, so go get ...@latest resolves v1.0.0. The previous text told readers to pin @v1.0.0-rc.2, which would now send them to an older version than the default. The agent framework helpers are a separate module requiring Go 1.26, while the root module stays on Go 1.25, and both references say so.

WithCorrelationId became WithCorrelationID, with the CorrelationId and DecisionId field spellings following. That rename shipped in v1.0.0, where WithCorrelationId was the only exported symbol removed since v1.0.0-rc.2, so the previous copy documented a function that no longer exists.

The tip also carries skills#63 (published @arcjet/* 1.12.0 and Python arcjet 1.1.0) and skills#64 (Claude Managed Agents example URL).

Most of the upstream delta does not appear in this diff. The vendored tree stores dprint-formatted copies, so of the fifteen paths that changed when the tree was copied, eleven collapsed to nothing once dprint fmt ran. The genuine content changes are skills#62 and skills#65.

Canonical copy is plugins/arcjet/skills/; skills/ is the inbound symlink. add-ai-protection, add-guard-protection, add-request-protection and protect-route are untouched, and evals/ is not vendored.

🤖 Generated with Claude Code

Adds integrate-arcjet-guard-agent-framework-go, for Go agents built on
Microsoft Agent Framework, and brings the Go references up to the released
SDK.

arcjet-go v1.0.0 and agentframework v0.1.0 were tagged on 2026-09-17, so
`go get ...@latest` resolves v1.0.0 and the previous instruction to pin
v1.0.0-rc.2 would send readers to an older version than the default. The
agent framework helpers are a separate module needing Go 1.26 while the root
module stays on Go 1.25.

WithCorrelationId became WithCorrelationID, with CorrelationId and DecisionId
following. That rename shipped in v1.0.0, where WithCorrelationId was the only
exported symbol removed since rc.2, so the previous copy named a function that
no longer exists.

The tip also carries skills#63 and skills#64. Files were copied at that SHA
and then formatted with dprint, which is why most of the upstream delta does
not appear here: the vendored tree stores formatted copies.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@arcjet-rei

Copy link
Copy Markdown
Contributor Author

Verification

At 232a928.

scripts/validate.sh exits 0, all structural checks passing. dprint check exits 0.

dprint is not installed by default in this environment. The version and checksums in .devcontainer/install-dprint.sh were used to fetch 0.53.2 into a scratch directory rather than installing into a tool path, so the formatter that ran here is the one CI runs. It formatted 12 files.

Every canonical directory was compared against skills@8287f83a after copying and before formatting, and each matched exactly:

arcjet                                           identical
integrate-arcjet-guard-agent-framework-go        identical
integrate-arcjet-guard-claude-agent-sdk-py       identical
integrate-arcjet-guard-claude-managed-agents-py  identical
integrate-arcjet-guard-crewai                    identical
integrate-arcjet-guard-langchain-py              identical
integrate-arcjet-guard-openai-agents-py          identical
integrate-arcjet-guard-strands-agents-py         identical

add-ai-protection, add-guard-protection, add-request-protection and protect-route are still present and unmodified. evals/ was not vendored. The inbound skills/ symlink resolves to the new skill directory.

No CorrelationId, WithCorrelationId or DecisionId remains in the canonical tree, and no v1.0.0-rc version claim remains.

Why the diff is smaller than the sync

Copying the tree changed 15 paths. Running dprint fmt reduced that to 4, because the vendored tree stores formatted copies and upstream is unformatted. The eleven that collapsed differed only in formatting.

This is worth knowing before the next sync: counting files in the diff understates what was copied, and a sync that looks suspiciously small is probably correct.

One correction made during the work

An early drift report ran while the checkout was one commit behind origin/main, which made four Python adapter skills look stale when they were not. The verification above was re-run from a branch cut fresh from origin/main.

@arcjet-review arcjet-review 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.

Arcjet Review — 🟡 Medium Risk

Decision: Checked

Rationale: This PR updates vendored Markdown skill documentation and the changelog, including Go Arcjet SDK release references, correlation ID spelling, and a new Microsoft Agent Framework for Go integration skill. The auth/security escalation trigger fired because the changed guidance discusses guard policies and token-bucket rate limiting, but there are no executable code changes, no dependency changes, and no hardcoded real credentials or secrets observed. I am approving despite Medium risk because the change is documentation-only, security guidance generally favors fail-closed behavior, and the PR metadata accurately describes the diff.

Summary of Changes

Synchronizes Arcjet vendored skill docs with an upstream skills snapshot, adds a new Go Microsoft Agent Framework Guard integration skill, updates Go SDK installation/version guidance from pre-release to released modules, and renames Go correlation/decision ID references to the v1.0.0 API spelling.

Escalation Triggers

  • Authentication & Authorization: Changed documentation contains security/Guard policy guidance and token-bucket rate-limit terminology matching the configured auth/security content trigger.

Notes

The AI assessed this PR as approvable, but the trust level (1) does not allow auto-approval. A human reviewer must approve this PR.

Review: 2a17b408 | Model: openai/gpt-5.5 | Powered by Arcjet Review

arcjet-rei added a commit to arcjet/skills that referenced this pull request Sep 17, 2026
* docs: attach the coverage test to the policy it actually verifies

The example asserted that every tool comes back guarded, and the sentence
above it offered that as the test for the allow-by-default policy. Under that
policy the unrecognized tool is supposed to be declined, so the loop reports
it on every run and the example is a test that always fails.

The assertion belongs to deny by default, where an unlisted tool coming back
guarded is the property worth checking. Allow by default needs a different
check: compare the guarded names against the names the policy lists, so a
tool added without a case fails the test rather than shipping unguarded.

Found by arcjet-review on arcjet/arcjet-plugin#25, where the skill was being
vendored.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* docs: show the allow-by-default coverage assertion in code

The deny-by-default check had sample code and the allow-by-default check had
only prose, which invites two readers to implement it two ways.

The example names the tools deliberately left unguarded and asserts they are
the only ones, so a tool added to the agent without a policy case appears as
an entry nobody listed. That is the addition the allow-by-default policy is
exposed to, and it is a different assertion from the deny-by-default one
above, which is why the two are not shared.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
skills#65 corrected the coverage test in the new agent framework skill. The
example asserted that every tool comes back guarded while the sentence above
it offered that as the check for an allow-by-default policy, which declines
unrecognized tools by design, so the example was a test that always fails.

Deny by default keeps that assertion, since an unlisted tool coming back
guarded is the property worth checking there. Allow by default gets its own,
naming the tools deliberately left unguarded and asserting they are the only
ones.

Found by arcjet-review on this pull request, fixed upstream first so the
vendored tree does not diverge from skills main.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@cursor

cursor Bot commented Sep 17, 2026

Copy link
Copy Markdown

Superseded by #27, which vendors skills c7bc1bb (current main after skills#67). #26 already landed 7d0b141 plus the review-nit clarifications; this leftover still points at b7514f09. Closing so we do not push onto this branch.

auto-merge was automatically disabled September 17, 2026 11:42

Pull request was closed

@davidmytton

davidmytton commented Sep 17, 2026

Copy link
Copy Markdown
Contributor

I have a bot that runs overnight to make sure the plugin syncs @arcjet-rei , and I merged in #26 before seeing this PR!

@arcjet-rei

Copy link
Copy Markdown
Contributor Author

Whatever's clever!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants