Claude Code plugin for Fedify#756
Conversation
Adds a Claude Code plugin at claude-plugin/ that can be installed via the Fedify repository acting as its own marketplace: /plugin marketplace add fedify-dev/fedify /plugin install fedify@fedify The plugin provides six slash commands and two specialized agents: Slash commands: - /fedify:fedify General Fedify knowledge (auto-invoked by Claude) - /fedify:docs Fetch and explain fedify.dev documentation - /fedify:actor Guide through implementing an ActivityPub actor - /fedify:inbox Help set up inbox listeners - /fedify:migration Migrate code between Fedify versions - /fedify:fep Look up a Fediverse Enhancement Proposal Agents: - fedify-reviewer Best-practice and security review of Fedify code - fedify-debugger Federation troubleshooting specialist The fedify skill lives canonically in claude-plugin/skills/fedify/ and is referenced from packages/fedify/skills/fedify via a symlink. The npm prepack script (scripts/pack-skills.mjs) resolves the symlink to real files before packing so the published tarball is self-contained, then restores the symlink via postpack. Also updates docs/install.md to document the Claude Code plugin as the primary installation path for Deno users, adds .claude-plugin/ and claude-plugin/ to deno.json excludes, and registers "Claude Code" as a proper noun in .hongdown.toml. Closes fedify-dev#489 Assisted-by: Claude Code:claude-sonnet-4-6 Assisted-by: Codex:gpt-5.5
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughA Claude Code plugin for Fedify development is added: plugin manifests and marketplace entry, multiple Claude skills (actor, docs, fep, inbox, migration), two agent prompts (debugger, reviewer), packaging scripts to resolve a symlinked skills bundle during npm pack, and updated installation docs and config. ChangesClaude Code Plugin Infrastructure
Sequence DiagramsequenceDiagram
participant User
participant Marketplace
participant ClaudePlugin
participant npm
User->>Marketplace: /plugin marketplace add fedify-dev/claude-code
Marketplace->>ClaudePlugin: serve plugin manifest & files
User->>ClaudePlugin: invoke /fedify commands
User->>npm: npm pack (publish)
npm->>ClaudePlugin: run prepack (pack-skills.mjs pre)
ClaudePlugin->>npm: supply copied skills dir for packaging
npm->>ClaudePlugin: run postpack (pack-skills.mjs post)
ClaudePlugin->>npm: restore symlink
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
Suggested labels
Suggested reviewers
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@claude-plugin/skills/migration/SKILL.md`:
- Around line 14-30: In SKILL.md update all file/path mentions to use
asterisk-wrapped formatting instead of bare or backticked forms—e.g., change
occurrences of `@fedify/fedify/vocab`, `@fedify/fedify/runtime`,
`src/webfinger`, `src/x/` (and the example CHANGES.md URL) to
*@fedify/fedify/vocab*, *@fedify/fedify/runtime*, *src/webfinger*, *src/x/*, and
*https://raw.githubusercontent.com/fedify-dev/fedify/refs/heads/main/CHANGES.md*
so the document follows the repo Markdown convention; scan SKILL.md for the
literal symbols shown in the diff and replace each instance accordingly.
In `@docs/install.md`:
- Around line 375-378: The fenced code block using quadruple tildes around the
plugin commands is missing a language tag; update the opening fence from "~~~~"
to "~~~~bash" (or "~~~~sh") so the block becomes a language-specified code block
containing the two commands "/plugin marketplace add fedify-dev/fedify" and
"/plugin install fedify@fedify" to comply with the repo Markdown convention.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 4c1a0d37-4d74-401f-9454-a75b18d597fe
📒 Files selected for processing (17)
.claude-plugin/marketplace.json.hongdown.tomlCHANGES.mdclaude-plugin/.claude-plugin/plugin.jsonclaude-plugin/agents/fedify-debugger.mdclaude-plugin/agents/fedify-reviewer.mdclaude-plugin/skills/actor/SKILL.mdclaude-plugin/skills/docs/SKILL.mdclaude-plugin/skills/fedify/SKILL.mdclaude-plugin/skills/fep/SKILL.mdclaude-plugin/skills/inbox/SKILL.mdclaude-plugin/skills/migration/SKILL.mddeno.jsondocs/install.mdpackages/fedify/package.jsonpackages/fedify/scripts/pack-skills.mjspackages/fedify/skills/fedify
There was a problem hiding this comment.
Code Review
This pull request introduces the official Fedify plugin for Claude Code, featuring specialized agents for debugging and reviewing along with various skills for ActivityPub development. It adds the claude-plugin/ directory, updates the documentation, and modifies the packages/fedify build process to handle skill file symlinks during packaging. I have no feedback to provide.
|
@codex review |
Codecov Report✅ All modified and coverable lines are covered by tests. 🚀 New features to boost your workflow:
|
CHANGES.md, src/webfinger, and src/x/ are file/directory paths and follow the repo convention of asterisk wrapping. Module specifiers such as @fedify/fedify/vocab and @fedify/fedify/runtime are code literals and stay in backticks. fedify-dev#756 (comment) Assisted-by: Claude Code:claude-sonnet-4-6
|
/gemini review |
|
@codex review |
There was a problem hiding this comment.
Code Review
This pull request introduces an official Fedify plugin for Claude Code, providing specialized agents, slash commands, and development skills for ActivityPub. It includes a new packing script to manage skill symlinks and updates the documentation accordingly. Feedback focuses on improving cross-platform compatibility for Windows, specifically regarding symlink creation and temporary directory paths, as well as providing a fallback for the WebFetch tool and updating .gitignore for build artifacts.
|
Codex Review: Didn't find any major issues. Delightful! ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
|
Codex Review: Didn't find any major issues. 🎉 ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
WebFetch may be unavailable in some Claude Code configurations. The skill now falls back to a bash curl command when WebFetch cannot be used. fedify-dev#756 (comment) Assisted-by: Claude Code:claude-sonnet-4-6
/tmp is not portable on Windows. Use ${TMPDIR:-${TEMP:-/tmp}} so
the clone lands in the platform's designated temp directory.
fedify-dev#756 (comment)
Assisted-by: Claude Code:claude-sonnet-4-6
Add 'dir' type to symlinkSync so directory symlinks work on Windows (the type argument is ignored on non-Windows platforms). Add .skills-fedify-symlink to .gitignore so the sentinel file does not get committed if a pack run is interrupted before postpack can clean it up. fedify-dev#756 (comment) fedify-dev#756 (comment) Assisted-by: Claude Code:claude-sonnet-4-6
|
/gemini review |
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@packages/fedify/scripts/pack-skills.mjs`:
- Line 28: Replace the call to rmSync(skillsPath, { recursive: true }) with
unlinkSync(skillsPath) because stat.isSymbolicLink() is true so skillsPath is a
symlink; use the already-imported unlinkSync to explicitly remove the symlink
(remove the meaningless recursive option and rmSync usage) so intent is clear
and idiomatic.
- Around line 39-44: When handling cmd === "post" in the post branch, make
rmSync(skillsPath, { recursive: true }) idempotent by adding force: true so it
won't throw ENOENT if skillsPath is already missing; keep the subsequent
symlinkSync("../../../claude-plugin/skills/fedify", skillsPath, "dir") and
unlinkSync(sentinel) calls intact so the sentinel is always removed and the
symlink recreated even when the directory was already deleted.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 211ed0cf-0476-4fde-859f-10c6a27784db
📒 Files selected for processing (4)
claude-plugin/skills/docs/SKILL.mdclaude-plugin/skills/fep/SKILL.mdpackages/fedify/.gitignorepackages/fedify/scripts/pack-skills.mjs
There was a problem hiding this comment.
Code Review
This pull request introduces the official Fedify plugin for Claude Code, providing a comprehensive set of ActivityPub development tools including specialized agents for debugging and code review, slash commands, and detailed skill guides for core Fedify features. The implementation includes metadata for the Claude Code marketplace, updated documentation, and a build script to ensure the Agent Skills bundle is correctly packaged for npm distribution by resolving symlinks. I have no feedback to provide.
In the pre branch, replace rmSync({ recursive: true }) with unlinkSync
when removing a confirmed symlink. rmSync with recursive is the right
call for directories but misleading for a symlink; unlinkSync is the
correct and explicit API.
In the post branch, add force: true to rmSync so that a missing
skillsPath (e.g. after a manual recovery or half-interrupted prepack)
does not throw ENOENT and leave the sentinel file stranded.
fedify-dev#756 (comment)
fedify-dev#756 (comment)
Assisted-by: Claude Code:claude-sonnet-4-6
|
@codex review |
|
/gemini review |
There was a problem hiding this comment.
Code Review
This pull request introduces a new Claude Code plugin for Fedify, adding slash commands and specialized agents to improve the developer experience. It updates the documentation, configuration files, and adds necessary scripts to handle symlinks and packaging. The review comments provided were actionable and suggested improvements to URL consistency and temporary directory naming, which have been noted.
Shorten the CHANGES.md URL in the migration skill from refs/heads/main to just main, consistent with other raw GitHub URLs in the repository. Rename the FEP clone directory from fep-repo to fedify-fep-repo to reduce the chance of name collisions on shared machines. fedify-dev#756 (comment) fedify-dev#756 (comment) Assisted-by: Claude Code:claude-sonnet-4-6
|
/gemini review |
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
claude-plugin/skills/fep/SKILL.md (1)
11-36:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winAdd required setext headings for this skill document.
Starting at Line 11, the body has no document/section headings. Please add setext-style title/section headings so this Markdown follows repo conventions and avoids MD041.
Proposed structure
+FEP skill +========= + Look up the Fediverse Enhancement Proposal identified by “$ARGUMENTS” and explain how to implement it with Fedify. +Identifier normalisation +------------------------ + Normalise the identifier first: strip any leading `FEP-` or `fep-` prefix and lowercase the result to get the bare four-character hex id (e.g. `8fcf`). Call that `$ID` in the steps below. If the result does not match `^[0-9a-f]{4}$`, stop and ask the user to provide a valid FEP identifier. +Lookup and implementation steps +------------------------------- + 1. If the `fep` MCP server is available, use `mcp__fep__get_fep` with id `$ID` to retrieve the proposal.As per coding guidelines, “Use setext headings for document titles and sections, use ATX headings only for subsections.”
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@claude-plugin/skills/fep/SKILL.md` around lines 11 - 36, The SKILL.md body lacks setext-style headings; update the document to add a top-level setext title and section setext headings for the main parts of the procedure (e.g., a document title for the skill, and sections for "Normalization", "Retrieval", "Summarise", and "Fedify Implementation") so the content that begins at the current step list is grouped under proper headings; use underlined setext headings (=== or ---) rather than ATX headings and place each heading immediately before the related paragraph(s)/step(s) (refer to the step list and items 1–3 in the diff to locate where to insert the "Normalization", "Retrieval" and "Implementation" section headings).
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@claude-plugin/skills/migration/SKILL.md`:
- Around line 10-30: The document uses plain labels ("Steps:", "Key migration
hints:") instead of setext headings; change the top-level title and each section
heading to setext style (underline the title with === and section headings with
---) and keep existing ATX headings only for subsections as required by the repo
convention; update the sections that currently read "Steps:" and "Key migration
hints:" and any other plain-label lines to use setext headings while preserving
the content, code blocks and lists (e.g., the migration hints list and the
numbered Steps) and ensure the summary/proposed-fix details remain intact under
the new headings.
---
Outside diff comments:
In `@claude-plugin/skills/fep/SKILL.md`:
- Around line 11-36: The SKILL.md body lacks setext-style headings; update the
document to add a top-level setext title and section setext headings for the
main parts of the procedure (e.g., a document title for the skill, and sections
for "Normalization", "Retrieval", "Summarise", and "Fedify Implementation") so
the content that begins at the current step list is grouped under proper
headings; use underlined setext headings (=== or ---) rather than ATX headings
and place each heading immediately before the related paragraph(s)/step(s)
(refer to the step list and items 1–3 in the diff to locate where to insert the
"Normalization", "Retrieval" and "Implementation" section headings).
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: a81eeec0-95fa-4f70-9522-70e8a3913f54
📒 Files selected for processing (2)
claude-plugin/skills/fep/SKILL.mdclaude-plugin/skills/migration/SKILL.md
There was a problem hiding this comment.
Code Review
This pull request introduces the official Fedify plugin for Claude Code, which includes specialized agents and skills for ActivityPub development tasks like debugging, reviewing, and migration. The implementation involves a new claude-plugin/ directory, a build script to manage symlinked skills during npm packaging for the @fedify/fedify package, and updated documentation. I have no feedback to provide as there were no review comments.
Replace the plain-label sections "Steps:" and "Key migration hints:" with setext headings to match the repo's Markdown convention of using setext headings for document sections. fedify-dev#756 (comment) Assisted-by: Claude Code:claude-sonnet-4-6
|
/gemini review |
There was a problem hiding this comment.
Code Review
This pull request introduces a Claude Code plugin for Fedify, providing specialized agents and skill guides for ActivityPub development. Key additions include the fedify-debugger and fedify-reviewer agents, along with skills for actor implementation, documentation retrieval, FEP lookups, and inbox configuration. To support the distribution of these skills, a new script handles the resolution of symlinks during the npm packing process, ensuring the @fedify/fedify package remains self-contained. Documentation and project configurations have been updated accordingly. I have no feedback to provide as there were no review comments.
|
@codex review |
Replace the flat numbered-step structure with setext sections: Normalization, Retrieval, Summary, and Fedify implementation. Matches the repo's Markdown convention of using setext headings for document sections. Assisted-by: Claude Code:claude-sonnet-4-6
|
Codex Review: Didn't find any major issues. More of your lovely PRs please. ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
Issue #489 asked for a Claude Code plugin living inside this repository rather than a separate fedify-dev/claude-code repo. The main argument for keeping it here is version lockstep: when a dispatcher API or CLI subcommand changes, the plugin update can land in the same commit. The previous PR (#712) added the Agent Skills bundle at packages/fedify/skills/fedify/SKILL.md for npm-based tool distribution; this PR packages that skill as a Claude Code plugin, adding slash commands and two Fedify-specific agents.
.claude-plugin/marketplace.json at the repo root makes the Fedify repository act as its own Claude Code marketplace. Users install the plugin with:
The plugin adds six slash commands.
/fedify:fedifyis the general Fedify skill, auto-invoked by Claude when working on Fedify code. The other commands cover fedify.dev docs lookup, actor setup, inbox listeners, version migrations, and FEP lookup.Two agents are also included.
fedify-reviewerchecks Fedify code for project convention issues, missing security checks, and ActivityPub interoperability problems; it loads the fedify skill at startup so its prompt includes the Fedify API guidance from the skill.fedify-debuggerhelps debug federation failures, including WebFinger lookup failures, HTTP signature errors, delivery queue failures, and inbox processing bugs.Skill file layout
claude-plugin/skills/fedify/SKILL.md is the canonical file. packages/fedify/skills/fedify is a symlink pointing to ../../../claude-plugin/skills/fedify, so both distribution paths share one source.
npm packdoes not follow symlinks that point outside the package root, so the skill would be missing from the tarball unlessprepackcopies it first. packages/fedify/scripts/pack-skills.mjs handles this:prepackdetects the symlink, copies the target directory into place as real files, andpostpackrestores the symlink. The script uses a sentinel file to confirm it actually performed a conversion, leaving a real directory untouched if one is already present.Other changes
deno.json excludes .claude-plugin/ and claude-plugin/ from Deno's formatter and linter. docs/install.md gains a "Claude Code plugin" subsection before the existing Node.js/Bun and Deno fallback paths, since the plugin covers all runtimes. .hongdown.toml adds "Claude Code" to the proper nouns list.
Closes #489.