Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
10 changes: 5 additions & 5 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
"SAST remediation",
"agentic AppSec",
"AppSec",
"Upgrade Impact Analysis"
"OSS Upgrade Investigator"
],
"name": "endor-labs-agent-kit",
"source": "./plugins/claude/endor-labs-agent-kit",
Expand All @@ -37,9 +37,9 @@
"SAST remediation",
"agentic AppSec",
"AppSec",
"Upgrade Impact Analysis"
"OSS Upgrade Investigator"
],
"version": "2.1.0"
"version": "2.2.0"
},
{
"author": {
Expand All @@ -58,7 +58,7 @@
"SAST remediation",
"agentic AppSec",
"AppSec",
"Upgrade Impact Analysis"
"OSS Upgrade Investigator"
],
"name": "ai-plugins",
"source": "./plugins/claude/ai-plugins",
Expand All @@ -72,7 +72,7 @@
"SAST remediation",
"agentic AppSec",
"AppSec",
"Upgrade Impact Analysis"
"OSS Upgrade Investigator"
],
"version": "1.2.0"
}
Expand Down
23 changes: 23 additions & 0 deletions .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"author": {
"name": "Endor Labs",
"url": "https://www.endorlabs.com/"
},
"description": "Endor Labs workflow agents and setup for Claude Code.",
"displayName": "Endor Labs Agent Kit",
"homepage": "https://github.com/endorlabs/ai-plugins",
"keywords": [
"endor-labs",
"security",
"sca",
"sast",
"claude-code",
"agentic remediation",
"SAST remediation",
"agentic AppSec",
"AppSec",
"OSS Upgrade Investigator"
],
"name": "ai-plugins",
"repository": "https://github.com/endorlabs/ai-plugins"
}
17 changes: 1 addition & 16 deletions .cursor-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,24 +9,9 @@
},
"plugins": [
{
"author": {
"name": "Endor Labs",
"url": "https://www.endorlabs.com/"
},
"category": "Developer Tools",
"description": "Endor Labs Agent Kit setup and security workflow agents and skills.",
"keywords": [
"endor-labs",
"security",
"sca",
"sast",
"cursor",
"agentic remediation",
"AppSec"
],
"name": "endorlabs",
"source": "./",
"version": "2.1.0"
"source": "./plugins/cursor/endor-labs-agent-kit"
}
]
}
111 changes: 111 additions & 0 deletions .github/workflows/build-codex-directory-submission.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
name: Build Codex directory submission

on:
workflow_dispatch:
inputs:
ai_plugins_sha:
description: Exact 40-character ai-plugins commit to package
required: true
type: string
publish_release_assets:
description: Upload the verified files to an existing GitHub Release
required: true
type: boolean
default: false
release_tag:
description: Existing ai-plugins release tag when publishing release assets
required: false
type: string

permissions:
contents: read

jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Validate immutable commit input
env:
AI_PLUGINS_SHA: ${{ inputs.ai_plugins_sha }}
run: |
if ! printf '%s' "$AI_PLUGINS_SHA" | grep -Eq '^[0-9a-f]{40}$'; then
echo "ai_plugins_sha must be a literal 40-character lowercase Git SHA"
exit 1
fi

- name: Check out immutable ai-plugins commit
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5
with:
ref: ${{ inputs.ai_plugins_sha }}
fetch-depth: 1

- name: Verify checked-out commit and source provenance
id: provenance
env:
AI_PLUGINS_SHA: ${{ inputs.ai_plugins_sha }}
run: |
actual_sha="$(git rev-parse HEAD)"
test "$actual_sha" = "$AI_PLUGINS_SHA"
python3 - <<'PY'
import json
import os
import pathlib
import re

payload = json.loads(
pathlib.Path("provenance/agent-kit-source.json").read_text(encoding="utf-8")
)
source_sha = payload.get("agent_kit_sha", "")
if not re.fullmatch(r"[0-9a-f]{40}", source_sha):
raise SystemExit("provenance/agent-kit-source.json has no immutable Agent Kit SHA")
with open(os.environ["GITHUB_OUTPUT"], "a", encoding="utf-8") as output:
output.write(f"agent_kit_sha={source_sha}\n")
PY

