Orientation for AI coding agents in this repository. For humans, the README covers installation, development, CI, and releases, and the evals README covers the eval corpora and runners.
This repository is a Claude Code plugin marketplace (solace-agent-plugins) of Agent Skills for building Solace messaging applications. The product is Markdown skill files, reference samples, and eval corpora. Nothing is compiled or packaged.
| Path | What it is |
|---|---|
.claude-plugin/marketplace.json |
The marketplace. One entry per plugin directory. |
plugins/<plugin>/.claude-plugin/plugin.json |
Plugin manifest, including the plugin's version. |
plugins/<plugin>/skills/<skill>/SKILL.md |
A skill. The frontmatter description alone decides when the skill fires. |
plugins/solace-messaging-skills/skills/solace-application-development/references/<api>.md |
Per-API entry file (jcsmp.md, python.md). Mode files, baked samples, and scripts sit in the matching references/<api>/ folder. |
plugins/<plugin>/evals/ |
Trigger and output eval corpora. Maintainer tooling, not shipped functionality. |
tools/ |
CI check scripts, the two eval runners, and output-evals.schema.json. |
.github/workflows/ci.yml |
The only CI workflow. |
Nothing in the repository is generated or vendored. The Eclipse files under references/jcsmp/evals/sample-check/ are IDE metadata for the JCSMP sample check; leave them alone.
Run from the repository root. These match the README.
gh skill publish --dry-run # skills against the Agent Skills spec (gh 2.90 or later)
claude plugin validate . --strict # marketplace and plugin manifests
./tools/check-plugin-versions.sh --sync-only # marketplace.json matches plugins/
./tools/check-links.sh plugins # broken and soft-404 doc links
./plugins/solace-messaging-skills/skills/solace-application-development/references/jcsmp/evals/sample-check/check-samples.sh # check the baked JCSMP samples (compile and config smoke)
./plugins/solace-messaging-skills/skills/solace-application-development/references/python/evals/sample-check/check-samples.sh # check the baked Python samples (python3 and PyPI access)
claude --plugin-dir plugins/solace-messaging-skills # load the plugin from the cloneThe commands above need no broker and no API key. The evals need an exported ANTHROPIC_API_KEY or CLAUDE_CODE_OAUTH_TOKEN; an existing claude login does not work, because the runners use a scratch config directory.
./tools/run-trigger-evals.sh --model haiku # then --model sonnet
./tools/run-output-evals.sh --model sonnet # then --model opus; a full leg takes about an hour
./tools/run-output-evals.sh --case <case-id> # one output eval caseThe trigger runner has no single-case mode; set TRIGGER_EVAL_RUNS=1 for a quicker check. Only the output evals can touch a broker, and only when all four OUTPUT_EVAL_BROKER_* variables are exported (see the evals README).
- Never hardcode a library version in skill content. Generated builds resolve the latest release at generation time (Invariant 3 in the application-development
SKILL.md). - Link documentation to the live
docs.solace.com.mdURL. Do not copy doc content into a skill. Every link underplugins/must passcheck-links.sh. - A new skill needs cases in both
trigger-evals.json(positive and near-miss negative prompts) andoutput-evals.json(validate the latter againsttools/output-evals.schema.json). - A new, removed, or renamed plugin directory needs the matching
marketplace.jsonchange in the same pull request. - A new baked JCSMP sample must be added to the sample roster in
jcsmp/evals/sample-check/check-samples.sh, or the sample check does not cover it. A new baked Python sample goes into the roster inpython/evals/sample-check/check-samples.sh;check_samples.pypicks it up from there. - Do not put exact counts (of cases, skills, or graders) in READMEs or skill docs. They go stale.
- Do not bump a
plugin.jsonversion in a feature pull request. Versions change only when a release is prepared. Claude Code caches installed plugins by version, so the bump is what ships a release, and a stray bump confuses what users have. Changes underplugins/<plugin>/evals/,tools/,.github/, or the repository root never need a bump. - Both repositories are public. Never write internal links, internal system names, credentials, API keys, or broker details into files, commit messages, branch names, or pull request text.
- Run
gh repo set-default SolaceDev/agent-pluginsin a fresh clone. With theupstreamremote present, a baregh prcommand otherwise targetsSolaceProducts/agent-plugins. - A green
trigger-evalscheck asserts nothing. The job is disabled (if: false) because the public repositories hold no API key. Run the evals locally and record the results in the pull request description. - A trigger eval leg can go red on one
must_passcase from model variance. If the prompt and skill descriptions did not change, re-run the full leg before you treat it as a regression. - Keep shell scripts on LF line endings.
.gitattributesenforces it. Bash rejects CRLF scripts, and an output eval grader compares the generatedverify.shbyte for byte with the bundled copy inreferences/jcsmp/scripts/. - Keep the pins in
ci.yml. Everyuses:step is pinned to a commit SHA with the tag in a trailing comment, and the Claude Code CLI version is pinned inCLAUDE_CODE_VERSION. Update a SHA and its comment together. check-links.shsweepsplugins/only. It does not check links in the root README or this file.- A tool permission denial during an output eval is an infrastructure failure, not a skill failure. Managed settings, hooks, or local command shims can deny a command. Fix the environment, then re-run.
- Open pull requests as drafts. Watch the checks with
gh pr checks <number> --watch, fix failures, and mark the pull request ready only when all checks are green. - Print a failed CI job's log with
gh run view <run-id> --log-failed, then reproduce it with the matching command above. - For a change to skill content or skill descriptions, run the trigger evals on Haiku and Sonnet and the output evals on Sonnet and Opus, and record the results in the pull request description.
- Do not pick reviewers. Ask the user who to tag.
- Never merge a release pull request. A human reviewer merges it.