Skip to content

feat: add cef plugin (cef:develop + cef:deploy)#4

Merged
upalinski merged 7 commits into
mainfrom
feat/cef-plugin-content
Jul 20, 2026
Merged

feat: add cef plugin (cef:develop + cef:deploy)#4
upalinski merged 7 commits into
mainfrom
feat/cef-plugin-content

Conversation

@upalinski

@upalinski upalinski commented Jul 20, 2026

Copy link
Copy Markdown
Collaborator

Adds the cef Claude Code plugin — the centrally-published, auto-updated authoring guidance that cef init-scaffolded projects auto-wire (via .claude/settings.json).

Contents

  • .claude-plugin/marketplace.json — marketplace cef; plugins/cef/.claude-plugin/plugin.json — plugin cef v0.1.0.
  • cef:develop (model-invoked) — author/extend/debug agents. Lean SKILL.md routing into references/: anatomy, engagements, cubbies, widgets, testing, constraints.
  • cef:deploy (confirmation-gated) — the build → push → deploy workflow (deploy makes an agent live; publish is optional/last), the deployments/ folder, and a "detect the missing prerequisite → hand back the exact next step" table. references/: credentials, roc-deploy.

Design

Two skills, from the developer-journey UX analysis: steps that share the "developing a CEF agent" trigger → one develop skill; shipping is a distinct, side-effecting intent → separate deploy skill.

Public-safe

No internal decision-record IDs, private source paths (packages/.../src, .go), orchestrator/TSS-DKG/vault-api naming, or example emails. claude plugin validate ✔; validate + CodeQL green.

Review fixes applied (spoluyan + owner)

  • agentId is {asPubkey}:{alias} everywhere (was stale {uuid}).
  • cef publish = agent card on the marketplace (optional, last); the manifest stays in the DDC bucket; dropped "stub"; pipeline reordered so deploy precedes publish.
  • multi-engagement selection example uses per-engagement priority/weight/limit (+ @Priority/… decorators), not the deprecated targeting table; disambiguated agent-config targeting (deprecated) vs deployment targeting (current, verified against the orchestrator structs).
  • dropped the unsupported lifecycle config setting from the cubbies example (the @OnStart/@OnClose methods stay).
  • cef deploy documented as shipped; --deployments <path> accepts a file or a directory (kubectl-apply -f style).

Authored via a parallel workflow (references + skills), then reviewed and revised.

🤖 Generated with Claude Code

marketplace.json + plugin.json + two skills with progressive-disclosure
references, grounded in the SDK source. Passes claude plugin validate.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@upalinski
upalinski requested a review from spoluyan as a code owner July 20, 2026 11:07
upalinski and others added 3 commits July 20, 2026 14:45
- SKILL.md: use npx cef (bare cef not on PATH in a fresh project)
- anatomy.md: add eventSchemas + cef typegen example (typed payloads)
- testing.md: assert a published event's payload
- cubbies.md: adding a second cubby (declare alias in config AND test harness)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Reflect the shipped 'cef deploy' CLI (--endpoint, default dev) across the
skill; keep AS creation + token minting as human-only ROC steps; use npx cef.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Remove internal ADR IDs and private source-path citations from the develop
skill references (public plugin — external tools shouldn't see them).

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

@spoluyan spoluyan left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

CI is green (validate / CodeQL / Analyze) and the structure is solid: the two-skill split (shared develop trigger vs. side-effecting deploy intent) is the right call, the "detect the missing prerequisite → hand back the exact next step" table is genuinely useful, and the two-identity model (DDC bucket owner vs. Agent Service) is clearly explained. ADR/source-path scrubbing in commit 4 is good hygiene for a public plugin.

Requesting changes for content contradictions that claude plugin validate can't catch but a user following the deploy flow will hit:

  1. 🔴 cef deploy is "coming" in roc-deploy.md but shipped in deploy/SKILL.md — and the SKILL.md links to that file. Reconcile roc-deploy.md to the shipped-CLI reality (commit 8b04053 updated SKILL.md but not its reference).
  2. 🟠 agentId shape disagrees{pubkey}:{uuid} (anatomy) vs {pubkey}:{alias} (credentials, roc-deploy). Users construct deployment keys from this.
  3. 🟠 targeting is DEPRECATED in anatomy but the only mechanism shown in engagements.md — the file pitched as teaching "selection decorators" demonstrates the deprecated path and never shows @Condition/@Priority/@Weight/etc.
  4. 🟡 "stub pending the API" for publish contradicts the deploy skill treating publish as fully functional.
  5. 🟡 Minor: lifecycle: "per-stream" in the cubbies example isn't in anatomy's field list.

Inline comments below cite exact locations. Issues 1–2 are in the deploy path and will actively mislead a user mid-flow; 3–5 are adjacent and worth fixing in the same pass.

Comment thread plugins/cef/skills/deploy/references/roc-deploy.md Outdated
Comment thread plugins/cef/skills/develop/references/anatomy.md Outdated
Comment thread plugins/cef/skills/develop/references/anatomy.md Outdated
Comment thread plugins/cef/skills/develop/references/anatomy.md Outdated
Comment thread plugins/cef/skills/develop/references/cubbies.md Outdated
upalinski and others added 3 commits July 20, 2026 15:39
- deploy makes an agent live; publish (marketplace) is optional and last
- document the deployments/ folder (one record per file; audiences/A-B via
  targeting + priority/weight) and the cef deploy command surface
- scrub internal refs (ADRs, .go/source paths, TSS-DKG, vault-api, orchestrator)
- align flags with the shipped CLI (drop --name)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- agentId is {asPubkey}:{alias} (was {uuid}); consistent across files
- cef publish = card on marketplace (optional, last); manifest stays in the
  DDC bucket; drop 'stub pending the API'; reorder pipeline (deploy before publish)
- multi-engagement selection example uses per-engagement priority/weight/limit
  (+ @Priority/@Weight/... decorators), not the deprecated targeting table
- disambiguate agent-config targeting (deprecated) vs deployment targeting (current)
- drop the unsupported lifecycle config field from the cubbies example
- scrub remaining internal naming (orchestrator -> platform, HandlerFor/AR)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…l-style)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@upalinski
upalinski merged commit 7c720d3 into main Jul 20, 2026
3 checks passed
@upalinski
upalinski deleted the feat/cef-plugin-content branch July 20, 2026 13:47
upalinski added a commit that referenced this pull request Jul 20, 2026
Small follow-up to two review comments on #4 (merged):

1. **`cef typegen` types model input/output.** Made explicit in
`engagements.md` that typegen fetches each model's spec and fills
`KnownModels` as `ModelHandle<I, O>` — so both the **input and output**
of `infer`/`stream` are typed, not just the alias (falls back to untyped
without typegen).
2. **Finding available models.** Added a note that you browse models and
copy a model's `ref` from **ROC** (there is no CLI command to list
them), paste it into `models` in `cef.config.ts`, then run `cef
typegen`. Short pointer added to the anatomy `models` field too.

`claude plugin validate` ✔.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: upalinski <ulad.palinski@cere.io>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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