- name: Validate and build deterministic submission
env:
AI_PLUGINS_SHA: ${{ inputs.ai_plugins_sha }}
AGENT_KIT_SHA: ${{ steps.provenance.outputs.agent_kit_sha }}
run: |
python3 scripts/build_codex_directory_submission.py validate --root .
python3 scripts/build_codex_directory_submission.py build \
--root . \
--output-dir dist/codex-directory \
--ai-plugins-sha "$AI_PLUGINS_SHA" \
--agent-kit-source-sha "$AGENT_KIT_SHA"

- name: Upload immutable workflow artifact
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
with:
name: codex-directory-${{ inputs.ai_plugins_sha }}
path: dist/codex-directory/*
if-no-files-found: error
retention-days: 30

publish-release-assets:
if: ${{ inputs.publish_release_assets }}
needs: build
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Require explicit release tag
env:
RELEASE_TAG: ${{ inputs.release_tag }}
run: test -n "$RELEASE_TAG"

- name: Download verified workflow artifact
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093
with:
name: codex-directory-${{ inputs.ai_plugins_sha }}
path: codex-directory

- name: Upload to existing GitHub Release
env:
GH_TOKEN: ${{ github.token }}
RELEASE_TAG: ${{ inputs.release_tag }}
run: |
gh release view "$RELEASE_TAG" --repo "$GITHUB_REPOSITORY"
gh release upload "$RELEASE_TAG" codex-directory/* \
--repo "$GITHUB_REPOSITORY" \
--clobber
39 changes: 36 additions & 3 deletions .github/workflows/validate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,20 +17,50 @@ jobs:
- name: Install validation dependencies
run: python3 -m pip install pyyaml

- name: Validate root skill frontmatter
- name: Check repository hygiene
run: python3 scripts/check_repository_hygiene.py

- name: Validate Agent Kit provenance
run: python3 scripts/validate_mirror_provenance.py

- name: Validate marketplace host boundaries
run: python3 scripts/validate_marketplace_host_boundaries.py

- name: Validate Codex directory package
run: python3 scripts/build_codex_directory_submission.py validate --root .

- name: Validate skill frontmatter
run: |
for skill in skills/*; do
python3 scripts/quick_validate.py "$skill"
done
for skill in plugins/cursor/endor-labs-agent-kit/skills/*; do
python3 scripts/quick_validate.py "$skill"
done

- name: Validate JSON metadata
run: |
python3 -m json.tool .claude-plugin/marketplace.json >/dev/null
python3 -m json.tool .claude-plugin/plugin.json >/dev/null
python3 -m json.tool .agents/plugins/marketplace.json >/dev/null
python3 -m json.tool .cursor-plugin/marketplace.json >/dev/null
python3 -m json.tool .cursor-plugin/plugin.json >/dev/null
python3 -m json.tool plugins/cursor/endor-labs-agent-kit/.cursor-plugin/plugin.json >/dev/null
python3 -m json.tool cursor-sdk/agent_definitions.json >/dev/null
python3 -m json.tool .mcp.json >/dev/null
python3 -m json.tool hooks/hooks.json >/dev/null
python3 -m json.tool plugins/cursor/endor-labs-agent-kit/mcp.json >/dev/null
python3 -m json.tool plugins/cursor/endor-labs-agent-kit/hooks/hooks.json >/dev/null
python3 -m json.tool plugins/claude/endor-labs-agent-kit/hooks/hooks.json >/dev/null
python3 -m json.tool plugins/codex/endor-labs-agent-kit/hooks/hooks.json >/dev/null
python3 -m json.tool plugins/gemini/endor-labs-agent-kit/hooks/hooks.json >/dev/null
python3 -m json.tool plugins/antigravity/endor-labs-agent-kit/hooks.json >/dev/null

- name: Validate hook scripts
shell: bash
run: |
shopt -s nullglob
for hook_script in hooks/*.sh plugins/*/*/hooks/*.sh; do
bash -n "$hook_script"
done

- name: Compile Cursor SDK launcher
run: python3 -m py_compile cursor-sdk/run_cursor_agent.py
Expand All @@ -40,6 +70,9 @@ jobs:
test ! -e gemini-extension.json
test -f plugins/gemini/endor-labs-agent-kit/gemini-extension.json
test ! -e plugins/gemini/endor-labs-agent-kit.zip
test ! -e .mcp.json
test ! -e .cursor-plugin/plugin.json
test ! -e cursor/endor-labs-agent-kit

- name: Check README package version matches Claude marketplace
run: |
Expand Down
55 changes: 50 additions & 5 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,38 +3,79 @@
All notable changes to Endor Labs Agent Kit and the generated `ai-plugins`
distribution are tracked here.

The current generated package version is `2.1.0`. Merging to `main` does not
The current generated package version is `2.2.0`. Merging to `main` does not
automatically increment this version. Maintainers bump `pyproject.toml`
intentionally for a release, regenerate artifacts, and use the same version
across Claude Code, Codex, Gemini CLI, Antigravity CLI, Cursor, and Cursor SDK
package metadata.

## Unreleased
## 2.2.0 - 2026-07-30

### Added

- Added the Codex Plugins Directory setup skill alongside all 11 workflow
skills, with explicit local `endorctl` authentication and secret-handling
guidance and no hosted MCP, connector, app, or plugin OAuth requirement.
- Added customer-owned Agent Policy Packs with a public JSON Schema, template
and examples, `validate-policy-pack` and `evaluate-policy-pack` CLI commands,
trusted fact preflight, and generated policy outputs across all source agents.
- Added an OpenAPI-derived Endor API resource and enum registry with a generator
for validating source instructions, knowledge-pack query fields, and rendered
`--field-mask` values.
- Added host-specific recommended model defaults with explicit customer override
precedence across Claude, Codex, Gemini, Antigravity, Cursor, and portable hosts.

### Changed

- Projected complete package-level Claude Code, Codex, Cursor, and Antigravity
installs into every public catalog agent. Each provider command installs the
full Agent Kit, while incomplete package records fail closed and are omitted.
- Added byte-identical catalog categories for the 11 canonical agents across
Remediation, Research & Investigate, Compliance, Troubleshooting, and
Incident Response so the Endor UI can group agents consistently.
- Refreshed the public catalog descriptions for all 11 canonical agents to
clarify scope, evidence, mutation boundaries, and approval requirements.
- Renamed and consolidated the public catalog to 11 canonical agents. The new
catalog wire schema v2 carries `legacy_ids` for backend-compatible alias
resolution, and Dependency Reviewer now selects one bounded
`package-decision`, `package-risk`, or `repository-review` profile instead of
chaining three overlapping agents.
- Renamed AI SAST Triage to AI SAST Remediation, Remediation Planner to
Remediation Planning, Upgrade Impact Analysis to OSS Upgrade Investigator,
Endor Troubleshooter to Troubleshooting, Probe Droid to Configuration
Automation, Malware Response Agent to Malware Responder, and the display name
Endor Labs Vulnerability Explainer to Vulnerability Explainer.
- Refreshed the pinned Endor OpenAPI and client/service provenance to
v1.7.1069, including `ECOSYSTEM_VSCODE` registry coverage.
v1.7.1088, retaining `ECOSYSTEM_VSCODE` registry coverage and the expanded
Codex, Cursor, Gemini, and Antigravity install-host enum.
- Enhanced `findings-browser` with compact complete-count queries and
`FINDING_TAGS_*` filters for exploited, fix-available, and reachable findings.
- Extended `malware-response` to query tenant `FINDING_CATEGORY_MALWARE`
- Extended `malware-responder` to query tenant `FINDING_CATEGORY_MALWARE`
evidence and distinguish Endor classifications from external intelligence.
- Extended `cicd-posture` to prefer Endor-ingested repository, CODEOWNERS, and
tag-protection evidence before falling back to the read-only GitHub API.
- Prioritized exploited findings in `sca-remediation` before VersionUpgrade/UIA
evidence selects an upgrade candidate.
- Routed generated Endor API commands through `endorctl agent api` with canonical
agent identifiers so backend telemetry can attribute agent-originated calls.
- Made exact-SHA QA and backend telemetry release evidence advisory in the
automated `ai-plugins` publication workflow while retaining strict manual
validation.
- Added profile-aware execution bounds, compact evidence plans, and deterministic
artifact summaries that avoid returning complete large inventories to the model.

### Fixed

- Removed stale mirror-root `manifest.json` files during `ai-plugins` sync so
Codex directory validation uses the exact source manifest pinned in mirror
provenance.
- Defaulted interactive agent responses to human-readable Markdown while
preserving strict JSON for explicit machine-readable requests.
- Aligned Antigravity manifests and install commands with the documented
`agy plugin` contract.
- Removed unsupported metadata from Cursor marketplace plugin entries and added
a release gate that enforces Cursor's current `name`, `source`, and optional
`description` entry contract.
- Made policy comparisons fail closed on invalid operand types, added trusted
`invalid_facts` provenance, and introduced explicit numeric dotted-version
operators instead of coercing version strings through generic comparisons.
Expand Down Expand Up @@ -62,7 +103,11 @@ package metadata.
`project_resolution`, keeping package-level and workspace-independent agents
out of project-resolution guidance.
- Clarified generated data-gap taxonomy and findings-browser filter guidance so
unavailable evidence and QA-only defaults stay machine-readable.
unavailable evidence and bounded-run defaults stay machine-readable.
- Hardened plugin hooks and disposable provider installations so all supported
hosts load the canonical generated agents without competing workflow skills.
- Made SCA remediation inventory output deterministic across package, manifest,
finding, and proposed change-request fields.

## 2.1.0 - 2026-06-16

Expand Down
24 changes: 11 additions & 13 deletions GEMINI.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ Gemini discovers the generated Gemini skills from that extension's
workflows.

Use Endor Labs Agent Kit workflows only within their generated safety
contracts. Prefer documented Endor API or `endorctl api` lookups when a
contracts. Prefer `endorctl agent api --agent-id <canonical-recipe-id>` lookups when a
workflow supports them. Use Endor MCP only when a selected MCP-capable
workflow needs it or the user explicitly asks for it.

Expand All @@ -20,18 +20,16 @@ before live Endor work.

User jobs mapped to root skills:

- Triage AI SAST findings: use skill `ai-sast-triage`.
- Assess CI/CD and supply chain posture: use skill `cicd-posture`.
- Dependency Decision Helper: use skill `dependency-decision-helper`.
- Diagnose Endor setup and scan issues: use skill `endor-troubleshooter`.
- Browse existing Endor findings: use skill `findings-browser`.
- Malware Response: use skill `malware-response`.
- Package Risk Summary: use skill `package-risk-summary`.
- Assess GitHub onboarding gaps: use skill `probe-droid`.
- Remediation Planner: use skill `remediation-planner`.
- Repository Dependency Reviewer: use skill `repository-dependency-reviewer`.
- Find safe SCA remediation paths: use skill `sca-remediation`.
- Upgrade Impact Analysis: use skill `upgrade-impact-analysis`.
- AI SAST Remediation: use skill `ai-sast-remediation`.
- CI/CD And Supply Chain Posture: use skill `cicd-posture`.
- Configuration Automation: use skill `configuration-automation`.
- Dependency Reviewer: use skill `dependency-reviewer`.
- Findings Browser: use skill `findings-browser`.
- Malware Responder: use skill `malware-responder`.
- OSS Upgrade Investigator: use skill `oss-upgrade-investigator`.
- Remediation Planning: use skill `remediation-planning`.
- SCA Remediation: use skill `sca-remediation`.
- Troubleshooting: use skill `troubleshooting`.
- Vulnerability Explainer: use skill `vulnerability-explainer`.

Setup must not run scans, run `endorctl host-check`, edit shell profiles,
Expand Down
Loading
Loading