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
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 55 additions & 36 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
@@ -1,55 +1,74 @@
{
"marketplace": "claude-plugins",
"name": "keeper-security",
"owner": {
"name": "Keeper Security",
"email": "commanders@keepersecurity.com"
},
"metadata": {
"description": "Keeper Security Agent Kit - KSM CLI, Commander, and setup skills for Claude Code",
"version": "0.1.0"
},
"plugins": [
{
"id": "keeper-secrets",
"name": "keeper-secrets",
"description": "Retrieve, inject, and manage secrets from Keeper Vault using KSM CLI for developer workflows",
"version": "1.0.0",
"author": "Keeper Security",
"keywords": [
"secrets",
"vault",
"credentials",
"ksm",
"devops"
],
"path": "./skills/keeper-secrets"
},
{
"id": "keeper-admin",
"name": "keeper-admin",
"description": "Manage Keeper Vault, enterprise administration, PAM, and privileged access using Commander CLI",
"version": "1.0.0",
"author": "Keeper Security",
"source": "./plugins/keeper-admin",
"description": "Manage Keeper Vault, enterprise administration, PAM, and privileged access using Keeper Commander CLI (keeper).",
"version": "0.1.0",
"author": {
"name": "Keeper Security",
"email": "commanders@keepersecurity.com"
},
"homepage": "https://github.com/Keeper-Security/agent-kit",
"repository": "https://github.com/Keeper-Security/agent-kit",
"license": "Apache-2.0",
"category": "development",
"keywords": [
"admin",
"vault",
"pam",
"enterprise",
"keeper"
],
"path": "./skills/keeper-admin"
]
},
{
"name": "keeper-secrets",
"source": "./plugins/keeper-secrets",
"description": "Retrieve, inject, and manage secrets from Keeper Vault using KSM CLI (ksm) for developer workflows, including ksm exec, interpolate, and Keeper notation.",
"version": "0.1.0",
"author": {
"name": "Keeper Security",
"email": "commanders@keepersecurity.com"
},
"homepage": "https://github.com/Keeper-Security/agent-kit",
"repository": "https://github.com/Keeper-Security/agent-kit",
"license": "Apache-2.0",
"category": "development",
"keywords": [
"secrets",
"vault",
"credentials",
"ksm",
"devops"
]
},
{
"id": "keeper-setup",
"name": "keeper-setup",
"description": "Install and configure Keeper CLI tools (KSM CLI and Commander) for the Keeper Security agent kit",
"version": "1.0.0",
"author": "Keeper Security",
"source": "./plugins/keeper-setup",
"description": "Install and configure Keeper CLI tools (KSM CLI and Commander) for the Keeper Security agent kit, including profiles and authentication.",
"version": "0.1.0",
"author": {
"name": "Keeper Security",
"email": "commanders@keepersecurity.com"
},
"homepage": "https://github.com/Keeper-Security/agent-kit",
"repository": "https://github.com/Keeper-Security/agent-kit",
"license": "Apache-2.0",
"category": "development",
"keywords": [
"setup",
"install",
"configuration"
],
"path": "./skills/keeper-setup"
]
}
],
"homepage": "https://github.com/Keeper-Security/agent-kit",
"repository": "https://github.com/Keeper-Security/agent-kit",
"license": "Apache-2.0",
"support": {
"email": "commanders@keepersecurity.com",
"url": "https://keepersecurity.com/support"
}
]
}
30 changes: 0 additions & 30 deletions .claude-plugin/plugin.json

This file was deleted.

