Compare commits

...

201 Commits

Author SHA1 Message Date
github-actions[bot]
4d5ee6b343 bump(atomic-agents): 32439940 → dfe17760 2026-06-10 00:02:53 +00:00
github-actions[bot]
df5224ba07 bump(aws-data-analytics): 7a1422d5 → c0991f46 (#2511)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 13:30:10 -05:00
github-actions[bot]
e832e2bf0d bump(carta-cap-table): 732981ca → c39482a4 (#2514)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 13:24:04 -05:00
github-actions[bot]
9895dfca58 bump(ai-plugins): 975f0ce4 → a6737fcf (#2507)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 13:23:54 -05:00
github-actions[bot]
83d32aefd5 bump(aws-core): 7a1422d5 → c0991f46 (#2510)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 13:23:28 -05:00
github-actions[bot]
2804bac441 bump(forge-skills): 02103cca → c7df9561 (#2522)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 13:23:02 -05:00
github-actions[bot]
a1936eee01 bump(nvidia-skills): d0e07bd3 → fd1e6fd1 (#2528)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 13:22:34 -05:00
github-actions[bot]
b8ecaf01a6 bump(pydantic-ai): e412b6d8 → ddc7d005 (#2530)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 13:22:07 -05:00
github-actions[bot]
d2bae5e20b bump(firecrawl): 6768fb78 → b3344758 (#2521)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 13:21:38 -05:00
github-actions[bot]
e96f539e2d bump(hunter): 494b0bd6 → 06bcb94a (#2523)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 13:21:10 -05:00
github-actions[bot]
77c424ab52 bump(hyperframes): 24279c8c → acd8e117 (#2524)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 13:20:41 -05:00
github-actions[bot]
a771b69148 bump(jfrog): 117febaa → 6788fe15 (#2525)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 13:20:11 -05:00
github-actions[bot]
301dfbc752 bump(logfire): e412b6d8 → ddc7d005 (#2526)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 13:19:41 -05:00
github-actions[bot]
6f5b19f93b bump(outputai): fc6a93e6 → 65cd0871 (#2529)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 13:19:10 -05:00
github-actions[bot]
85d6e100e2 bump(42crunch-api-security-testing): a5172167 → b7e131e3 (#2506)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 13:18:23 -05:00
github-actions[bot]
6829c593c8 bump(chrome-devtools-mcp): 702d3734 → 6bd8c916 (#2517)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 13:18:15 -05:00
github-actions[bot]
0c33859bd9 bump(fastly-agent-toolkit): 6bd17d68 → 73af5b94 (#2520)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 13:17:42 -05:00
github-actions[bot]
1c5aba82fb bump(migration-to-aws): b3e5ee48 → 3c5d6a7d (#2527)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 13:17:08 -05:00
github-actions[bot]
2092653e18 bump(snowflake-cortex-code): 2462e1ba → 7d2c7e7e (#2534)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 13:16:29 -05:00
github-actions[bot]
7ba21d89e2 bump(aws-agents): 7a1422d5 → c0991f46 (#2509)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 13:16:23 -05:00
github-actions[bot]
0445ef3cf4 bump(crowdstrike-falcon-foundry): c542c932 → 0a651a14 (#2518)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 13:15:50 -05:00
github-actions[bot]
190a64c2ed bump(carta-crm): 732981ca → c39482a4 (#2515)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 13:15:41 -05:00
github-actions[bot]
f7ac27f10c bump(togetherai-skills): fb94cc14 → 8aa08ca1 (#2535)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 13:15:36 -05:00
github-actions[bot]
488e71feb9 bump(carta-investors): 732981ca → c39482a4 (#2516)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 13:15:30 -05:00
github-actions[bot]
2e5bcca08e bump(sentry-cli): dc99b4d1 → 18111b95 (#2533)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 13:15:15 -05:00
github-actions[bot]
8681d8d6d1 bump(airtable): 21d2fe52 → 295ab93b (#2508)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 13:14:55 -05:00
github-actions[bot]
0ec0005a3c bump(azure): 02a614f6 → 966330ee (#2513)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 13:14:16 -05:00
github-actions[bot]
7f680b8500 bump(dataproc): 20eec06e → 80d126d2 (#2519)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 13:13:35 -05:00
github-actions[bot]
8f005f9b76 bump(sentry): 030b01fb → 87de81a1 (#2532)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 13:13:25 -05:00
Morgan Lunt
746c982737 Merge pull request #2467 from anthropics/morganl/code-mod-secrets-redaction
code-modernization: never write discovered credential values into findings
2026-06-09 08:49:47 -07:00
Morgan Lunt
88233b24ba Merge pull request #2468 from anthropics/morganl/code-mod-interactive-map
code-modernization: interactive topology map, preflight command, persona flows
2026-06-09 08:49:38 -07:00
Morgan Lunt
ecc5139c30 code-modernization: legacy toolchain is advisory, not a transform blocker
Legacy code often cannot build locally by nature — CICS/IMS programs
have no local translator and the real runtime may be a mainframe the
user doesn't have. Stopping transform on a failed legacy smoke compile
would block exactly those systems.

- transform Step 0a: the target toolchain remains required (its tests
  cannot run without it); a failed or impossible legacy compile no
  longer stops the run — the equivalence strategy switches to recorded
  traces / golden-master fixtures, and that downgrade is stated in the
  plan and in TRANSFORMATION_NOTES.md so reviewers know the strength of
  the proof
- preflight: a red legacy toolchain now yields Ready-with-gaps for
  transform/reimagine instead of Not-ready
2026-06-09 08:48:05 -07:00
Morgan Lunt
a7e1f99070 code-modernization: limit marketplace.json change to the one description line
The previous commit round-tripped the catalog through a JSON serializer,
which escaped non-ASCII characters in every other plugin's description.
Restore the file from main and change only the code-modernization entry.
2026-06-09 08:48:04 -07:00
Morgan Lunt
0c40a74425 code-modernization: add topology viewer screenshot to README
Rendered from AWS CardDemo (the public mainframe sample app) by running
/modernize-map end to end and capturing the resulting TOPOLOGY.html.
2026-06-09 08:48:04 -07:00
Morgan Lunt
bec8d7c93a code-modernization: vendor d3, viewer robustness, status command, pipeline fixes
Viewer (assets/topology-viewer.html):
- inline a minified d3 subset (hierarchy/pack, zoom, selection,
  interpolateZoom, ease; ISC license) instead of loading from a CDN —
  the page is now fully self-contained and works on air-gapped networks
- handle duplicate node ids (unique-suffix; edges bind to the first
  occurrence) and store parent references directly, fixing
  level-of-detail and selection corruption with messy generated data
- share one reveal rule between drawing, edge culling, and hit-testing
  so edges no longer draw into collapsed containers
- pre-bucket edges by kind and keep a per-node adjacency map; the
  hover/selection pass no longer scans every edge each frame
- cancel in-flight fly-to animations when a new one starts; clamp
  fly-to zoom to the zoom extent; derive max zoom from the smallest
  leaf so deep estates stay reachable
- render dead-end candidates (new deadEnds field) with a dashed
  outline and a sidebar badge
- clicking a node during a flow walkthrough exits the walkthrough;
  search results clear on selection and Escape; surrogate-safe label
  truncation; clearer stats line; explicit empty-topology message

Commands:
- new /modernize-status: read-only progress report — artifact inventory
  with timestamps, staleness flags, secrets-hygiene checks, next step
- map: deadEnds in the topology schema; datastore names must be logical
  identifiers with credentials stripped from URLs/DSNs
- brief: read topology.json + .mmd files (not the interactive HTML);
  staleness check against inputs; effort unit aligned to person-months
- transform: secret-safe characterization-test prompt; diff -y fallback
  when delta is missing; credential-safe diff selection
- reimagine: target vision is everything after the first argument (was
  silently truncated to one word); masking rules in spec/scaffold/
  handoff prompts
- brief/transform/reimagine: human-approval gates phrased as explicit
  stop-and-wait instead of 'enter plan mode'
- preflight: delta in the tool table; brief added to the verdict list
- README: preflight/status in the workflow; legacy/ deny list also
  covers Write; plugin + marketplace descriptions updated
2026-06-09 08:48:04 -07:00
Morgan Lunt
8745968186 code-modernization: harden topology viewer and template injection
Fixes from an adversarial review of the new viewer:

- pin d3 to 7.9.0 and load it via dynamic import with an explicit
  error panel when the CDN is unreachable (previously a blocked CDN
  produced a silent dark page — a real concern for restricted networks)
- coerce ids/names/loc at intake: a single missing name or non-numeric
  loc previously threw inside the render loop or propagated NaN through
  the pack layout, blanking the canvas with no error
- normalize flows/steps/edges defensively (null entries, missing steps,
  numeric ids vs string lookups)
- mirror the level-of-detail reveal rule in the hit test so clicks
  can't select nodes that aren't drawn
- scope the Escape shortcut so clearing the search box doesn't reset
  the viewport; set zoom clickDistance(4) so trackpad jitter doesn't
  swallow selection clicks
- round canvas backing-store size (fractional devicePixelRatio caused
  a reallocation every frame on 125%/150% display scaling)
- modernize-map: use braced ${CLAUDE_PLUGIN_ROOT} so substitution
  actually happens, assert the injection marker exists in the template,
  and correct the documented failure mode
2026-06-09 08:48:04 -07:00
Morgan Lunt
1c4a5cfded code-modernization: interactive topology map, preflight command, persona flows
modernize-map previously rendered the call graph and data lineage as
static Mermaid diagrams, which become unreadable once a node has ~10+
edges — exactly the shape of real legacy systems. It now builds an
interactive viewer from a shipped template (assets/topology-viewer.html):
a zoomable circle-pack of domains/modules sized by LOC, rendered to
canvas with level-of-detail reveal, dependency edges with per-kind
toggles, search with fly-to, a per-node detail sidebar, and a flow
walkthrough mode. Small domain-level .mmd exports remain for docs.

- topology.json now has a documented schema (hierarchy + edges + entry
  points + observations + flows) consumed by the viewer
- map traces 2-4 business flows anchored to personas (claimant,
  operator, auditor), each step in plain business language mapped to
  the modules that implement it; the viewer plays them as numbered
  paths
- brief gains a Business Walkthroughs section connecting each persona
  flow to the phase that replaces it
- new modernize-preflight command: detects the stack, checks analysis
  tooling, smoke-compiles a real source file with the legacy toolchain,
  inventories missing copybooks/descriptors/binary-only artifacts, and
  writes a per-command readiness verdict
- transform now verifies legacy + target toolchains before its plan
  gate instead of failing at test time
- README: commands updated, optional-tooling section reframed as 'what
  to give Claude'
2026-06-09 08:48:04 -07:00
Morgan Lunt
4f49895abd code-modernization: assess writes the full quarantine ignore set
assess only added SECRETS.local.md to analysis/.gitignore, leaving
*.local.patch uncovered until harden's own Step 0 ran. Both patterns are
now written by whichever command runs first.
2026-06-09 08:47:34 -07:00
Morgan Lunt
9d49c4b135 code-modernization: close remaining credential-leak paths
A red-team pass found four ways credential values still reached
shareable artifacts after the initial redaction:

- the remediation patch: a diff removing a hardcoded secret carries the
  raw value on its '-' lines by construction. harden now splits output:
  non-credential hunks in the shareable security_remediation.patch,
  credential hunks in a gitignored security_remediation.local.patch
  with comment-only placeholders in the shareable file
- the other four agents had no secret-handling rules. legacy-analyst
  (hardcoded-config evidence in tech-debt findings),
  business-rules-extractor (credentials recorded as rule parameters),
  test-engineer (legacy literals becoming committed test fixtures), and
  architecture-critic (quoted code in notes files) now all mask values
  and cite file:line; assess's tech-debt prompt and ASSESSMENT.md
  masking now cover every section, not just Security Findings
- non-git projects: a .gitignore protects nothing under SVN/Mercurial.
  Both commands now refuse --show-secrets without git and write the
  quarantine file to ~/.modernize/<system>/ outside the project tree
- the patch-apply instruction was wrong in both documented layouts
  (symlinked legacy/ broke relative paths). Patches are now written
  with project-root-relative paths and applied from the project root

Also: --show-secrets is now position-independent in both commands, and
the README documents the full model.
2026-06-09 08:47:34 -07:00
Morgan Lunt
ff5feaeb7f code-modernization: never write discovered credential values into findings
Legacy systems often contain live credentials, and assessment/findings
files get committed and shared. Previously the security-auditor agent
reported hardcoded secrets verbatim into ASSESSMENT.md and
SECURITY_FINDINGS.md.

- security-auditor: mandatory secret-handling rules — mask all credential
  values (file:line + 2-4 char preview), redact secrets from echoed tool
  output, recommend rotation for anything that looks live
- assess/harden: gitignore-verified SECRETS.local.md quarantine file for
  the per-credential inventory; findings files get masked entries and a
  pointer only
- new --show-secrets flag opts into raw values in the quarantine file
  (and only there)
- README: document the behavior and advise users of earlier versions to
  check for already-committed findings and rotate
2026-06-09 08:47:33 -07:00
github-actions[bot]
379a00dba5 bump(sap-fiori-mcp-server): fbfe8c32 → 604f2895 (#2500)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 07:53:05 -05:00
github-actions[bot]
0161a176c7 bump(airwallex): a903ab76 → a49ef1ec (#2499)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 07:52:43 -05:00
github-actions[bot]
7dd654e4ea bump(wix): 188ed338 → 9666bc8d (#2502)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 07:52:20 -05:00
github-actions[bot]
b167faa74a bump(data-agent-kit-starter-pack): fb908645 → b47cae53 (#2481)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 07:51:57 -05:00
github-actions[bot]
bdde825b98 bump(42crunch-api-security-testing): db2fb7e5 → a5172167 (#2469)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 07:51:45 -05:00
github-actions[bot]
cd49446ad3 bump(databases-on-aws): fc54dfa2 → d8243e5f (#2482)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 07:51:17 -05:00
github-actions[bot]
b667e7f193 bump(deploy-on-aws): fc54dfa2 → d8243e5f (#2484)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 07:51:06 -05:00
github-actions[bot]
a3a7e77735 bump(migration-to-aws): 1dd90935 → b3e5ee48 (#2488)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 07:50:59 -05:00
github-actions[bot]
6ab6953eee bump(snowflake-cortex-code): 6a22eb1f → 2462e1ba (#2495)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 07:50:48 -05:00
github-actions[bot]
27524414d8 bump(amazon-location-service): fc54dfa2 → d8243e5f (#2471)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 07:50:37 -05:00
github-actions[bot]
336212b41d bump(aws-data-analytics): 55b9acfe → 7a1422d5 (#2475)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 07:50:26 -05:00
github-actions[bot]
dd7fcb43f2 bump(carta-cap-table): 9eb31290 → 732981ca (#2478)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 07:50:15 -05:00
github-actions[bot]
ebecea5c95 bump(aws-startup-advisor): 1dd90935 → b3e5ee48 (#2477)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 07:50:11 -05:00
github-actions[bot]
8525d71094 bump(adobe-for-creativity): e23271f6 → 253f5690 (#2470)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 07:50:01 -05:00
github-actions[bot]
8288a4a320 bump(sagemaker-ai): fc54dfa2 → d8243e5f (#2493)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 07:49:30 -05:00
github-actions[bot]
0d91490722 bump(quarkus-agent): e711107a → 91c7986e (#2492)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 07:49:23 -05:00
github-actions[bot]
de6b8cf296 bump(carta-investors): 9eb31290 → 732981ca (#2480)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 07:49:11 -05:00
github-actions[bot]
b4f01b62bf bump(carta-crm): 9eb31290 → 732981ca (#2479)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 07:48:59 -05:00
github-actions[bot]
d7d03756e2 bump(nvidia-skills): 0482ebce → d0e07bd3 (#2490)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 07:48:47 -05:00
github-actions[bot]
54eb24e9d6 bump(netlify-skills): 5f777ba6 → 22025ef6 (#2489)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 07:48:35 -05:00
github-actions[bot]
8acfe8b3cb bump(aws-core): 55b9acfe → 7a1422d5 (#2474)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 07:48:23 -05:00
github-actions[bot]
1fb5d16181 bump(aws-serverless): fc54dfa2 → d8243e5f (#2476)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 07:48:12 -05:00
github-actions[bot]
8aac392a4d bump(aws-amplify): fc54dfa2 → d8243e5f (#2473)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 07:48:00 -05:00
github-actions[bot]
eeb0e11315 bump(aws-agents): 55b9acfe → 7a1422d5 (#2472)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 07:47:53 -05:00
github-actions[bot]
22be09177b bump(sentry-cli): 9e9fe0fb → dc99b4d1 (#2494)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 07:47:34 -05:00
github-actions[bot]
1f5ce124fa bump(hyperframes): 25420bf4 → 24279c8c (#2487)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 07:44:01 -05:00
github-actions[bot]
30f8e267a1 bump(dataverse): 2d50cf65 → 2c373943 (#2483)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 07:43:23 -05:00
github-actions[bot]
7be381f4cf bump(exa): f0838825 → 9ea4ba3e (#2485)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 07:05:31 -05:00
github-actions[bot]
3175a58228 bump(figma): a742f0a7 → 54ad1560 (#2486)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 06:30:13 -05:00
github-actions[bot]
c78c61e117 bump(outputai): 2cc4685e → fc6a93e6 (#2491)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 05:05:03 -05:00
github-actions[bot]
e7710f24ba bump(sumup): 715464b4 → 5b9b2d72 (#2496)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 04:21:58 -05:00
github-actions[bot]
2fe8c1d7ad bump(workos): e8900cc5 → 2c3acef6 (#2497)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-09 03:21:25 -05:00
github-actions[bot]
bbbff6ab54 bump(qdrant-skills): 11df00a7 → 82337ccd (#2458)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-08 13:38:37 -05:00
github-actions[bot]
6105eea1c6 bump(sentry-cli): 329f5c5d → 9e9fe0fb (#2462)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-08 13:38:13 -05:00
github-actions[bot]
7a574ede07 bump(codspeed): 9793aaf9 → c6112f16 (#2451)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-08 13:37:48 -05:00
github-actions[bot]
50507ce03c bump(expo): 145a923c → c3886024 (#2452)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-08 13:37:24 -05:00
github-actions[bot]
9dbb38fff1 bump(oracle-ai-data-platform-workbench-spark-connectors): 04cc355f → 00cedef3 (#2456)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-08 13:36:45 -05:00
github-actions[bot]
0f2b68bec6 bump(sap-fiori-mcp-server): f6e9ae1f → fbfe8c32 (#2461)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-08 13:36:19 -05:00
github-actions[bot]
e408e54811 bump(aws-data-analytics): df13dea6 → 55b9acfe (#2445)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-08 13:35:53 -05:00
github-actions[bot]
7a5c13e654 bump(carta-cap-table): 0227331a → 9eb31290 (#2447)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-08 13:35:26 -05:00
github-actions[bot]
a0bf1eed49 bump(chrome-devtools-mcp): 7afd0167 → 702d3734 (#2450)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-08 13:34:57 -05:00
github-actions[bot]
e0825af81b bump(brightdata-plugin): 3e6d0838 → bd5bd76b (#2446)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-08 13:34:27 -05:00
github-actions[bot]
318f7c9674 bump(carta-crm): 0227331a → 9eb31290 (#2448)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-08 13:33:56 -05:00
github-actions[bot]
60706e7bc3 bump(carta-investors): 0227331a → 9eb31290 (#2449)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-08 13:33:27 -05:00
github-actions[bot]
f00d6d8005 bump(nvidia-skills): e29b3c65 → 0482ebce (#2455)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-08 13:32:56 -05:00
github-actions[bot]
48bbef8757 bump(hyperframes): 1fd1b316 → 25420bf4 (#2453)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-08 13:32:48 -05:00
github-actions[bot]
4d5ccd2968 bump(jfrog): 8324c7fc → 117febaa (#2454)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-08 13:32:16 -05:00
github-actions[bot]
aa6e8702bc bump(posthog): 9105eb4d → db4a8663 (#2457)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-08 13:31:43 -05:00
github-actions[bot]
36046dac80 bump(rc): b34f9beb → 473fd504 (#2459)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-08 13:31:12 -05:00
github-actions[bot]
19b7347f82 bump(aws-core): df13dea6 → 55b9acfe (#2444)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-08 13:30:47 -05:00
github-actions[bot]
d321de478d bump(revenuecat): b34f9beb → 473fd504 (#2460)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-08 13:30:38 -05:00
github-actions[bot]
4a501b5766 bump(aws-agents): df13dea6 → 55b9acfe (#2443)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-08 13:30:32 -05:00
github-actions[bot]
795d2ba506 bump(valtown): a3e88468 → 02631f99 (#2464)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-08 13:30:11 -05:00
github-actions[bot]
297568419b bump(wix): 8ed898ab → 188ed338 (#2465)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-08 13:30:01 -05:00
github-actions[bot]
ed3ff7abb3 bump(clickhouse-best-practices): 3a1ee115 → 544384f4 (#2436)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-08 08:15:22 -05:00
github-actions[bot]
6046414b87 bump(huggingface-skills): 504191c5 → d7223848 (#2438)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-08 08:15:10 -05:00
github-actions[bot]
a348b32801 bump(clickhouse): 1f30864b → ecbd4762 (#2435)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-08 08:14:53 -05:00
github-actions[bot]
c033853393 bump(dash0): 1e64ae2d → 5ff7aa5b (#2437)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-08 08:14:29 -05:00
github-actions[bot]
2b08b5b3ca bump(42crunch-api-security-testing): c2951754 → db2fb7e5 (#2433)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-08 08:13:49 -05:00
github-actions[bot]
0d0478adb9 bump(sap-fiori-mcp-server): 070cb3c2 → f6e9ae1f (#2440)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-08 08:13:25 -05:00
github-actions[bot]
e007f1b979 bump(chrome-devtools-mcp): f90f863d → 7afd0167 (#2434)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-08 08:12:57 -05:00
github-actions[bot]
3aa99bd279 bump(hyperframes): fc01717c → 1fd1b316 (#2439)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-08 08:12:48 -05:00
github-actions[bot]
f5962b8e64 bump(wix): 038e0c55 → 8ed898ab (#2441)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-08 08:12:14 -05:00
github-actions[bot]
1b46aa6d4a bump(hyperframes): 48fcf4ad → fc01717c (#2427)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-07 20:02:17 -05:00
github-actions[bot]
7cdfbb4cb2 bump(dataverse): ab906c96 → 2d50cf65 (#2426)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-07 20:01:41 -05:00
github-actions[bot]
13bb250718 bump(brightdata-plugin): 68651246 → 3e6d0838 (#2422)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-07 13:03:03 -05:00
github-actions[bot]
8f2f03a654 bump(hyperframes): 29d6f1ea → 48fcf4ad (#2423)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-07 13:02:41 -05:00
github-actions[bot]
e27e302c39 bump(wix): 3f8f2a68 → 038e0c55 (#2424)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-07 13:02:21 -05:00
github-actions[bot]
50d9d8775d bump(exa): ad888a18 → f0838825 (#2415)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-07 08:41:51 -05:00
github-actions[bot]
f13b8b9fb2 bump(railway): daa67716 → 1df604eb (#2417)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-07 08:41:29 -05:00
github-actions[bot]
84c2cdf3ad bump(hyperframes): dd956744 → 29d6f1ea (#2416)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-07 08:41:17 -05:00
github-actions[bot]
d136461a6c bump(wix): 29a68ecd → 3f8f2a68 (#2418)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-07 08:41:07 -05:00
github-actions[bot]
1fb8ee7628 bump(hyperframes): 731bc78f → dd956744 (#2413)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-06 19:02:51 -05:00
github-actions[bot]
093e91b259 bump(hyperframes): 16416734 → 731bc78f (#2412)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-06 15:30:43 -05:00
github-actions[bot]
fc4b52db22 bump(snowflake-cortex-code): dbd0d635 → 6a22eb1f (#2409)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-06 13:03:28 -05:00
github-actions[bot]
d447c246ca bump(wix): 9dca098f → 29a68ecd (#2410)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-06 13:03:07 -05:00
github-actions[bot]
6cf7e6331e bump(snowflake-cortex-code): 54760f12 → dbd0d635 (#2397)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-06 10:15:08 -05:00
github-actions[bot]
139e43d457 bump(ui5-typescript-conversion): 767ac53c → 9b3d7d80 (#2401)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-06 10:14:47 -05:00
github-actions[bot]
67f20b04f0 bump(carta-crm): 54602de6 → 0227331a (#2393)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-06 10:14:26 -05:00
github-actions[bot]
18ccde8c37 bump(carta-investors): 54602de6 → 0227331a (#2394)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-06 10:14:04 -05:00
github-actions[bot]
0ea0ddc5cc bump(nvidia-skills): bb0436fa → e29b3c65 (#2396)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-06 10:13:42 -05:00
github-actions[bot]
bc00d658e7 bump(teamcity-cli): 3cc3013c → 67e21f0b (#2398)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-06 10:13:19 -05:00
github-actions[bot]
5ca5306896 bump(togetherai-skills): 9772f2a2 → fb94cc14 (#2399)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-06 10:12:56 -05:00
github-actions[bot]
76d3c7ee37 bump(vibe-prospecting): 7ed0c4e2 → aa5903f5 (#2403)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-06 10:12:32 -05:00
github-actions[bot]
88afc50343 bump(hyperframes): bacfb175 → 16416734 (#2395)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-06 10:12:06 -05:00
github-actions[bot]
ed4e896219 bump(ui5): 767ac53c → 9b3d7d80 (#2400)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-06 10:11:41 -05:00
github-actions[bot]
ec38e7a881 bump(valtown): e01069e1 → a3e88468 (#2402)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-06 10:11:15 -05:00
github-actions[bot]
f1e2e3f1e4 bump(wix): f99715fc → 9dca098f (#2404)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-06 10:10:48 -05:00
github-actions[bot]
8b26e9f1c1 bump(carta-cap-table): 54602de6 → 0227331a (#2392)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-06 10:10:04 -05:00
github-actions[bot]
7562e052d5 bump(zapier): f34a7854 → 770167c5 (#2405)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-06 10:09:52 -05:00
github-actions[bot]
4b538d5d40 bump(zscaler): be37fb60 → f84ce4f0 (#2406)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-06 10:09:23 -05:00
github-actions[bot]
3d5017bc1d bump(sap-fiori-mcp-server): b326a9a5 → 070cb3c2 (#2384)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 19:41:21 -05:00
github-actions[bot]
d56b86d462 bump(carta-cap-table): 26056825 → 54602de6 (#2366)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 19:41:12 -05:00
github-actions[bot]
4fe9dd9b4b bump(aws-startup-advisor): ad7eadc8 → 1dd90935 (#2365)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 19:41:03 -05:00
github-actions[bot]
7dc4ed688f bump(chrome-devtools-mcp): 89718901 → f90f863d (#2369)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 19:40:53 -05:00
github-actions[bot]
65a01fafdc bump(datarobot-agent-skills): debe471c → b5a8f7a4 (#2372)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 19:40:44 -05:00
github-actions[bot]
dcc5a1a8b3 bump(migration-to-aws): ad7eadc8 → 1dd90935 (#2378)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 19:40:35 -05:00
github-actions[bot]
0278237073 bump(save-to-spotify): 35527660 → cd4ea681 (#2385)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 19:40:25 -05:00
github-actions[bot]
659f9f42ad bump(desktop-commander): f53f916f → 7a9b2ff0 (#2373)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 19:21:14 -05:00
github-actions[bot]
659d30b1f6 bump(huggingface-skills): 14cea99d → 504191c5 (#2374)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 19:21:05 -05:00
github-actions[bot]
c7ec509ba6 bump(qdrant-skills): 21c64d2e → 11df00a7 (#2381)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 19:20:40 -05:00
github-actions[bot]
317a14e25e bump(sentry-cli): 5b78ddaf → 329f5c5d (#2387)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 19:20:14 -05:00
github-actions[bot]
22bb99c414 bump(hunter): 3f8f3f5f → 494b0bd6 (#2375)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 19:19:48 -05:00
github-actions[bot]
7929ae4a4b bump(hyperframes): 4b51cc64 → bacfb175 (#2376)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 19:19:21 -05:00
github-actions[bot]
c422aeed0c bump(looker): ca53ea9d → e912c034 (#2377)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 19:18:54 -05:00
github-actions[bot]
a68871c83b bump(outputai): 5d7e612a → 2cc4685e (#2379)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 19:18:27 -05:00
github-actions[bot]
08a05826ce bump(posthog): d9d80933 → 9105eb4d (#2380)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 19:17:59 -05:00
github-actions[bot]
44fa671ac4 bump(railway): 831130cd → daa67716 (#2382)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 19:17:30 -05:00
github-actions[bot]
303bc792b4 bump(resend): 0f598ef5 → 0888546d (#2383)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 19:17:01 -05:00
github-actions[bot]
13882305d8 bump(42crunch-api-security-testing): 27815ced → c2951754 (#2362)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 19:16:16 -05:00
github-actions[bot]
3fdc816735 bump(shopify-ai-toolkit): 859be93b → a8e87a7c (#2388)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 19:16:08 -05:00
github-actions[bot]
f3a89dac7c bump(snowflake-cortex-code): c3f72002 → 54760f12 (#2389)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 19:15:36 -05:00
github-actions[bot]
330882bb53 bump(agentforce-adlc): 1db738be → fad761fc (#2363)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 19:15:05 -05:00
github-actions[bot]
6fa207be17 bump(carta-crm): 26056825 → 54602de6 (#2367)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 19:14:32 -05:00
github-actions[bot]
d50355a54d bump(carta-investors): 26056825 → 54602de6 (#2368)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 19:14:00 -05:00
github-actions[bot]
6658696d8f bump(auth0): beda869d → bdf0dc23 (#2364)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 19:13:53 -05:00
github-actions[bot]
71216eb7e0 bump(cloudflare): 60147cbb → c5b7b06b (#2370)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 19:13:19 -05:00
github-actions[bot]
b1e201e422 bump(codspeed): bfff1506 → 9793aaf9 (#2371)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 19:12:44 -05:00
github-actions[bot]
8bb44ef9b8 bump(sentry): 849303a8 → 030b01fb (#2386)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 19:12:35 -05:00
github-actions[bot]
9c0179fb60 bump(stripe): e27ee009 → b8f6adcb (#2390)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 19:11:58 -05:00
github-actions[bot]
f2c56408f8 bump(supabase): 3217ac03 → 2ed49769 (#2391)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 19:11:21 -05:00
Bryan Thompson
4230aea142 Add knowledge-catalog plugin (#2321) 2026-06-05 12:15:15 -07:00
Bryan Thompson
a60315ae16 Add alloydb-omni plugin (#2325) 2026-06-05 12:15:12 -07:00
Bryan Thompson
d46ebdd1eb Add cloud-sql-sqlserver plugin (#2322) 2026-06-05 12:14:55 -07:00
Bryan Thompson
30a7536d0f Add dataproc plugin (#2324) 2026-06-05 12:14:41 -07:00
Bryan Thompson
f0fc619c64 Add bigquery-data-analytics plugin (#2317) 2026-06-05 12:14:38 -07:00
Bryan Thompson
c770602299 Add cloud-sql-mysql plugin (#2323) 2026-06-05 12:14:18 -07:00
Bryan Thompson
89bc907203 Add oracledb plugin (#2319) 2026-06-05 12:14:13 -07:00
Bryan Thompson
948295e907 Add firestore-native plugin (#2320) 2026-06-05 12:14:10 -07:00
Bryan Thompson
9883cde440 Add looker plugin (#2318) 2026-06-05 12:13:55 -07:00
Bryan Thompson
96d59f53eb Add spanner plugin (#2316) 2026-06-05 12:13:52 -07:00
github-actions[bot]
e4fc76d71f bump(qdrant-skills): cace39df → 21c64d2e (#2354)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 11:16:56 -05:00
github-actions[bot]
ef7eea8a27 bump(carta-crm): ea02da68 → 26056825 (#2333)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 11:16:52 -05:00
github-actions[bot]
607793a939 bump(netlify-skills): cffaf74f → 5f777ba6 (#2348)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 11:16:36 -05:00
github-actions[bot]
2b019efea0 bump(nvidia-skills): e695a839 → bb0436fa (#2349)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 11:16:11 -05:00
github-actions[bot]
983f2789dc bump(carta-investors): ea02da68 → 26056825 (#2334)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 11:16:07 -05:00
github-actions[bot]
1f910e18c0 bump(azure): 58fd9094 → 02a614f6 (#2331)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 11:16:04 -05:00
github-actions[bot]
908c255afb bump(apollo-skills): 9ccf1347 → 60508910 (#2328)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 11:15:58 -05:00
github-actions[bot]
435820146b bump(codspeed): f79d57d2 → bfff1506 (#2336)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 08:58:09 -05:00
github-actions[bot]
c1f2ebd30c bump(expo): fdd3df12 → 145a923c (#2341)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 08:57:43 -05:00
github-actions[bot]
bfd6cc4453 bump(fullstory): 384555c3 → b20614e2 (#2343)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 08:57:16 -05:00
github-actions[bot]
90a522ac76 bump(hunter): 69c4e59e → 3f8f3f5f (#2344)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 08:56:49 -05:00
github-actions[bot]
e01bc27de9 bump(hyperframes): 8228932e → 4b51cc64 (#2345)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 08:56:21 -05:00
github-actions[bot]
0cc28d3f85 bump(outputai): d3c9b1f4 → 5d7e612a (#2351)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 08:55:52 -05:00
github-actions[bot]
2a2965bf7d bump(pigment): abf36e64 → f7bb2190 (#2352)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 08:55:23 -05:00
github-actions[bot]
2ee946660a bump(posthog): a4873114 → d9d80933 (#2353)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 08:54:54 -05:00
github-actions[bot]
2b0af2c713 bump(aws-startup-advisor): 30808e64 → ad7eadc8 (#2330)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 08:54:10 -05:00
github-actions[bot]
285c6086c8 bump(carta-cap-table): ea02da68 → 26056825 (#2332)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 08:53:39 -05:00
github-actions[bot]
64d2239ee3 bump(clickhouse-best-practices): 46ef08cc → 3a1ee115 (#2335)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 08:53:08 -05:00
github-actions[bot]
c5a851d162 bump(crowdstrike-falcon-foundry): b3f4ecb4 → c542c932 (#2337)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 08:52:36 -05:00
github-actions[bot]
00e70ff764 bump(datarobot-agent-skills): 90a33c0c → debe471c (#2339)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 08:52:04 -05:00
github-actions[bot]
f76697f228 bump(migration-to-aws): 30808e64 → ad7eadc8 (#2347)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 08:51:32 -05:00
github-actions[bot]
7e7fd1e19f bump(desktop-commander): cf857bf0 → f53f916f (#2340)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 08:51:24 -05:00
github-actions[bot]
1084105a18 bump(forge-skills): 2014fae5 → 02103cca (#2342)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 08:50:50 -05:00
github-actions[bot]
636410d7b4 bump(mcp-apps): a9907802 → ca1d2989 (#2346)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 08:50:15 -05:00
github-actions[bot]
fa09cccba0 bump(quarkus-agent): 01847d5d → e711107a (#2355)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 08:50:07 -05:00
github-actions[bot]
b41c121fef bump(auth0): 9d93554c → beda869d (#2329)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 08:49:31 -05:00
github-actions[bot]
58d3bf4a70 bump(oracle-ai-data-platform-workbench-spark-connectors): dcd5a5a1 → 04cc355f (#2350)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 08:49:06 -05:00
github-actions[bot]
e5483762ee bump(dash0): 8801a219 → 1e64ae2d (#2338)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 08:48:48 -05:00
github-actions[bot]
94d4566c99 bump(42crunch-api-security-testing): 1db60984 → 27815ced (#2327)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 08:48:22 -05:00
github-actions[bot]
2346b18566 bump(sanity): 7e049737 → 66f0ec5d (#2356)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-05 08:47:59 -05:00
19 changed files with 1286 additions and 170 deletions

View File

@@ -19,7 +19,7 @@
"url": "https://github.com/42Crunch-AI/claude-plugins.git",
"path": "plugins/api-security-testing",
"ref": "v1.5.5",
"sha": "1db609845441d4fa8862019191e4138e61f77e67"
"sha": "b7e131e30ff033be2176faf796c94c151a68c63a"
},
"homepage": "https://42crunch.com"
},
@@ -35,7 +35,7 @@
"url": "https://github.com/adobe/skills.git",
"path": "plugins/creative-cloud/adobe-for-creativity",
"ref": "main",
"sha": "e23271f65aa7572f567d085d6baec5c2408e2ad5"
"sha": "253f56901e058800ccb97ffd5bf1e3329d5f2e00"
},
"homepage": "https://github.com/adobe/skills/tree/main/plugins/creative-cloud/adobe-for-creativity"
},
@@ -57,7 +57,7 @@
"source": {
"source": "url",
"url": "https://github.com/SalesforceAIResearch/agentforce-adlc.git",
"sha": "1db738befed88c2ee6d068482cfd64a10c97e2ef"
"sha": "fad761fce6cba119d23792b3a96a3bf33e23c566"
},
"homepage": "https://github.com/SalesforceAIResearch/agentforce-adlc"
},
@@ -67,7 +67,7 @@
"source": {
"source": "url",
"url": "https://github.com/endorlabs/ai-plugins.git",
"sha": "975f0ce422b1f2677681ffd085aef34ea1826b70"
"sha": "a6737fcf72336399e212e45cd25a250c2df3b7b4"
},
"homepage": "https://www.endorlabs.com"
},
@@ -93,7 +93,7 @@
"url": "https://github.com/Airtable/skills.git",
"path": "plugins/airtable",
"ref": "main",
"sha": "21d2fe52774d861e2f2f997eeac2bf965e8590b8"
"sha": "295ab93b7d765912ee1a0dc7f1abb0ecaf73f138"
},
"homepage": "https://www.airtable.com"
},
@@ -109,7 +109,7 @@
"url": "https://github.com/airwallex/airwallex-marketplace.git",
"path": "plugins/airwallex",
"ref": "master",
"sha": "a903ab7693a5f6d46f2fab6f895a2f96a879ee0f"
"sha": "a49ef1ec801fd776adc4db9f2bb4a78463981bc9"
},
"homepage": "https://www.airwallex.com/docs"
},
@@ -127,6 +127,20 @@
},
"homepage": "https://cloud.google.com/alloydb"
},
{
"name": "alloydb-omni",
"description": "Create, connect, and interact with an AlloyDB Omni database and data.",
"author": {
"name": "Google LLC"
},
"category": "database",
"source": {
"source": "url",
"url": "https://github.com/gemini-cli-extensions/alloydb-omni.git",
"sha": "fbf2476630629f32ce0029bbd62d225950fdfd6d"
},
"homepage": "https://github.com/gemini-cli-extensions/alloydb-omni"
},
{
"name": "amazon-location-service",
"description": "Guide developers through adding maps, places search, geocoding, routing, and other geospatial features with Amazon Location Service, including authentication setup, SDK integration, and best practices.",
@@ -136,7 +150,7 @@
"url": "https://github.com/awslabs/agent-plugins.git",
"path": "plugins/amazon-location-service",
"ref": "main",
"sha": "fc54dfa24a1f05095b9fcbb4baa4750996bb171d"
"sha": "d8243e5f8f3933d656b3bdfe09cd658a5d9b9fac"
},
"homepage": "https://github.com/awslabs/agent-plugins"
},
@@ -177,7 +191,7 @@
"source": {
"source": "url",
"url": "https://github.com/apollographql/skills.git",
"sha": "9ccf13477e116ec095ba9b606212492ffbd42926"
"sha": "605089108a198e412f7f0c1926c91eb94a6d1727"
},
"homepage": "https://www.apollographql.com"
},
@@ -242,7 +256,7 @@
"source": "url",
"url": "https://github.com/BrainBlend-AI/atomic-agents.git",
"path": "claude-plugin/atomic-agents",
"sha": "324399402b9b5965313de6a34ea09d6bb149a200"
"sha": "dfe17760ab6cfa7fa1567df2dc18627f132d180d"
},
"homepage": "https://github.com/BrainBlend-AI/atomic-agents",
"tags": [
@@ -261,7 +275,7 @@
"url": "https://github.com/auth0/agent-skills.git",
"path": "plugins/auth0",
"ref": "main",
"sha": "9d93554c5d91bd087a46f4d6825f80c3eb981945"
"sha": "bdf0dc23f8b17446b2c94bc9f2e5a58d3f1bc114"
},
"homepage": "https://auth0.com/docs/quickstart/agent-skills"
},
@@ -277,7 +291,7 @@
"url": "https://github.com/aws/agent-toolkit-for-aws.git",
"path": "plugins/aws-agents",
"ref": "main",
"sha": "df13dea64baaa1b7031b25d1b2f380756131efec"
"sha": "c0991f463b54ac94af32a730d6d13293dcff98cf"
},
"homepage": "https://github.com/aws/agent-toolkit-for-aws"
},
@@ -290,7 +304,7 @@
"url": "https://github.com/awslabs/agent-plugins.git",
"path": "plugins/aws-amplify",
"ref": "main",
"sha": "fc54dfa24a1f05095b9fcbb4baa4750996bb171d"
"sha": "d8243e5f8f3933d656b3bdfe09cd658a5d9b9fac"
},
"homepage": "https://github.com/awslabs/agent-plugins"
},
@@ -306,7 +320,7 @@
"url": "https://github.com/aws/agent-toolkit-for-aws.git",
"path": "plugins/aws-core",
"ref": "main",
"sha": "df13dea64baaa1b7031b25d1b2f380756131efec"
"sha": "c0991f463b54ac94af32a730d6d13293dcff98cf"
},
"homepage": "https://github.com/aws/agent-toolkit-for-aws"
},
@@ -322,7 +336,7 @@
"url": "https://github.com/aws/agent-toolkit-for-aws.git",
"path": "plugins/aws-data-analytics",
"ref": "main",
"sha": "df13dea64baaa1b7031b25d1b2f380756131efec"
"sha": "c0991f463b54ac94af32a730d6d13293dcff98cf"
},
"homepage": "https://github.com/aws/agent-toolkit-for-aws"
},
@@ -351,7 +365,7 @@
"url": "https://github.com/awslabs/agent-plugins.git",
"path": "plugins/aws-serverless",
"ref": "main",
"sha": "fc54dfa24a1f05095b9fcbb4baa4750996bb171d"
"sha": "d8243e5f8f3933d656b3bdfe09cd658a5d9b9fac"
},
"homepage": "https://github.com/awslabs/agent-plugins"
},
@@ -367,7 +381,7 @@
"url": "https://github.com/awslabs/startups.git",
"path": "advisor/plugins/aws-startup-advisor",
"ref": "main",
"sha": "30808e64b08ba13aedcecade5a27bfbff06dba09"
"sha": "b3e5ee487ed27d8c776d9b854d7e109f1514c75b"
},
"homepage": "https://github.com/awslabs/startups"
},
@@ -378,7 +392,7 @@
"source": {
"source": "url",
"url": "https://github.com/microsoft/azure-skills.git",
"sha": "58fd90942ab5045481bf1632fa0c2d7746367e13"
"sha": "966330ee4fc61978b6e324993687e917125a1f36"
},
"homepage": "https://github.com/microsoft/azure-skills"
},
@@ -420,6 +434,20 @@
},
"homepage": "https://docs.bigdata.com"
},
{
"name": "bigquery-data-analytics",
"description": "Connect, query, and generate data insights for BigQuery datasets and data.",
"author": {
"name": "Google LLC"
},
"category": "database",
"source": {
"source": "url",
"url": "https://github.com/gemini-cli-extensions/bigquery-data-analytics.git",
"sha": "9cee2a03105d74648231ed3a5c4a63c4f194790d"
},
"homepage": "https://github.com/gemini-cli-extensions/bigquery-data-analytics"
},
{
"name": "box",
"description": "Work with your Box content directly from Claude Code — search files, organize folders, collaborate with your team, and use Box AI to answer questions, summarize documents, and extract data without leaving your workflow.",
@@ -444,7 +472,7 @@
"source": {
"source": "url",
"url": "https://github.com/brightdata/skills.git",
"sha": "68651246ad1819b98a1fc15ce10239e55406ff37"
"sha": "bd5bd76bc889f54b744bab3db3cbd42751a1e5b0"
},
"homepage": "https://docs.brightdata.com"
},
@@ -474,7 +502,7 @@
"url": "https://github.com/carta/plugins.git",
"path": "plugins/carta-cap-table",
"ref": "main",
"sha": "ea02da68e7be8bf4bc2bffe8f1fd7253f8d0b101"
"sha": "c39482a45c1e4c02922fe5cef3d61fb010a0b2d9"
},
"homepage": "https://carta.com"
},
@@ -490,7 +518,7 @@
"url": "https://github.com/carta/plugins.git",
"path": "plugins/carta-crm",
"ref": "main",
"sha": "ea02da68e7be8bf4bc2bffe8f1fd7253f8d0b101"
"sha": "c39482a45c1e4c02922fe5cef3d61fb010a0b2d9"
},
"homepage": "https://carta.com"
},
@@ -506,7 +534,7 @@
"url": "https://github.com/carta/plugins.git",
"path": "plugins/carta-investors",
"ref": "main",
"sha": "ea02da68e7be8bf4bc2bffe8f1fd7253f8d0b101"
"sha": "c39482a45c1e4c02922fe5cef3d61fb010a0b2d9"
},
"homepage": "https://carta.com"
},
@@ -533,7 +561,7 @@
"source": {
"source": "url",
"url": "https://github.com/ChromeDevTools/chrome-devtools-mcp.git",
"sha": "89718901174be7c0c58a1a2b29281ab2f053cd53"
"sha": "6bd8c91678035b5aa18ee40f72e1f630aa528837"
},
"homepage": "https://github.com/ChromeDevTools/chrome-devtools-mcp"
},
@@ -627,7 +655,7 @@
"source": {
"source": "url",
"url": "https://github.com/ClickHouse/clickhouse-claude-code-plugin.git",
"sha": "1f30864b720960a797e5c7f6138d328bec3984cb"
"sha": "ecbd47627d7e7b3de15b297b91e0abf3e6ebc746"
},
"homepage": "https://github.com/ClickHouse/clickhouse-claude-code-plugin"
},
@@ -641,10 +669,24 @@
"source": {
"source": "url",
"url": "https://github.com/ClickHouse/agent-skills.git",
"sha": "46ef08ccf32fa28587b64e0c79106ff437dc8fcb"
"sha": "544384f4fab1d6ed59f16a354d1c68296dfa6007"
},
"homepage": "https://clickhouse.com"
},
{
"name": "cloud-sql-mysql",
"description": "Connect and interact with a Cloud SQL for MySQL database and data.",
"author": {
"name": "Google LLC"
},
"category": "database",
"source": {
"source": "url",
"url": "https://github.com/gemini-cli-extensions/cloud-sql-mysql.git",
"sha": "983c804fe7dc58b3e58021960e7e1831a10e08b9"
},
"homepage": "https://github.com/gemini-cli-extensions/cloud-sql-mysql"
},
{
"name": "cloud-sql-postgresql",
"description": "Create, connect, and interact with a Cloud SQL for PostgreSQL database and data.",
@@ -659,12 +701,26 @@
},
"homepage": "https://cloud.google.com/sql"
},
{
"name": "cloud-sql-sqlserver",
"description": "Connect to Cloud SQL for SQL Server",
"author": {
"name": "Google LLC"
},
"category": "database",
"source": {
"source": "url",
"url": "https://github.com/gemini-cli-extensions/cloud-sql-sqlserver.git",
"sha": "8e1490ec8f659a5711655d2fa4241597a63d4883"
},
"homepage": "https://github.com/gemini-cli-extensions/cloud-sql-sqlserver"
},
{
"name": "cloudflare",
"source": {
"source": "url",
"url": "https://github.com/cloudflare/skills.git",
"sha": "60147cbb773649eadca89cee92b4e0caf02234b4"
"sha": "c5b7b06b073fa0b4abbd63964630f97d81da69c4"
},
"description": "Skills for the Cloudflare developer platform: Workers, Durable Objects, Agents SDK, MCP servers, Wrangler CLI, and web performance.",
"category": "deployment",
@@ -696,7 +752,7 @@
},
{
"name": "code-modernization",
"description": "Modernize legacy codebases (COBOL, legacy Java/C++, monolith web apps) with a structured assess / map / extract-rules / reimagine / transform / harden workflow and specialist review agents",
"description": "Modernize legacy codebases (COBOL, legacy Java/C++, monolith web apps) with a structured preflight / assess / map / extract-rules / brief / reimagine / transform / harden workflow, an interactive topology viewer, and specialist review agents",
"author": {
"name": "Anthropic",
"email": "support@anthropic.com"
@@ -748,7 +804,7 @@
"source": {
"source": "url",
"url": "https://github.com/CodSpeedHQ/codspeed.git",
"sha": "f79d57d207f039e44a31a976564715f7731e71b6"
"sha": "c6112f168b405df8e7310b12a9b80484cd01ac14"
},
"homepage": "https://codspeed.io"
},
@@ -816,7 +872,7 @@
"source": {
"source": "url",
"url": "https://github.com/CrowdStrike/foundry-skills.git",
"sha": "b3f4ecb48333d6007117a29650daa1989a228b5c"
"sha": "0a651a1472e4c03603780517374c654236bcce8b"
},
"homepage": "https://github.com/CrowdStrike/foundry-skills"
},
@@ -862,7 +918,7 @@
"source": {
"source": "url",
"url": "https://github.com/dash0hq/dash0-agent-plugin.git",
"sha": "8801a21931d80c543c0f51a4b7eef4cd1311c1b5"
"sha": "5ff7aa5b8e52e10d10e45ea8e2f7cbebc86758bf"
},
"homepage": "https://dash0.com/"
},
@@ -887,7 +943,7 @@
"source": {
"source": "url",
"url": "https://github.com/gemini-cli-extensions/data-agent-kit-starter-pack.git",
"sha": "fb9086456d5fbc780edf86f0ac413345ba628173"
"sha": "b47cae53405e90dd97d1ecde890a8d4707d1f115"
},
"homepage": "https://github.com/gemini-cli-extensions/data-agent-kit-starter-pack"
},
@@ -910,7 +966,7 @@
"url": "https://github.com/awslabs/agent-plugins.git",
"path": "plugins/databases-on-aws",
"ref": "main",
"sha": "fc54dfa24a1f05095b9fcbb4baa4750996bb171d"
"sha": "d8243e5f8f3933d656b3bdfe09cd658a5d9b9fac"
},
"homepage": "https://github.com/awslabs/agent-plugins"
},
@@ -942,6 +998,20 @@
},
"homepage": "https://datahub.com"
},
{
"name": "dataproc",
"description": "Manage Dataproc clusters and jobs.",
"author": {
"name": "Google LLC"
},
"category": "database",
"source": {
"source": "url",
"url": "https://github.com/gemini-cli-extensions/dataproc.git",
"sha": "80d126d27d84ded752c84668472dd6f75896fc59"
},
"homepage": "https://github.com/gemini-cli-extensions/dataproc"
},
{
"name": "datarobot-agent-skills",
"description": "DataRobot skills for AI/ML workflows — model training, deployment, predictions, feature engineering, monitoring, explainability, data preparation, App Framework CI/CD, and external agent monitoring.",
@@ -952,7 +1022,7 @@
"source": {
"source": "url",
"url": "https://github.com/datarobot-oss/datarobot-agent-skills.git",
"sha": "90a33c0c87362f28be88c14c0ef0f3469e6d2596"
"sha": "b5a8f7a4bc4d31a1f139a232efbba6127af0474a"
},
"homepage": "https://datarobot.com"
},
@@ -965,7 +1035,7 @@
"url": "https://github.com/microsoft/Dataverse-skills.git",
"path": ".github/plugins/dataverse",
"ref": "main",
"sha": "ab906c960db0f2da83c2cb92a3fd162ccaba9cb9"
"sha": "2c37394346be1afc1db12cc5b89f5dee3617c45c"
},
"homepage": "https://github.com/microsoft/Dataverse-skills"
},
@@ -978,7 +1048,7 @@
"url": "https://github.com/awslabs/agent-plugins.git",
"path": "plugins/deploy-on-aws",
"ref": "main",
"sha": "fc54dfa24a1f05095b9fcbb4baa4750996bb171d"
"sha": "d8243e5f8f3933d656b3bdfe09cd658a5d9b9fac"
},
"homepage": "https://github.com/awslabs/agent-plugins"
},
@@ -994,7 +1064,7 @@
"url": "https://github.com/wonderwhy-er/DesktopCommanderMCP.git",
"path": "plugins/claude",
"ref": "main",
"sha": "cf857bf061cb3b0e8673717dcac1f0fa2ecbdd40"
"sha": "7a9b2ff0339a7fdc29c06a9957b323ef478a1dde"
},
"homepage": "https://desktopcommander.app"
},
@@ -1056,7 +1126,7 @@
"source": {
"source": "url",
"url": "https://github.com/exa-labs/exa-mcp-server.git",
"sha": "ad888a188cdefbe832c9feed2c3a97d1cb93cb35"
"sha": "9ea4ba3e67f87c462c3e06b192470e837ed9009e"
},
"homepage": "https://exa.ai/docs/reference/exa-mcp"
},
@@ -1080,7 +1150,7 @@
"url": "https://github.com/expo/skills.git",
"path": "plugins/expo",
"ref": "main",
"sha": "fdd3df12151a208853fe540ffea9a67773446377"
"sha": "c38860242118df93d4ec4381a34f4144fff61928"
},
"homepage": "https://github.com/expo/skills/blob/main/plugins/expo/README.md"
},
@@ -1096,7 +1166,7 @@
"source": {
"source": "url",
"url": "https://github.com/fastly/fastly-agent-toolkit.git",
"sha": "6bd17d685a1b361a2b368bf0236f39efb1be62d6"
"sha": "73af5b94a98448ffeed6e2993495dc83c9a597be"
},
"homepage": "https://github.com/fastly/fastly-agent-toolkit/blob/main/README.md"
},
@@ -1128,7 +1198,7 @@
"source": {
"source": "url",
"url": "https://github.com/figma/mcp-server-guide.git",
"sha": "a742f0a700a7772ff5ed85f7c9fc1dad5afa9fcc"
"sha": "54ad156019d7362a56d8024b9adbe99952aa29b6"
},
"homepage": "https://github.com/figma/mcp-server-guide"
},
@@ -1146,10 +1216,24 @@
"source": {
"source": "url",
"url": "https://github.com/firecrawl/firecrawl-claude-plugin.git",
"sha": "6768fb78185aab9e5b5a04777f84703863fb025b"
"sha": "b33447585ac521b091eae672bd4cad4ec1d093f6"
},
"homepage": "https://github.com/firecrawl/firecrawl-claude-plugin.git"
},
{
"name": "firestore-native",
"description": "Connect and interact with Firestore databases, collections, and documents.",
"author": {
"name": "Google LLC"
},
"category": "database",
"source": {
"source": "url",
"url": "https://github.com/gemini-cli-extensions/firestore-native.git",
"sha": "f88103bd0ccfe9e1e7a3a7d849de26d197978c9a"
},
"homepage": "https://github.com/gemini-cli-extensions/firestore-native"
},
{
"name": "forge-skills",
"description": "Forge-focused skills and MCP configuration for Atlassian Forge: scaffold and deploy apps (forge create, templates, dev spaces), build Teamwork Graph connectors for Rovo Search/Rovo Chat, pre-deploy review, systematic debugging, plus Forge docs and Atlassian Design System lookups via MCP.",
@@ -1160,7 +1244,7 @@
"source": {
"source": "url",
"url": "https://github.com/atlassian/forge-skills.git",
"sha": "2014fae5b1529a22629129b1564ae522593eb46d"
"sha": "c7df956176eb1c2a10ffabc4eaacc5d843d8bede"
},
"homepage": "https://developer.atlassian.com/platform/forge/"
},
@@ -1186,7 +1270,7 @@
"source": "github",
"repo": "fullstorydev/fullstory-skills",
"commit": "1ec5865e7ab1449f9a0859d164c4b6a8c53b6e2f",
"sha": "384555c3919a0631a096de1172998c8d855a0f26"
"sha": "b20614e2d08d7a7c70775bb62b5af640f60b024b"
},
"homepage": "https://www.fullstory.com"
},
@@ -1249,7 +1333,7 @@
"source": {
"source": "url",
"url": "https://github.com/huggingface/skills.git",
"sha": "14cea99d5cd028974dbdd8bc12118882cd7a1b67"
"sha": "d7223848c3895fbd447faf2aec73e0a6cdd7fdcd"
},
"homepage": "https://github.com/huggingface/skills.git"
},
@@ -1263,7 +1347,7 @@
"source": {
"source": "url",
"url": "https://github.com/hunter-io/claude-plugin.git",
"sha": "69c4e59ee573f4ccd8aa38bbc89e356bc8e7f876"
"sha": "06bcb94a4e6498d8557a4543f8d5c4ea429b0c0a"
},
"homepage": "https://hunter.io"
},
@@ -1277,7 +1361,7 @@
"source": {
"source": "url",
"url": "https://github.com/heygen-com/hyperframes.git",
"sha": "8228932e17e3371d5cf77ac5d5988f5322892dad"
"sha": "acd8e11789a7bf92f0ed4fac24ff030cd758da37"
},
"homepage": "https://hyperframes.heygen.com"
},
@@ -1331,10 +1415,24 @@
"source": "github",
"repo": "jfrog/claude-plugin",
"commit": "259c8e718266c16e99b4f30ae9b1ed0f9f00d98d",
"sha": "8324c7fc9a5561398fe57b8a56db53bdbf1e2cda"
"sha": "6788fe15d4a63d47f038c05e58ae533aeb2dadb6"
},
"homepage": "https://jfrog.com"
},
{
"name": "knowledge-catalog",
"description": "Connect to Knowledge Catalog to discover, manage, monitor, and govern data and AI artifacts across your data platform",
"author": {
"name": "Google LLC"
},
"category": "database",
"source": {
"source": "url",
"url": "https://github.com/gemini-cli-extensions/knowledge-catalog.git",
"sha": "317e96fdd12aa61778b950192aff627efdc21099"
},
"homepage": "https://github.com/gemini-cli-extensions/knowledge-catalog"
},
{
"name": "kotlin-lsp",
"description": "Kotlin language server for code intelligence",
@@ -1442,10 +1540,24 @@
"url": "https://github.com/pydantic/skills.git",
"path": "plugins/logfire",
"ref": "main",
"sha": "e412b6d8d4b6199ac577c5ee8653dcff840b3e92"
"sha": "ddc7d00569458f3838c6cf489f5be6c59afaf8c1"
},
"homepage": "https://github.com/pydantic/skills/tree/main/plugins/logfire"
},
{
"name": "looker",
"description": "Connect to Looker and interact with your data using LookML.",
"author": {
"name": "Google LLC"
},
"category": "database",
"source": {
"source": "url",
"url": "https://github.com/gemini-cli-extensions/looker.git",
"sha": "e912c0342f1bfd436e9236aaef7cc732239c80f7"
},
"homepage": "https://github.com/gemini-cli-extensions/looker"
},
{
"name": "lua-lsp",
"description": "Lua language server for code intelligence",
@@ -1531,7 +1643,7 @@
"url": "https://github.com/modelcontextprotocol/ext-apps.git",
"path": "plugins/mcp-apps",
"ref": "main",
"sha": "a9907802937f1da067cbc4aa48b283cd4cfa7dc8"
"sha": "ca1d29894fabbd1558885a9ec8620dcb01d7457e"
},
"homepage": "https://modelcontextprotocol.io"
},
@@ -1596,7 +1708,7 @@
"url": "https://github.com/awslabs/startups.git",
"path": "migrate/plugins/migration-to-aws",
"ref": "main",
"sha": "30808e64b08ba13aedcecade5a27bfbff06dba09"
"sha": "3c5d6a7deb24c3318be8b78ef75545539ab1bbcd"
},
"homepage": "https://github.com/awslabs/startups"
},
@@ -1658,7 +1770,7 @@
"source": {
"source": "url",
"url": "https://github.com/netlify/context-and-tools.git",
"sha": "cffaf74f79128620b8200956222aeb819f5f8fd5"
"sha": "22025ef6c9dc9ef88d0c9c047980c10cacb178ee"
},
"homepage": "https://github.com/netlify/context-and-tools"
},
@@ -1727,7 +1839,7 @@
"url": "https://github.com/NVIDIA/skills.git",
"path": "plugins/nvidia-skills",
"ref": "main",
"sha": "e695a8397463bbb64d787b3cd88d3c58889be633"
"sha": "fd1e6fd1971eb7113a4dd206a028246fa4b3d8b4"
},
"homepage": "https://github.com/NVIDIA/skills"
},
@@ -1743,10 +1855,24 @@
"url": "https://github.com/oracle-samples/oracle-aidp-samples.git",
"path": "ai/claude-code-plugins/oracle-ai-data-platform-workbench-spark-connectors",
"ref": "main",
"sha": "dcd5a5a19537bf9aaa9dd4f48514bc4402bfbc40"
"sha": "00cedef34c99d642d969f87965736768de01cbd6"
},
"homepage": "https://docs.oracle.com/en/cloud/paas/ai-data-platform/index.html"
},
{
"name": "oracledb",
"description": "Connect, query, and interact with Oracle Databases and their data.",
"author": {
"name": "Google LLC"
},
"category": "database",
"source": {
"source": "url",
"url": "https://github.com/gemini-cli-extensions/oracledb.git",
"sha": "56239109760fd8ea838a56c946400347467bfa6d"
},
"homepage": "https://github.com/gemini-cli-extensions/oracledb"
},
{
"name": "outputai",
"description": "Output.ai workflow development toolkit for Claude Code. Adds 5 specialist agents (planner, builder, debugger, prompt writer, quality reviewer), 40+ slash-command skills covering scaffolding, debugging, evaluation, and credential management, plus a SessionStart hook that auto-loads Output SDK conventions so Claude understands the framework before the first prompt.",
@@ -1759,7 +1885,7 @@
"url": "https://github.com/growthxai/output.git",
"path": "coding_assistants/claude/plugins/outputai",
"ref": "main",
"sha": "d3c9b1f472358527386f7cc2bb6d4833d9bfe034"
"sha": "65cd087132dce880362c52384b8237eb9202ceea"
},
"homepage": "https://output.ai"
},
@@ -1807,7 +1933,7 @@
"source": {
"source": "url",
"url": "https://github.com/gopigment/ai-plugins.git",
"sha": "abf36e64750d1323a4cc5fe79161597668231224"
"sha": "f7bb2190a3f072bd9be5175bde6a0aa9596fcaaa"
},
"homepage": "https://www.pigment.com"
},
@@ -1869,7 +1995,7 @@
"source": {
"source": "url",
"url": "https://github.com/PostHog/ai-plugin.git",
"sha": "a487311487bc369ee75e70c893d0a0c5ed478ba8"
"sha": "db4a86632293ca66eec9a6d278786ddb22c1787e"
},
"homepage": "https://posthog.com/docs/model-context-protocol"
},
@@ -1924,7 +2050,7 @@
"url": "https://github.com/pydantic/skills.git",
"path": "plugins/ai",
"ref": "main",
"sha": "e412b6d8d4b6199ac577c5ee8653dcff840b3e92"
"sha": "ddc7d00569458f3838c6cf489f5be6c59afaf8c1"
},
"homepage": "https://github.com/pydantic/skills/tree/main/plugins/ai"
},
@@ -1962,7 +2088,7 @@
"source": {
"source": "url",
"url": "https://github.com/qdrant/skills.git",
"sha": "cace39df5cc46f7f0c192ced7391d767749142a0"
"sha": "82337ccd4be601e52871f101844d57b2adbac52b"
},
"homepage": "https://skills.qdrant.tech"
},
@@ -2001,7 +2127,7 @@
"source": {
"source": "url",
"url": "https://github.com/quarkusio/quarkus-agent-mcp.git",
"sha": "01847d5d2eca02bc5751cce18deb41ad76a7a873"
"sha": "91c7986e41234827db2632ed07770301468c9dbc"
},
"homepage": "https://quarkus.io"
},
@@ -2014,7 +2140,7 @@
"url": "https://github.com/railwayapp/railway-skills.git",
"path": "plugins/railway",
"ref": "main",
"sha": "831130cda8a659e8c47addd28be2744e9e67d31c"
"sha": "1df604ebd18f528ff16b84975125ecff944cc036"
},
"homepage": "https://docs.railway.com/ai/claude-code-plugin"
},
@@ -2037,7 +2163,7 @@
"source": "url",
"url": "https://github.com/RevenueCat/rc-claude-code-plugin.git",
"path": "revenuecat",
"sha": "b34f9bebe02ceb7e3f32e6d7d081cdfb2e7c37a6"
"sha": "473fd504bf13d25e76bf4a0267b42be3794f6266"
},
"homepage": "https://www.revenuecat.com"
},
@@ -2077,7 +2203,7 @@
"source": {
"source": "url",
"url": "https://github.com/resend/resend-skills.git",
"sha": "0f598ef55623e37a76f972e93a53ffa91c1dc9d1"
"sha": "0888546d6a69149c8d2402d46f395f5dddb1c720"
},
"homepage": "https://resend.com"
},
@@ -2089,7 +2215,7 @@
"source": "url",
"url": "https://github.com/RevenueCat/rc-claude-code-plugin.git",
"path": "revenuecat",
"sha": "b34f9bebe02ceb7e3f32e6d7d081cdfb2e7c37a6"
"sha": "473fd504bf13d25e76bf4a0267b42be3794f6266"
},
"homepage": "https://www.revenuecat.com"
},
@@ -2174,7 +2300,7 @@
"url": "https://github.com/awslabs/agent-plugins.git",
"path": "plugins/sagemaker-ai",
"ref": "main",
"sha": "fc54dfa24a1f05095b9fcbb4baa4750996bb171d"
"sha": "d8243e5f8f3933d656b3bdfe09cd658a5d9b9fac"
},
"homepage": "https://github.com/awslabs/agent-plugins"
},
@@ -2188,7 +2314,7 @@
"source": {
"source": "url",
"url": "https://github.com/sanity-io/agent-toolkit.git",
"sha": "7e04973754975e73b306b1d4dbae561160d797e9"
"sha": "66f0ec5d9167b3ccb8b3450e5ec34f3b523d4139"
},
"homepage": "https://www.sanity.io"
},
@@ -2222,7 +2348,7 @@
"url": "https://github.com/SAP/open-ux-tools.git",
"path": "packages/fiori-mcp-server",
"ref": "main",
"sha": "b326a9a52b1da51effed574587e31fe5a2755b96"
"sha": "604f28952b720579ca9369978ba73493092fdf13"
},
"homepage": "https://github.com/SAP/open-ux-tools/tree/main/packages/fiori-mcp-server"
},
@@ -2254,7 +2380,7 @@
"url": "https://github.com/spotify/save-to-spotify.git",
"path": "plugin",
"ref": "main",
"sha": "35527660378c769bcbcfba89d8086d8b9fc4fccb"
"sha": "cd4ea68111d96769b09c0b0d2199e692cf00a73c"
},
"homepage": "https://github.com/spotify/save-to-spotify"
},
@@ -2289,7 +2415,7 @@
"source": {
"source": "url",
"url": "https://github.com/getsentry/sentry-for-claude.git",
"sha": "849303a8411c242d250885ffe714235a3bc2f5fe"
"sha": "87de81a1300acc03fffa2438877fa2dcf078e703"
},
"homepage": "https://github.com/getsentry/sentry-for-claude/tree/main"
},
@@ -2305,7 +2431,7 @@
"url": "https://github.com/getsentry/cli.git",
"path": "plugins/sentry-cli",
"ref": "main",
"sha": "5b78ddaf28252cb514007526025b138569445fd4"
"sha": "18111b95ac8819d58e4f0334d4b8ee8f72513d1e"
},
"homepage": "https://sentry.io"
},
@@ -2370,7 +2496,7 @@
"source": {
"source": "url",
"url": "https://github.com/Shopify/Shopify-AI-Toolkit.git",
"sha": "859be93bfc858f183ff5eb40183e35a4d91d2950"
"sha": "a8e87a7cff153479eb77230d9c232484a1f3062f"
},
"homepage": "https://shopify.dev"
},
@@ -2408,7 +2534,7 @@
"url": "https://github.com/Snowflake-Labs/snowflake-ai-kit.git",
"path": "plugins/cortex-code",
"ref": "main",
"sha": "c3f720020a3b6c8927f97362c2e5884e959acd53"
"sha": "7d2c7e7e0788e255019a64a8690aa5f85d073a2c"
},
"homepage": "https://docs.snowflake.com/en/user-guide/cortex-code"
},
@@ -2448,6 +2574,20 @@
},
"homepage": "https://sourcegraph.com"
},
{
"name": "spanner",
"description": "Connect and interact with Spanner data using natural language.",
"author": {
"name": "Google LLC"
},
"category": "database",
"source": {
"source": "url",
"url": "https://github.com/gemini-cli-extensions/spanner.git",
"sha": "d4678e2bc04f60f3dfcdb6b916df28e63a0d615f"
},
"homepage": "https://github.com/gemini-cli-extensions/spanner"
},
{
"name": "spotify-ads-api",
"description": "Manage Spotify ad campaigns with natural language. Create campaigns, ad sets, ads, pull reports, and handle OAuth — all through conversation.",
@@ -2468,7 +2608,7 @@
"url": "https://github.com/stripe/ai.git",
"path": "providers/claude/plugin",
"ref": "main",
"sha": "e27ee0091ed20f7557f3241e00ade3d4846af9d6"
"sha": "b8f6adcb5d05f6ff01334411561ee8cb1ec014c6"
},
"homepage": "https://github.com/stripe/ai/tree/main/providers/claude/plugin"
},
@@ -2480,7 +2620,7 @@
"source": "url",
"url": "https://github.com/sumup/sumup-skills.git",
"path": "providers/claude/plugin",
"sha": "715464b459def2d16e930e9ec8008f60e18a8b4d"
"sha": "5b9b2d72c63fefd9038db0a9c571d3d64ff6353c"
},
"homepage": "https://www.sumup.com/"
},
@@ -2491,7 +2631,7 @@
"source": {
"source": "url",
"url": "https://github.com/supabase-community/supabase-plugin.git",
"sha": "3217ac038647f6901a166f3264a32f01833f73ba"
"sha": "2ed49769b1ec2f6703a14290af484df651336150"
},
"homepage": "https://github.com/supabase-community/supabase-plugin"
},
@@ -2536,7 +2676,7 @@
"source": {
"source": "url",
"url": "https://github.com/JetBrains/teamcity-cli.git",
"sha": "3cc3013c0f8106ffc845b34fb322d763803bcb0e"
"sha": "67e21f0be908daa7ca1e04c8016d1bc81750baee"
},
"homepage": "https://www.jetbrains.com/teamcity/"
},
@@ -2567,7 +2707,7 @@
"source": {
"source": "url",
"url": "https://github.com/togethercomputer/skills.git",
"sha": "9772f2a2f83e2184c341dd2650ac4c7efb76c33b"
"sha": "8aa08ca126a50d5e76f6d378f47386cee4267984"
},
"homepage": "https://www.together.ai"
},
@@ -2629,7 +2769,7 @@
"url": "https://github.com/UI5/plugins-coding-agents.git",
"path": "plugins/ui5",
"ref": "main",
"sha": "767ac53cb056a0c900374ccea0df96c54b769eb2"
"sha": "9b3d7d80356f687725f9584988e4038dbead0d53"
},
"homepage": "https://github.com/UI5/plugins-coding-agents"
},
@@ -2647,7 +2787,7 @@
"url": "https://github.com/UI5/plugins-coding-agents.git",
"path": "plugins/ui5-typescript-conversion",
"ref": "main",
"sha": "767ac53cb056a0c900374ccea0df96c54b769eb2"
"sha": "9b3d7d80356f687725f9584988e4038dbead0d53"
},
"homepage": "https://github.com/UI5/plugins-coding-agents"
},
@@ -2663,7 +2803,7 @@
"url": "https://github.com/val-town/plugins.git",
"path": "plugin",
"ref": "main",
"sha": "e01069e11ea6e46b8d2d5fd2945f2dd4d33e6a57"
"sha": "02631f998eda9b88d73d699703b062db059d506b"
},
"homepage": "https://val.town"
},
@@ -2716,7 +2856,7 @@
"source": {
"source": "url",
"url": "https://github.com/explorium-ai/vibeprospecting-plugin.git",
"sha": "7ed0c4e2965ee315132c3c714609b46b23b5edc0"
"sha": "aa5903f52d79e7f2a5f9c324c6fff7d5a5d92631"
},
"homepage": "https://www.vibeprospecting.ai/product/claude-plugin"
},
@@ -2741,7 +2881,7 @@
"source": {
"source": "url",
"url": "https://github.com/wix/skills.git",
"sha": "f99715fc149208608a148c0fe0ed16c0f80ee734"
"sha": "9666bc8d4856d9028e815610c23ab4f48d8ddd3b"
},
"homepage": "https://dev.wix.com/docs/wix-cli/guides/development/about-wix-skills"
},
@@ -2767,7 +2907,7 @@
"url": "https://github.com/workos/skills.git",
"path": "plugins/workos",
"ref": "main",
"sha": "e8900cc504fd759407d1a963d13f59383fa39ebc"
"sha": "2c3acef61ea29296cb6e73e0c59fb5e98f0b1847"
},
"homepage": "https://workos.com"
},
@@ -2794,7 +2934,7 @@
"url": "https://github.com/zapier/zapier-mcp.git",
"path": "plugins/zapier",
"ref": "main",
"sha": "f34a7854febed415c9ef766eec1c66529ef0668e"
"sha": "770167c572deaf74c588b45d88003ddf2145d608"
},
"homepage": "https://github.com/zapier/zapier-mcp/tree/main/plugins/zapier"
},
@@ -2848,7 +2988,7 @@
"source": {
"source": "url",
"url": "https://github.com/zscaler/zscaler-mcp-server.git",
"sha": "be37fb604a07dc9c5a4c3e009312c4f11acaa6d3"
"sha": "f84ce4f0ed48047614a4202ac311cbdf00ea9a10"
},
"homepage": "https://github.com/zscaler/zscaler-mcp-server"
}

View File

@@ -1,6 +1,6 @@
{
"name": "code-modernization",
"description": "Modernize legacy codebases (COBOL, legacy Java/C++, monolith web apps) with a structured assess map extract-rules brief reimagine/transform harden workflow and specialist review agents",
"description": "Modernize legacy codebases (COBOL, legacy Java/C++, monolith web apps) with a structured preflight / assess / map / extract-rules / brief / reimagine / transform / harden workflow, an interactive topology viewer, and specialist review agents",
"author": {
"name": "Anthropic",
"email": "support@anthropic.com"

View File

@@ -7,7 +7,7 @@ A structured workflow and set of specialist agents for modernizing legacy codeba
Legacy modernization fails most often not because the target technology is wrong, but because teams skip steps: they transform code before understanding it, reimagine architecture before extracting business rules, or ship without a harness that would catch behavior drift. This plugin enforces a sequence:
```
assess → map → extract-rules → brief → reimagine | transform → harden
preflight → assess → map → extract-rules → brief → reimagine | transform → harden
```
The discovery commands (`assess`, `map`, `extract-rules`) build artifacts under `analysis/<system>/`. The `brief` command synthesizes them into an approval gate. The build commands (`reimagine`, `transform`) write new code under `modernized/`. The `harden` command audits the legacy system and produces a reviewable remediation patch. Each step has a dedicated slash command, and specialist agents (legacy analyst, business rules extractor, architecture critic, security auditor, test engineer) are invoked from within those commands — or directly — to keep the work honest.
@@ -20,25 +20,40 @@ Commands take a `<system-dir>` argument and assume the system being modernized l
mkdir -p legacy && ln -s /path/to/your/legacy/codebase legacy/billing
```
## Optional tooling
## What to give Claude
`/modernize-assess` works best with [`scc`](https://github.com/boyter/scc) (LOC + complexity + COCOMO) or [`cloc`](https://github.com/AlDanial/cloc), and falls back to `find`/`wc` if neither is installed. Portfolio mode also benefits from [`lizard`](https://github.com/terryyin/lizard) (cyclomatic complexity). The commands degrade gracefully without them, but the metrics will be coarser.
The commands degrade gracefully, but each of these makes the output meaningfully better — run `/modernize-preflight <system-dir>` to check all of them at once and get a readiness report:
- **Analysis tools**: [`scc`](https://github.com/boyter/scc) (LOC + complexity + COCOMO) or [`cloc`](https://github.com/AlDanial/cloc); [`lizard`](https://github.com/terryyin/lizard) for portfolio mode. Without them, metrics fall back to `find`/`wc` and get coarser.
- **A working build toolchain** for the legacy stack (e.g. GnuCOBOL for COBOL) — required before `/modernize-transform` can prove behavioral equivalence, and verified by preflight with a real smoke compile against your code.
- **The whole system in the tree**: deployment descriptors (JCL, CICS definitions, route configs), copybooks/includes, and DDL/schemas. Entry-point detection and data lineage in `/modernize-map` are guesswork without them.
- **Production telemetry** (optional): an observability MCP server or batch job logs enable the runtime overlay in `/modernize-assess` and timing annotations on critical paths.
## Secret handling
Legacy systems routinely contain live credentials, and assessment artifacts get committed and shared. **Every agent in this plugin masks credential values** — findings, rule-card parameters, architecture notes, and test fixtures cite `file:line` with a masked preview (`AKIA****`), never the value. When credentials are found, a per-credential inventory (type, location, blast radius, rotation recommendation) is written to `analysis/<system>/SECRETS.local.md`, which the commands gitignore before writing; on non-git projects the quarantine file goes to `~/.modernize/<system>/` instead. `/modernize-harden` splits its remediation diff so credential-removal hunks (which necessarily contain the raw value) land in a gitignored `security_remediation.local.patch`, never the shareable patch. Pass `--show-secrets` to include raw values in the quarantine file (and only there). If you ran an earlier version of this plugin on a real system, check whether `analysis/` artifacts containing credentials were committed or shared, and rotate anything that was.
## Commands
The commands are designed to be run in order, but each produces a standalone artifact so you can stop, review, and resume.
### `/modernize-preflight <system-dir> [target-stack]`
Environment readiness check, meant to run first: detects the legacy stack, checks analysis tooling, **smoke-compiles a real source file** with the legacy toolchain (the errors this surfaces — missing copybooks, wrong dialect flags — are the ones that otherwise appear mid-transform), inventories missing includes / deployment descriptors / binary-only artifacts, and probes for telemetry. Produces `analysis/<system>/PREFLIGHT.md` with a per-command Ready / Ready-with-gaps / Not-ready verdict.
### `/modernize-assess <system-dir>` — or — `/modernize-assess --portfolio <parent-dir>`
Inventory the legacy codebase: languages, line counts, complexity, build system, integrations, technical debt, security posture, documentation gaps, and a COCOMO-derived effort estimate. Produces `analysis/<system>/ASSESSMENT.md` and `analysis/<system>/ARCHITECTURE.mmd`. Spawns `legacy-analyst` (×2) and `security-auditor` in parallel for deep reads. With `--portfolio`, sweeps every subdirectory of a parent directory and writes a sequencing heat-map to `analysis/portfolio.html`.
### `/modernize-map <system-dir>`
Build a dependency and topology map of the **legacy** system: program/module call graph, data lineage (programs ↔ data stores), entry points, dead-end candidates, and one traced critical-path business flow. Writes a re-runnable extraction script and produces `analysis/<system>/topology.json` (machine-readable), `analysis/<system>/TOPOLOGY.html` (rendered Mermaid + architect observations), and standalone `call-graph.mmd`, `data-lineage.mmd`, and `critical-path.mmd`.
![Interactive topology map of AWS CardDemo — domains as containers, modules sized by lines of code, dependency edges colored by kind, entry points ringed](assets/topology-viewer-screenshot.jpg)
Build a dependency and topology map of the **legacy** system: program/module call graph, data lineage (programs ↔ data stores), entry points, dead-end candidates, and 24 traced business flows each anchored to a persona (the claimant, the operator, the auditor — not the maintainer). Writes a re-runnable extraction script and produces `analysis/<system>/topology.json` plus `analysis/<system>/TOPOLOGY.html` — an **interactive zoomable map** (circle-pack of domains/modules sized by LOC, dependency edges with per-kind toggles, search, click-for-details sidebar, and a walkthrough mode that plays each persona flow as a numbered path with a plain-language narrative). Built from a template shipped with the plugin, so it works on systems far too dense for a static diagram. Small domain-level `call-graph.mmd`, `data-lineage.mmd`, and `critical-path.mmd` are still exported for docs and PRs.
### `/modernize-extract-rules <system-dir> [module-pattern]`
Mine the business rules embedded in the legacy code — calculations, validations, eligibility, state transitions, policies — into Given/When/Then "Rule Cards" with `file:line` citations and confidence ratings. Spawns three `business-rules-extractor` agents in parallel (calculations, validations, lifecycle). Produces `analysis/<system>/BUSINESS_RULES.md` and `analysis/<system>/DATA_OBJECTS.md`.
### `/modernize-brief <system-dir> [target-stack]`
Synthesize the discovery artifacts into a phased **Modernization Brief** — the single document a steering committee approves and engineering executes: target architecture, strangler-fig phase plan with entry/exit criteria, behavior contract, validation strategy, open questions, and an approval block. Reads `ASSESSMENT.md`, `TOPOLOGY.html`, and `BUSINESS_RULES.md` and **stops if any are missing** — run the discovery commands first. Produces `analysis/<system>/MODERNIZATION_BRIEF.md` and enters plan mode as a human-in-the-loop gate.
Synthesize the discovery artifacts into a phased **Modernization Brief** — the single document a steering committee approves and engineering executes: target architecture, strangler-fig phase plan with entry/exit criteria, persona-based business walkthroughs (the section non-technical approvers actually read), behavior contract, validation strategy, open questions, and an approval block. Reads `ASSESSMENT.md`, `TOPOLOGY.html`, and `BUSINESS_RULES.md` and **stops if any are missing** — run the discovery commands first. Produces `analysis/<system>/MODERNIZATION_BRIEF.md` and enters plan mode as a human-in-the-loop gate.
### `/modernize-reimagine <system-dir> <target-vision>`
Greenfield rebuild from extracted intent rather than a structural port. Mines a spec (`analysis/<system>/AI_NATIVE_SPEC.md`), designs a target architecture and has it adversarially reviewed (`analysis/<system>/REIMAGINED_ARCHITECTURE.md`), then **scaffolds services with executable acceptance tests** under `modernized/<system>-reimagined/` and writes a `CLAUDE.md` knowledge handoff for the new system. Two human-in-the-loop checkpoints. Spawns `business-rules-extractor`, `legacy-analyst` (×2), `architecture-critic`, and general-purpose scaffolding agents.
@@ -46,6 +61,9 @@ Greenfield rebuild from extracted intent rather than a structural port. Mines a
### `/modernize-transform <system-dir> <module> <target-stack>`
Surgical, single-module strangler-fig rewrite. Plans first (HITL gate), then writes characterization tests via `test-engineer`, then an idiomatic target implementation under `modernized/<system>/<module>/`, proves equivalence by running the tests, and produces `TRANSFORMATION_NOTES.md` mapping legacy → modern with deliberate deviations called out. Reviewed by `architecture-critic`.
### `/modernize-status <system-dir>`
Read-only progress report: artifact inventory with timestamps per workflow stage, staleness flags (e.g. a brief older than the assessment it was built from), secrets-hygiene checks (quarantine file gitignored and never committed), and the single most useful next command. Run it anytime you come back to a modernization after a break.
### `/modernize-harden <system-dir>`
Security hardening pass on the **legacy** system: OWASP/CWE scan, dependency CVEs, secrets, injection. Spawns `security-auditor`. Produces `analysis/<system>/SECURITY_FINDINGS.md` ranked Critical / High / Medium / Low and a reviewed `analysis/<system>/security_remediation.patch` with minimal fixes for the Critical/High findings. The patch is reviewed by a second `security-auditor` pass before you see it. **Never edits `legacy/`** — you review and apply the patch yourself when ready, then re-run to verify. Useful as a pre-modernization step when the legacy system will keep running in production during the migration.
@@ -81,17 +99,21 @@ This plugin ships commands and agents, but modernization projects benefit from a
"Edit(modernized/**)"
],
"deny": [
"Edit(legacy/**)"
"Edit(legacy/**)",
"Write(legacy/**)"
]
}
}
```
Adjust `legacy/` and `modernized/` to match your actual layout. The key invariants: `Edit` under `legacy/` is denied, and writes are scoped to `analysis/` (for documents) and `modernized/` (for the new code). Every command in this plugin respects this — `/modernize-harden` writes a patch to `analysis/` rather than editing `legacy/` in place.
Adjust `legacy/` and `modernized/` to match your actual layout. The key invariants: `Edit`/`Write` under `legacy/` are denied, and writes are scoped to `analysis/` (for documents) and `modernized/` (for the new code). Note this guards the file tools — shell commands that mutate files (`sed -i`, `git apply`) still go through the normal Bash permission prompt, so review those prompts with the same invariant in mind. Every command in this plugin respects this — `/modernize-harden` writes a patch to `analysis/` rather than editing `legacy/` in place.
## Typical Workflow
```bash
# 0. Check the environment is ready (tools, toolchain, source completeness)
/modernize-preflight billing
# 1. Inventory the legacy system (or sweep a portfolio of them)
/modernize-assess billing
@@ -112,6 +134,9 @@ Adjust `legacy/` and `modernized/` to match your actual layout. The key invarian
# 6. Security-harden the legacy system that's still in production
/modernize-harden billing
# Anytime: where am I, what's stale, what's next
/modernize-status billing
```
## License

View File

@@ -29,6 +29,12 @@ For **transformed code**:
- Does the test suite actually pin behavior, or just exercise code paths?
- What would the on-call engineer need at 3am that isn't here?
## Secret handling (mandatory)
When a finding quotes code containing a credential, key, token, or
connection string, mask the value (`'Pr0d****'`) and cite `file:line`
findings get appended verbatim to committed notes files.
## Output
Findings ranked **Blocker / High / Medium / Nit**. Each with: what, where,

View File

@@ -40,6 +40,15 @@ of the technology, skip it.
from structure/names), **Low** (ambiguous; needs SME).
6. If confidence < High, write the exact question an SME must answer.
## Secret handling (mandatory)
Rule parameters sometimes *are* credentials — hardcoded passwords in auth
checks, API keys in partner-service calls, connection strings in batch
routines. Record the **rule**, never the **value**: write the parameter as
`<credential — masked, see file:line>` with at most a 24 character
preview. Rule cards flow into briefs and steering decks; a raw credential
in a parameter list is a leak.
## Output format
One "Rule Card" per rule (see the format in the `/modernize-extract-rules`

View File

@@ -32,6 +32,15 @@ and explain it in terms a modern engineer can act on.
- **Note what's missing.** Unhandled error paths, TODO comments, commented-out
blocks, magic numbers — these are signals about history and risk.
## Secret handling (mandatory)
Legacy code is full of live credentials, and your findings get copied into
shareable reports. When the evidence for a finding — hardcoded config,
dead code, debt, an interface payload — includes a credential, API key,
token, connection string, or private key, **never reproduce the value**.
Cite `file:line` with a masked preview (`VALUE 'Pr0d****'`,
`password=****`). The finding is the practice, not the value.
## Output format
Default to structured markdown: tables for inventories, Mermaid for graphs,

View File

@@ -39,7 +39,30 @@ terminal/screen items don't apply to a SPA. Work through what's relevant:
Use available SAST where it helps (npm audit, pip-audit, grep for known-bad
patterns) but **read the code** — tools miss logic flaws. Show tool output
verbatim, then add your manual findings.
verbatim — except secret values, which you redact (see below) — then add
your manual findings.
## Secret handling (mandatory)
Legacy codebases routinely contain live production credentials, and your
findings get pasted into decks, tickets, and committed markdown. Copying a
secret into a report multiplies the exposure you were hired to find.
When you discover a hardcoded credential, API key, token, connection
string, or private key:
- **Never write the secret's value into any output** — no finding table,
no report, no quoted code excerpt, no echoed tool output. Mask it to the
first 24 identifying characters plus `****` (`AKIA****`,
`postgres://app_user:****@db-prod…`). If a scanner prints a secret,
redact it before including the excerpt.
- Cite `file:line`. The source file is the canonical location — anyone who
legitimately needs the value can open it there.
- State what the credential appears to grant access to (database, queue,
cloud account, third-party API) and whether it looks like a production
or test credential.
- Recommend rotation for anything that looks live — exposure in source
means it is already compromised, independent of any modernization plan.
## Reporting standard

View File

@@ -28,6 +28,15 @@ someone thinks it should do) so that a rewrite can be proven equivalent.
`@Disabled("pending RULE-NNN")` / `@pytest.mark.skip` / `it.todo()` — never
deleted.
## Secret handling (mandatory)
Never copy credential-like literals — passwords, API keys, tokens,
connection strings — from legacy code into test fixtures. Tests live in
the deliverable codebase and get committed. Substitute clearly-fake values
of the same shape and length and note the substitution in a comment.
Anything a test genuinely needs live (e.g. a real database connection for
a dual-run harness) is read from an environment variable, never inlined.
## Output
Idiomatic tests for the requested target stack (JUnit 5 / pytest / Vitest /

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 KiB

File diff suppressed because one or more lines are too long

View File

@@ -1,11 +1,13 @@
---
description: Full discovery & portfolio analysis of a legacy system — inventory, complexity, debt, effort estimation
argument-hint: <system-dir> | --portfolio <parent-dir>
argument-hint: <system-dir> [--show-secrets] | --portfolio <parent-dir>
---
**Mode select.** If `$ARGUMENTS` starts with `--portfolio`, run **Portfolio
mode** against the directory that follows. Otherwise run **Single-system
mode** against `legacy/$1`.
mode** against the system dir. Parse flags positionally-independently:
`--show-secrets` may appear before or after the system dir — the system
dir is the first non-flag token.
---
@@ -108,12 +110,16 @@ Spawn three subagents **in parallel**:
2. **legacy-analyst** — "Identify technical debt in legacy/$1: dead code,
deprecated APIs, copy-paste duplication, god objects/programs, missing
error handling, hardcoded config. Return the top 10 findings ranked by
remediation value, each with file:line evidence."
remediation value, each with file:line evidence. If evidence contains a
credential value, mask it per your secret-handling rules — never quote
it."
3. **security-auditor** — "Scan legacy/$1 for security vulnerabilities:
injection, auth weaknesses, hardcoded secrets, vulnerable dependencies,
missing input validation. Return findings in CWE-tagged table form with
file:line evidence and severity."
file:line evidence and severity. Mask every discovered credential value
per your secret-handling rules — file:line plus a 24 character masked
preview, never the value itself."
Wait for all three. Synthesize their findings.
@@ -141,6 +147,31 @@ need explained.
## Step 6 — Write the assessment
**Secrets quarantine first.** The assessment gets shared and committed —
discovered credential values must never appear in it. If the
security-auditor found any hardcoded credentials:
1. Ensure `analysis/.gitignore` exists and contains the lines
`SECRETS.local.md` and `*.local.patch` (create or append as needed —
the patch pattern is used by `/modernize-harden`; writing both now
means the ignore set is complete from first contact). If the project is a
git repo, verify with `git check-ignore -q analysis/$1/SECRETS.local.md`
— do not write any findings until the check passes. If there is **no
git repo** (check for `.svn`/`.hg`/`CVS` too — a `.gitignore` protects
nothing under another VCS): refuse `--show-secrets` and write
`SECRETS.local.md` to `~/.modernize/$1/` instead of the project tree,
telling the user where it went and why.
2. Write `SECRETS.local.md`: one row per credential — masked preview,
`file:line`, credential type, what it grants access to,
production/test guess, rotation recommendation. Only if the user passed
`--show-secrets`, add the raw value column here — this file only, never
ASSESSMENT.md.
3. Masking applies to **every section of ASSESSMENT.md**, whichever agent
produced the finding — the Technical Debt section quotes hardcoded
config; those quotes follow the same masking rule as Security Findings.
The Security Findings section adds a one-line pointer:
"Credential inventory in SECRETS.local.md (gitignored; not for sharing)."
Create `analysis/$1/ASSESSMENT.md` with these sections:
- **Executive Summary** (3-4 sentences: what it is, how big, how risky, headline recommendation)
- **System Inventory** (the scc table + tech fingerprint)

View File

@@ -8,10 +8,19 @@ single document a steering committee approves and engineering executes.
Target stack: `$2` (if blank, recommend one based on the assessment findings).
Read `analysis/$1/ASSESSMENT.md`, `analysis/$1/TOPOLOGY.html` (and the `.mmd`
files alongside it), and `analysis/$1/BUSINESS_RULES.md` first. If any are
missing, say so and stop — they come from `/modernize-assess`, `/modernize-map`,
and `/modernize-extract-rules` respectively. Run those first.
Read `analysis/$1/ASSESSMENT.md`, `analysis/$1/topology.json` (plus the
`.mmd` files alongside it — do NOT read `TOPOLOGY.html`, it's an
interactive viewer with the data minified inside), and
`analysis/$1/BUSINESS_RULES.md` first. If any are missing, say so and
stop — they come from `/modernize-assess`, `/modernize-map`, and
`/modernize-extract-rules` respectively. Run those first.
**Staleness check:** compare modification times. If any input is newer
than an existing `MODERNIZATION_BRIEF.md`, the brief is being justifiably
regenerated; but if an existing brief is newer than all inputs and the
user re-ran this command anyway, ask what changed. Either way, note the
input timestamps in the brief's header so reviewers can see what it was
built from.
## The Brief
@@ -31,28 +40,38 @@ fewest-dependencies first. For each phase:
- Scope (which legacy modules, which target services)
- Entry criteria (what must be true to start)
- Exit criteria (what tests/metrics prove it's done)
- Estimated effort (person-weeks, derived from COCOMO + complexity data)
- Estimated effort (person-months, same unit as the assessment's COCOMO
figure — convert deliberately if you present weeks)
- Risk level + top 2 risks + mitigation
Render the phases as a Mermaid `gantt` chart.
### 4. Behavior Contract
### 4. Business Walkthroughs
For each persona flow in `analysis/$1/topology.json` (`flows` — produced
by `/modernize-map`), a short narrative table: persona, what happens in
business language, which legacy modules implement it today, and which
phase from §3 replaces each. This is the section non-technical approvers
actually read — it connects "Phase 2" to "what happens when a customer
files a claim". If topology.json has no flows, derive 23 walkthroughs
from the entry points and say they need SME confirmation.
### 5. Behavior Contract
List the **P0 rules** from BUSINESS_RULES.md (the ones tagged `Priority: P0`
money, regulatory, data integrity) that MUST be proven equivalent before any
phase ships. These become the regression suite. Flag any P0 rule with
Confidence < High as a blocker requiring SME confirmation before its phase
starts.
### 5. Validation Strategy
### 6. Validation Strategy
State which combination applies: characterization tests, contract tests,
parallel-run / dual-execution diff, property-based tests, manual UAT.
Justify per phase.
### 6. Open Questions
### 7. Open Questions
Anything requiring human/SME decision before Phase 1 starts. Each as a
checkbox the approver must tick.
### 7. Approval Block
### 8. Approval Block
```
Approved by: ________________ Date: __________
Approval covers: Phase 1 only | Full plan
@@ -60,6 +79,7 @@ Approval covers: Phase 1 only | Full plan
## Present
Enter **plan mode** and present a summary of the brief. Do NOT proceed to any
transformation until the user explicitly approves. This gate is the
human-in-the-loop control point.
Present a summary of the brief and **stop — write nothing further until
the user explicitly approves** (use plan mode if the session supports
it). This gate is the human-in-the-loop control point; "no objection" is
not approval.

View File

@@ -46,7 +46,7 @@ Merge the three result sets. Deduplicate. For each distinct rule, write a
When <trigger>
Then <outcome>
[And <additional outcome>]
**Parameters:** <constants, rates, thresholds with their current values>
**Parameters:** <constants, rates, thresholds with their current values — credentials masked: `<credential — masked, see file:line>`>
**Edge cases handled:** <list>
**Suspected defect:** <optional — legacy behavior that looks wrong; decide preserve-vs-fix during transform>
**Confidence:** High | Medium | Low — <why; if < High, state the exact SME question>

View File

@@ -1,14 +1,42 @@
---
description: Security vulnerability scan with a reviewable remediation patch — OWASP, CWE, CVE, secrets, injection
argument-hint: <system-dir>
argument-hint: <system-dir> [--show-secrets]
---
Run a **security hardening pass** on `legacy/$1`: find vulnerabilities, rank
them, and produce a reviewable patch for the critical ones.
Run a **security hardening pass** on the legacy system: find
vulnerabilities, rank them, and produce a reviewable patch for the
critical ones. Parse arguments flag-independently: the system dir
(referred to as `$1` below) is the first non-flag token in `$ARGUMENTS`;
`--show-secrets` may appear anywhere.
This command never edits `legacy/` — it writes findings and a proposed patch
to `analysis/$1/`. The user reviews and applies (or not).
## Step 0 — Secrets quarantine setup
Findings files get shared, committed, and pasted into decks — discovered
credential values must never land in them. Before any scanning:
1. Ensure `analysis/.gitignore` exists and contains the lines
`SECRETS.local.md` and `*.local.patch`. Create the file or append the
missing lines.
2. If the project is a git repo, verify with
`git check-ignore -q analysis/$1/SECRETS.local.md` — if that exits
non-zero, fix the ignore rule before proceeding. Do not write any
findings until this check passes.
3. **If there is no git repo** (check for `.svn`/`.hg`/`CVS` too — a
`.gitignore` protects nothing under another VCS): refuse
`--show-secrets`, and write `SECRETS.local.md` and any `.local.patch`
file to `~/.modernize/$1/` instead of the project tree, telling the
user where they went and why.
All secret values in every shareable artifact this command produces are
**masked** (`AKIA****`, `password=****`) and cited by `file:line`. Raw
values may appear in exactly two places, both gitignored: the
`*.local.patch` remediation hunks (unavoidably — see Remediate) and, only
with `--show-secrets`, `SECRETS.local.md`. Never in SECURITY_FINDINGS.md
or patch commentary.
## Scan
Spawn the **security-auditor** subagent:
@@ -20,7 +48,9 @@ hardcoded secrets, vulnerable dependency versions, missing input validation,
path traversal. For each finding return: CWE ID, severity
(Critical/High/Med/Low), file:line, one-sentence exploit scenario, and
recommended fix. Run any available SAST tooling (npm audit, pip-audit,
OWASP dependency-check) and include its raw output."
OWASP dependency-check) and include its raw output. Mask every discovered
credential value per your secret-handling rules — file:line plus a 24
character masked preview, never the value itself."
## Triage
@@ -29,26 +59,50 @@ Write `analysis/$1/SECURITY_FINDINGS.md`:
- Findings table sorted by severity
- Dependency CVE table (package, installed version, CVE, fixed version)
If any hardcoded credentials were found, also write
`analysis/$1/SECRETS.local.md` (the gitignored quarantine file from Step 0):
one row per credential — masked preview, `file:line`, credential type, what
it appears to grant access to, production/test guess, and a rotation
recommendation. With `--show-secrets`, append the raw value column here —
this file only. SECURITY_FINDINGS.md gets a one-line pointer:
"N hardcoded credentials found — inventory in SECRETS.local.md (gitignored;
not for sharing)."
## Remediate
For each **Critical** and **High** finding, draft a minimal, targeted fix.
Do **not** edit `legacy/` — write all fixes as a single unified diff to
`analysis/$1/security_remediation.patch`, with a comment line above each
hunk citing the finding ID it addresses (`# SEC-001: parameterize the query`).
Do **not** edit `legacy/` — write fixes as unified diffs with **paths
relative to the project root** (`legacy/$1/...`), applied from the project
root, with a comment line above each hunk citing the finding ID it
addresses (`# SEC-001: parameterize the query`).
**Credential findings split into two files.** A diff that removes a
hardcoded secret necessarily contains the raw value on its `-` and
context lines — that cannot go in the shareable patch:
- `analysis/$1/security_remediation.patch` (shareable) — every
non-credential hunk, plus for each credential finding a comment-only
placeholder: `# SEC-NNN: credential remediation — hunk in
security_remediation.local.patch (gitignored; not for sharing)`.
- `analysis/$1/security_remediation.local.patch` (gitignored in Step 0) —
the real, applyable hunks for credential findings only.
Add a **Remediation Log** section to SECURITY_FINDINGS.md mapping each
finding ID → one-line summary of the proposed fix and the patch hunk that
implements it.
finding ID → one-line summary of the proposed fix and which patch file
carries the hunk.
## Verify
Spawn the **security-auditor** again to **review the patch** against the
original code:
Spawn the **security-auditor** again to **review both patches** against
the original code:
"Review analysis/$1/security_remediation.patch against legacy/$1. For each
"Review analysis/$1/security_remediation.patch and
analysis/$1/security_remediation.local.patch against legacy/$1. For each
hunk: does it fully remediate the cited finding? Does it introduce new
vulnerabilities or change behavior beyond the fix? Return one verdict per
hunk: RESOLVES / PARTIAL / INTRODUCES-RISK, with a one-line reason."
vulnerabilities or change behavior beyond the fix? Confirm no raw
credential values appear anywhere in the shareable patch. Return one
verdict per hunk: RESOLVES / PARTIAL / INTRODUCES-RISK, with a one-line
reason."
Add a **Patch Review** section to SECURITY_FINDINGS.md with the verdicts.
If any hunk is PARTIAL or INTRODUCES-RISK, revise the patch and re-review.
@@ -57,8 +111,12 @@ If any hunk is PARTIAL or INTRODUCES-RISK, revise the patch and re-review.
Tell the user the artifacts are ready:
- `analysis/$1/SECURITY_FINDINGS.md` — findings, remediation log, patch review
- `analysis/$1/security_remediation.patch` — review, then apply if appropriate
with `git -C legacy/$1 apply ../../analysis/$1/security_remediation.patch`
- `analysis/$1/security_remediation.patch` — review, then apply **from the
project root**: `git apply analysis/$1/security_remediation.patch`
(if `legacy/$1` is a symlink, use `git apply --unsafe-paths` or apply
with `patch -p0` from the project root)
- `analysis/$1/security_remediation.local.patch` — the credential fixes;
apply the same way, and rotate the affected credentials regardless
- Re-run `/modernize-harden $1` after applying to confirm resolution
Suggest: `glow -p analysis/$1/SECURITY_FINDINGS.md`

View File

@@ -55,50 +55,124 @@ re-run and audited. Have it write a machine-readable
`analysis/$1/topology.json` and print a human summary. Run it; show the
summary (cap at ~200 lines for very large estates).
## Render
`topology.json` must follow this schema — it feeds the interactive viewer:
From the extracted data, generate **three Mermaid diagrams** and write them
to `analysis/$1/TOPOLOGY.html` as a self-contained page that renders in any
browser.
The HTML page must use: dark `#1e1e1e` background, `#d4d4d4` text,
`#cc785c` for `<h2>`/accents, `system-ui` font, all CSS **inline** (no
external stylesheets). Load Mermaid from a CDN in `<head>`:
```html
<script type="module">
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs';
mermaid.initialize({ startOnLoad: true, theme: 'dark' });
</script>
```json
{
"system": "<display name>",
"root": {
"id": "sys", "name": "<system>", "kind": "system",
"children": [
{ "id": "dom:<domain>", "name": "<Domain>", "kind": "domain",
"children": [
{ "id": "<MODULE>", "name": "<MODULE>", "kind": "module",
"language": "cobol", "loc": 1234, "file": "src/MODULE.cbl" }
] },
{ "id": "dom:data", "name": "Data stores", "kind": "domain",
"children": [
{ "id": "ds:<NAME>", "name": "<NAME>", "kind": "datastore" }
] }
]
},
"edges": [
{ "source": "<id>", "target": "<id>", "kind": "call" }
],
"entryPoints": ["<id>", "..."],
"deadEnds": ["<id>", "..."],
"observations": ["<architect observation>", "..."],
"flows": [
{ "name": "<business flow>", "persona": "<who experiences it>",
"description": "<one sentence, plain language>",
"steps": [
{ "label": "<business-language step>", "nodes": ["<id>", "<id>"] }
] }
]
}
```
Each diagram goes in a `<pre class="mermaid">...</pre>` block. Do **not**
wrap diagrams in markdown ` ``` ` fences inside the HTML.
- Group leaf modules under `domain` containers (use the domains from
`/modernize-assess` if available). Leaf kinds: `module`, `datastore`,
`job`, `screen`. `loc` drives circle size — include it for modules.
- Edge kinds: `call` (direct), `dispatch` (dynamic/router), `read`,
`write`. Every edge endpoint must be a leaf id that exists in the tree.
- `deadEnds`: the dead-end candidates from the extraction, rendered with
a dashed outline in the viewer. Apply the suppression rules above —
anything that could be the target of an unresolved dynamic call does
NOT belong here; record that uncertainty in `observations` instead.
- **Datastore ids and names must be logical identifiers** — DD name,
dataset name, table/schema name, at most host:port. If the resolved
config value is a URL or DSN, strip userinfo and credential query
params before it goes anywhere in topology.json: the file gets
committed and the viewer displays names verbatim. Never copy raw
config values into `observations`.
- `observations`: 37 architect observations — tight coupling clusters,
single points of failure, service-extraction candidates, data stores
with too many writers, dispatch targets the extraction could not
resolve.
- `flows` is the **persona walkthrough** section — see below.
1. **`graph TD` — Module call graph.** Cluster by domain (use `subgraph`).
Highlight entry points in a distinct style. Cap at ~40 nodes — if larger,
show domain-level with one expanded domain.
## Persona flows
2. **`graph LR` — Data lineage.** Programs → data stores.
Mark read vs write edges.
Trace **24 end-to-end business flows**, each anchored to a persona —
the people who experience the system, not the people who maintain it
(e.g. for a benefits system: the claimant, the caseworker, the auditor;
for billing: the customer, the billing operator). For each flow:
3. **`flowchart TD` — Critical path.** Trace ONE end-to-end business flow
(e.g., "monthly billing run" or "process payment") through every program
and data store it touches, in execution order. If production telemetry is
available (see `/modernize-assess` Step 4), annotate each step with its
p50/p99 wall-clock.
- `name` + one-sentence `description` in plain business language —
something a steering committee member relates to ("a claimant files a
weekly claim"), not a data-flow label ("CLM batch ingest").
- `steps`: 38 steps, each with a business-language `label` and the
`nodes` (programs + data stores) that implement that step, in
execution order.
Also export the three diagrams as standalone `.mmd` files for re-use:
`analysis/$1/call-graph.mmd`, `analysis/$1/data-lineage.mmd`,
`analysis/$1/critical-path.mmd`.
This is the bridge between the technical map and non-technical
stakeholders: the same diagram answers "which program does X" for
engineers and "what happens when someone files a claim" for everyone else.
## Annotate
## Render
Below each `<pre class="mermaid">` block in TOPOLOGY.html, add a `<ul>`
with 3-5 **architect observations**: tight coupling clusters, single
points of failure, candidates for service extraction, data stores
touched by too many writers.
`analysis/$1/TOPOLOGY.html` is an **interactive map**: a zoomable
circle-pack of the whole system (domains as containers, modules sized by
LOC) with dependency edges, search, per-node detail sidebar, edge-kind
toggles, and a flow-walkthrough mode that plays each persona flow as a
numbered path. Build it from the template that ships with this plugin —
do not hand-write the viewer:
```bash
python3 - "${CLAUDE_PLUGIN_ROOT}/assets/topology-viewer.html" analysis/$1 <<'EOF'
import json, sys
tpl_path, out_dir = sys.argv[1], sys.argv[2]
tpl = open(tpl_path).read()
marker = "/*__TOPOLOGY_DATA__*/ null"
assert marker in tpl, f"injection marker not found in {tpl_path}"
data = json.dumps(json.load(open(f"{out_dir}/topology.json")))
open(f"{out_dir}/TOPOLOGY.html", "w").write(
tpl.replace(marker, "/*__TOPOLOGY_DATA__*/ " + data))
print(f"wrote {out_dir}/TOPOLOGY.html")
EOF
```
The viewer is fully self-contained (the d3 subset it needs is inlined in
the template) — it works offline and on air-gapped networks. If the
`python3` invocation fails to find the template,
`${CLAUDE_PLUGIN_ROOT}` was not substituted — report that rather than
hand-writing a viewer.
Mermaid stays for **small, exportable** diagrams. Generate standalone
`.mmd` files for reuse in docs and PRs — but keep each under ~40 edges;
collapse to domain level if the full graph is bigger (dense Mermaid
becomes unreadable, which is exactly what the interactive map is for):
- `analysis/$1/call-graph.mmd` — domain-level `graph TD`, entry points
highlighted
- `analysis/$1/data-lineage.mmd``graph LR`, programs → data stores,
read vs write marked
- `analysis/$1/critical-path.mmd``flowchart TD` of the primary flow
from `flows`, annotated with p50/p99 wall-clock if telemetry is
available (see `/modernize-assess` Step 4)
## Present
Tell the user to open `analysis/$1/TOPOLOGY.html` in a browser.
Tell the user to open `analysis/$1/TOPOLOGY.html` in a browser, and to
try: search for a module, click it to see its connections, and pick a
persona flow from the walkthrough dropdown.

View File

@@ -0,0 +1,98 @@
---
description: Environment readiness check — analysis tools, build toolchain, source completeness, telemetry access
argument-hint: <system-dir> [target-stack]
---
Check whether this environment is ready to analyze — and eventually
transform — `legacy/$1`, and tell the user exactly what to fix before the
other commands run into it. Modernization sessions fail late and
confusingly when this isn't done: assessment metrics silently degrade
without analysis tools, characterization tests can't run without a build
toolchain, and dependency maps come out wrong when half the source isn't
in the tree.
Run every check even when an early one fails — the point is one complete
readiness report, not the first error.
## Check 1 — Detect the stack
Fingerprint `legacy/$1` from file extensions and manifests: languages,
build system, deployment/config descriptors. This drives which checks
below apply. Report what was detected and the rough file split.
## Check 2 — Analysis tooling
For each, check availability (`command -v`) and report version, what it's
used for, and what degrades without it:
| Tool | Used by | Without it |
|---|---|---|
| `scc` (or `cloc`) | assess | LOC/complexity fall back to `find`+`wc`; COCOMO estimate gets coarser |
| `lizard` | assess --portfolio | complexity estimated from decision-keyword counts |
| `glow` | all | markdown artifacts render as plain text |
| `delta` | transform | side-by-side diffs fall back to `diff -y` |
Include the platform's install one-liner for anything missing
(`brew install scc`, `apt install cloc`, `pip install lizard`, …).
## Check 3 — Build toolchain (smoke test, not just presence)
Identify the compiler/interpreter for the detected legacy stack — e.g.
GnuCOBOL (`cobc`) for COBOL, JDK + Maven/Gradle for Java, `cc`/`make` for
C, `dotnet` for .NET. Then **prove it works on this codebase**: pick one
representative source file and run a syntax-only compile
(`cobc -fsyntax-only`, `javac`, `gcc -fsyntax-only`, …).
A failed smoke test is the most valuable output of this command — report
the actual error and diagnose it: missing copybook/include path, missing
dialect flag (`-std=ibm` etc.), fixed vs free format, missing dependency
jar. These are the errors that otherwise surface mid-`/modernize-transform`
with much less context.
If the user passed a `[target-stack]`, do the same for it: runtime,
package manager, test framework (`mvn -v`, `npm -v`, `pytest --version`, …).
## Check 4 — Source completeness
The dependency map is only as good as what's in the tree. Check for the
detected stack's equivalents of:
- **Referenced-but-missing includes** — copybooks (`COPY X` with no
`X.cpy`), headers, imports that resolve nowhere. Count and list the top
missing names.
- **Deployment/config descriptors** — JCL for batch COBOL, CICS CSD
definitions, `web.xml`/route configs, cron/scheduler definitions.
Without these, entry-point detection and the code↔storage join in
`/modernize-map` are guesswork.
- **Data definitions** — DDL, schemas, copybook record layouts, ORM
mappings.
- **Binary-only artifacts** — load modules, jars, DLLs with no matching
source. These become unmappable black boxes; flag them now.
## Check 5 — Optional context
- **Production telemetry** — is an observability/APM MCP server connected,
or are batch job logs / runtime exports available? (Enables the runtime
overlay in `/modernize-assess` Step 4 and timing annotations in
`/modernize-map`.)
- **Version control history** — is `legacy/$1` under git with meaningful
history? (Change-frequency data sharpens risk ranking.)
## Report
Write `analysis/$1/PREFLIGHT.md`: a status table — one row per check,
status ✅ / ⚠️ / ❌, what was found, and the fix for anything not green —
followed by a **Ready / Ready-with-gaps / Not ready** verdict per command:
- `assess` + `map` + `extract-rules` — need Checks 12 green-ish and
Check 4's missing-include count low
- `brief` — needs only the three discovery artifacts; no tooling
- `transform` + `reimagine` — additionally need Check 3 green for the
**target** stack. A red legacy toolchain downgrades these to
Ready-with-gaps, not Not-ready: equivalence testing falls back to
recorded traces / golden-master fixtures instead of dual execution
(common and expected for CICS/IMS code that has no local runtime)
- `harden` — needs Check 2 plus any stack-specific SAST tooling found
Print the table in the session too, and end with the single most
important fix if anything is red.

View File

@@ -3,7 +3,11 @@ description: Multi-agent greenfield rebuild — extract specs from legacy, desig
argument-hint: <system-dir> <target-vision>
---
**Reimagine** `legacy/$1` as: $2
The first token of `$ARGUMENTS` is the system dir (`$1`); **everything
after it is the target vision** — it is usually multiple words, so do not
truncate it to one token. Below, `<vision>` means that full remainder.
**Reimagine** `legacy/$1` as: <vision>
This is not a port — it's a rebuild from extracted intent. The legacy system
becomes the *specification source*, not the structural template. This command
@@ -19,7 +23,8 @@ Spawn concurrently and show the user that all three are running:
2. **legacy-analyst** — "Catalog every external interface of legacy/$1:
inbound (screens, APIs, batch triggers, queues) and outbound (reports,
files, downstream calls, DB writes). For each: name, direction, payload
shape, frequency/SLA if discernible."
shape, frequency/SLA if discernible. Mask any credential embedded in
endpoints or payload examples per your secret-handling rules."
3. **legacy-analyst** — "Identify the core domain entities in legacy/$1 and
their relationships. Return as an entity list + Mermaid erDiagram."
@@ -32,6 +37,9 @@ Collect results. Write `analysis/$1/AI_NATIVE_SPEC.md` containing:
- **Non-functional requirements** inferred from legacy (batch windows, volumes)
- **Behavior Contract** (the Given/When/Then rules — these are the acceptance tests)
Credential values are masked everywhere in the spec; connection details
appear as env-var placeholders (`${DATABASE_URL}`), never literals.
## Phase B — HITL checkpoint #1
Present the spec summary. Ask the user **one focused question**: "Which of
@@ -40,20 +48,21 @@ should deliberately drop?" Wait for the answer. Record it in the spec.
## Phase C — Architecture (single agent, then critique)
Design the target architecture for "$2":
Design the target architecture for "<vision>":
- Mermaid C4 Container diagram
- Service boundaries with rationale (which rules/entities live where)
- Technology choices with one-line justification each
- Data migration approach from legacy stores
Then spawn **architecture-critic**: "Review this proposed architecture for
$2 against the spec in analysis/$1/AI_NATIVE_SPEC.md. Identify over-engineering,
<vision> against the spec in analysis/$1/AI_NATIVE_SPEC.md. Identify over-engineering,
missed requirements, scaling risks, and simpler alternatives." Incorporate
the critique. Write the result to `analysis/$1/REIMAGINED_ARCHITECTURE.md`.
## Phase D — HITL checkpoint #2
Enter plan mode. Present the architecture. Wait for approval.
Present the architecture and **stop — scaffold nothing until the user
explicitly approves** (use plan mode if the session supports it).
## Phase E — Parallel scaffolding
@@ -65,7 +74,9 @@ in parallel**:
and AI_NATIVE_SPEC.md. Create: project skeleton, domain model, API stubs
matching the interface contracts, and **executable acceptance tests** for every
behavior-contract rule assigned to this service (mark unimplemented ones as
expected-failure/skip with the rule ID). Write to modernized/$1-reimagined/<service-name>/."
expected-failure/skip with the rule ID). No credential literal from legacy
code becomes a test fixture or config default — use fake same-shape values
and env-var placeholders. Write to modernized/$1-reimagined/<service-name>/."
Show the agents' progress. When all complete, run the acceptance test suites
and report: total tests, passing (scaffolded behavior), pending (rule IDs
@@ -77,7 +88,9 @@ Write `modernized/$1-reimagined/CLAUDE.md` — the persistent context file for
the new system, containing: architecture summary, service responsibilities,
where the spec lives, how to run tests, and the legacy→modern traceability
map. This file IS the knowledge graph that future agents and engineers will
load.
load — and it gets committed: connection details and credentials appear
only as env-var names with a pointer to where they're provisioned, never
as values.
Report: services scaffolded, acceptance tests defined, % behaviors with a
home, location of all artifacts.

View File

@@ -0,0 +1,54 @@
---
description: Where am I in the modernization workflow — artifact inventory, staleness, secrets hygiene, next step
argument-hint: <system-dir>
---
Report where the modernization of `$1` stands, in one screen. This is a
read-only command — inspect, never modify.
## 1 — Artifact inventory
Check `analysis/$1/` and `modernized/$1*/` and build a table — one row per
workflow stage, with the artifact's presence and modification time:
| Stage | Artifacts |
|---|---|
| preflight | `PREFLIGHT.md` |
| assess | `ASSESSMENT.md`, `ARCHITECTURE.mmd` |
| map | `topology.json`, `TOPOLOGY.html`, `*.mmd`, `extract_topology.*` |
| extract-rules | `BUSINESS_RULES.md`, `DATA_OBJECTS.md` |
| brief | `MODERNIZATION_BRIEF.md` (note whether the approval block is signed) |
| harden | `SECURITY_FINDINGS.md`, `security_remediation.patch` |
| transform / reimagine | each `modernized/$1*/<module>/` dir — note test presence and whether `TRANSFORMATION_NOTES.md` exists |
## 2 — Staleness
Flag any artifact older than an upstream artifact it derives from:
- `MODERNIZATION_BRIEF.md` older than `ASSESSMENT.md`, `topology.json`,
or `BUSINESS_RULES.md` → the brief no longer reflects discovery;
recommend re-running `/modernize-brief`.
- `TOPOLOGY.html` older than `topology.json` → re-run the injection step
from `/modernize-map`.
- Any `TRANSFORMATION_NOTES.md` older than `BUSINESS_RULES.md` → the
module may not implement the latest rule set; list which.
## 3 — Secrets hygiene
- Does `analysis/.gitignore` exist and cover `SECRETS.local.md` /
`*.local.patch`? (`git check-ignore` when in a git repo.)
- If `SECRETS.local.md` exists: confirm it is NOT tracked
(`git ls-files --error-unmatch`, expect failure) and has never been
committed (`git log --all --oneline -- <path>`, expect empty). If
either check fails, say so prominently and recommend rotation plus
history scrubbing.
## 4 — Verdict
End with three lines:
- **Where you are** — the furthest completed stage and roughly how much
of the system it covers (e.g. "mapped 100%, 2 of 14 modules
transformed").
- **What's stale** — or "nothing".
- **Next command** — the single most useful next step, with a one-line
reason.

View File

@@ -9,10 +9,37 @@ equivalence.
This is a surgical, single-module transformation — one vertical slice of the
strangler fig. Output goes to `modernized/$1/$2/`.
## Step 0 — Plan (HITL gate)
## Step 0aToolchain check (fail fast on target, adapt on legacy)
Verify the build environment **before** planning, not when the tests
first run:
- **Target stack ($3) — required.** Runtime, package manager, and test
framework all respond (`java -version` + `mvn -v`, `node -v` + `npm -v`,
`python3 -V` + `pytest --version`, …). If any are missing, stop and
report what to install — the new code and its tests cannot run without
them, so a plan gate now would just defer the failure an hour. Suggest
`/modernize-preflight $1 $3` for the full readiness report.
- **Legacy stack — advisory, never a blocker.** Try a syntax-only compile
of the module being transformed (e.g. `cobc -fsyntax-only`). Legacy
code often *cannot* build locally by nature, not by misconfiguration —
CICS/IMS programs have no local translator, and the real runtime may be
a mainframe you don't have. A failed or impossible legacy compile does
**not** stop the transform; it changes the equivalence strategy:
- dual-execution proof is off the table — characterization tests
assert against **recorded traces / golden-master fixtures** (real
production outputs, captured reports/screens, SME-confirmed
examples) instead of live legacy runs
- say so explicitly in the Step 0b plan and later in
TRANSFORMATION_NOTES.md ("equivalence is trace-based; legacy was not
executable in this environment"), so reviewers know the strength of
the proof they're approving
## Step 0b — Plan (HITL gate)
Read the source module and any business rules in `analysis/$1/BUSINESS_RULES.md`
that reference it. Then **enter plan mode** and present:
that reference it. Then present the plan and **stop — write no code until
the user explicitly approves** (use plan mode if the session supports it):
- Which source files are in scope
- The target module structure (packages/classes/files you'll create)
- Which business rules / behaviors this module implements
@@ -30,7 +57,9 @@ identify every observable behavior, and encode each as a test case with
concrete input → expected output pairs derived from the legacy logic.
Target framework: <appropriate for $3>. Write to
`modernized/$1/$2/src/test/`. These tests define 'done' — the new code
must pass all of them."
must pass all of them. Follow your secret-handling rules: no credential
literal from legacy code becomes a fixture; substitute fake same-shape
values and read anything genuinely live from environment variables."
Show the user the test file. Get a 👍 before proceeding.
@@ -68,6 +97,10 @@ Then show a visual diff of one representative behavior, legacy vs modern:
```bash
delta --side-by-side <(sed -n '<lines>p' legacy/$1/<file>) modernized/$1/$2/src/main/<file>
```
(Fall back to `diff -y --width=160` if `delta` isn't installed.) Never
pick a credential-bearing line range for this diff, and mask any
credential-like literal quoted in TRANSFORMATION_NOTES.md — the notes
live in `modernized/` and get committed.
## Step 5 — Architecture review