81 changes: 81 additions & 0 deletions .cursor-plugin/marketplace.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
{
"name": "keeper-security",
"owner": {
"name": "Keeper Security",
"email": "commanders@keepersecurity.com"
},
"metadata": {
"description": "Keeper Security Agent Kit - KSM CLI, Commander, and setup skills for Claude Code",
"version": "0.1.0",
"homepage": "https://github.com/Keeper-Security/agent-kit",
"repository": "https://github.com/Keeper-Security/agent-kit",
"license": "Apache-2.0",
"support": {
"email": "commanders@keepersecurity.com",
"url": "https://keepersecurity.com/support"
}
},
"plugins": [
{
"name": "keeper-admin",
"source": "./plugins/keeper-admin",
"description": "Manage Keeper Vault, enterprise administration, PAM, and privileged access using Commander CLI",
"version": "0.1.0",
"author": {
"name": "Keeper Security",
"email": "commanders@keepersecurity.com"
},
"homepage": "https://github.com/Keeper-Security/agent-kit",
"repository": "https://github.com/Keeper-Security/agent-kit",
"license": "Apache-2.0",
"category": "development",
"keywords": [
"admin",
"vault",
"pam",
"enterprise",
"keeper"
]
},
{
"name": "keeper-secrets",
"source": "./plugins/keeper-secrets",
"description": "Retrieve, inject, and manage secrets from Keeper Vault using KSM CLI for developer workflows",
"version": "0.1.0",
"author": {
"name": "Keeper Security",
"email": "commanders@keepersecurity.com"
},
"homepage": "https://github.com/Keeper-Security/agent-kit",
"repository": "https://github.com/Keeper-Security/agent-kit",
"license": "Apache-2.0",
"category": "development",
"keywords": [
"secrets",
"vault",
"credentials",
"ksm",
"devops"
]
},
{
"name": "keeper-setup",
"source": "./plugins/keeper-setup",
"description": "Install and configure Keeper CLI tools (KSM CLI and Commander) for the Keeper Security agent kit",
"version": "0.1.0",
"author": {
"name": "Keeper Security",
"email": "commanders@keepersecurity.com"
},
"homepage": "https://github.com/Keeper-Security/agent-kit",
"repository": "https://github.com/Keeper-Security/agent-kit",
"license": "Apache-2.0",
"category": "development",
"keywords": [
"setup",
"install",
"configuration"
]
}
]
}
28 changes: 8 additions & 20 deletions .github/ACT.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

**act** is a CLI that runs **GitHub Actions workflows on your computer** instead of on GitHub. It starts **Docker** containers that behave like GitHub’s `ubuntu-latest` runners, checks out your repo (or copies the working tree), and runs the same `run:` steps your YAML defines.

You use it to **catch CI failures before you push**-for example broken `plugin.json`, bad SKILL frontmatter, or failed skill checks.
You use it to **smoke-test GitHub workflows before you push** (semantic PR, release-please). **Plugin and skill validation** runs via **pre-commit** (`plugin-ci`) or **`task validate`**, not as a hosted workflow.

## How it works (mental model)

Expand All @@ -30,25 +30,16 @@ From the **repository root**:
./scripts/act-all.sh
```

That script lists and runs **validate-plugin** and **test-skills** with `act push` (these **must** succeed - the script exits non-zero if either fails). It then runs **semantic-pull-request** (`act pull_request` + [`.github/act/event-pull_request.json`](act/event-pull_request.json)) and **release-please** (`act push`) as **extra smoke tests**. Those two workflows call the **GitHub REST API** (`pulls.get`, release-please), so they **usually fail inside act** without a real `GITHUB_TOKEN`; that is expected and the script still exits **0** after the first two workflows pass.
That script runs **`task validate`** first (same as the **pre-commit** `plugin-ci` hook; **must** succeed—the script exits non-zero if it fails). It then runs **semantic-pull-request** (`act pull_request` + [`.github/act/event-pull_request.json`](act/event-pull_request.json)) and **release-please** (`act push`) as **extra smoke tests**. Those two workflows call the **GitHub REST API** (`pulls.get`, release-please), so they **usually fail inside act** without a real `GITHUB_TOKEN`; that is expected and the script still exits **0** after plugin validation passes.

**Manual - plugin + skills only:**

**1. See what would run (job names):**

```bash
act -l -W .github/workflows/validate-plugin.yml
act -l -W .github/workflows/test-skills.yml
```

**2. Run the same checks GitHub runs (simulates `push`):**
**Manual - plugin + skills only (no act):**

```bash
act push -W .github/workflows/validate-plugin.yml
act push -W .github/workflows/test-skills.yml
task validate
# or: pre-commit run plugin-ci --all-files
```

Order does not matter between the two files; run both to match what CI exercises for plugin + skills.
Requires **`jq`** (same as `scripts/validate.sh`).

**Manual - semantic PR workflow (`pull_request`):**

Expand All @@ -70,14 +61,13 @@ Locally, **release-please** usually fails at the step that talks to the GitHub A

| Workflow file | What it mainly validates |
| --- | --- |
| [`validate-plugin.yml`](workflows/validate-plugin.yml) | `plugin.json`, `marketplace.json`, SKILL frontmatter, reference files, etc. |
| [`test-skills.yml`](workflows/test-skills.yml) | Skill descriptions/triggers, example checks, doc headings in root files |
| *(none on GitHub for plugins)* | Plugin/skill checks: **`task validate`** (also **pre-commit** hook `plugin-ci`). |
| [`semantic-pull-request.yml`](workflows/semantic-pull-request.yml) | PR title matches Conventional Commits (squash-merge title) |
| [`release-please.yml`](workflows/release-please.yml) | Release PR + changelog + GitHub Release via release-please |

## Convenience: Task wrapper

If you use [Task](https://taskfile.dev/), [`Taskfile.yaml`](../Taskfile.yaml) defines **`task act`**, which runs [`scripts/act-all.sh`](../scripts/act-all.sh) (all workflows). For Markdown formatting before a PR, run **`task fmt`** separately. You can ignore Task and run `./scripts/act-all.sh` or the manual commands above.
If you use [Task](https://taskfile.dev/), [`Taskfile.yaml`](../Taskfile.yaml) defines **`task validate`** (plugin validation) and **`task act`**, which runs [`scripts/act-all.sh`](../scripts/act-all.sh). For Markdown formatting before a PR, run **`task fmt`** separately. You can ignore Task and run `./scripts/act-all.sh` or the manual commands above.

## Differences vs running on GitHub

Expand All @@ -86,7 +76,6 @@ If you use [Task](https://taskfile.dev/), [`Taskfile.yaml`](../Taskfile.yaml) de
| `paths:` filters | Workflow may be skipped if paths don’t match | Ignored for “should this run?” - you chose the file with `-W` |
| Runners | GitHub-hosted Ubuntu | Docker image (e.g. `ghcr.io/catthehacker/ubuntu:act-latest`) |
| **`GITHUB_TOKEN`** | Injected automatically for each job as `secrets.GITHUB_TOKEN` (scoped to the repo, permissions from the workflow `permissions:` block). You do **not** add it under **Settings → Secrets**. | **Not** the same as GitHub’s token. act may set a placeholder or empty value; it does **not** mint a real token that can call `api.github.com` like the hosted runner. To exercise API-using actions locally you must pass a token yourself (e.g. `act … -s GITHUB_TOKEN=…` with a fine-scoped PAT)-optional and easy to get wrong, so we treat API workflows as **CI-only** for “full success.” |
| `import yaml` in Python | Works after we install **`python3-yaml`** via `apt` in the workflow | Same; that step exists so act matches GitHub |
| **release-please** / **semantic PR** actions | Full GitHub API + real `GITHUB_TOKEN` | May fail or partially run without a PAT; use for YAML/container smoke tests |

## Troubleshooting
Expand All @@ -95,7 +84,6 @@ If you use [Task](https://taskfile.dev/), [`Taskfile.yaml`](../Taskfile.yaml) de
| --- | --- |
| Docker not running | Start Docker Desktop / Linux daemon |
| `unable to get git ref` | Add an initial commit; harmless for file copy |
| `ModuleNotFoundError: yaml` | Workflows should install `python3-yaml`; pull latest `.github/workflows` |
| Slow first run | Normal while Docker pulls the runner image |

## See also
Expand Down
4 changes: 1 addition & 3 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
# Pull request

## Summary

<!-- What does this PR change and why? -->
Expand All @@ -13,6 +11,6 @@
<!-- Check what applies -->

- [ ] Documentation (skills, references, README, etc.)
- [ ] Plugin / marketplace metadata (`.claude-plugin/`)
- [ ] Plugin / marketplace metadata (`.claude-plugin/`or `.cursor-plugin/`)
- [ ] CI / tooling (workflows, hooks, Taskfile)
- [ ] Other (describe below)
Loading
Loading