Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
{
"$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
"name": "claude-code-plugins",
"version": "1.0.0",
"description": "Bundled plugins for Claude Code including Agent SDK development tools, PR review toolkit, and commit workflows",
"owner": {
"name": "Anthropic",
"email": "support@anthropic.com"
},
"metadata": {
"version": "1.0.0",
"description": "Bundled plugins for Claude Code including Agent SDK development tools, PR review toolkit, and commit workflows"
},
"plugins": [
{
"name": "agent-sdk-dev",
Expand Down
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ pids
.env
.env.local
.env.*.local

settings.local.json
# IDE
.vscode/
.idea/
Expand Down
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@

c0aca304189825d07d68f12a85ca4c4f5d53e58b {"key":"pacote:tarball:file:E:/ZNGZ/Code_copy/learning_proj/Open-ClaudeCode/package","integrity":"sha512-ukMtYZCi0I7cD3rt89rnXy20D/Zvk0Gj/SW60xYfz17zTslLz+VuhXw/KPb+2ndp3/ATadJdyNEqdKQlcNk7nQ==","time":1779353697479,"size":31196633}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Do not commit npm cacache artifacts with machine-specific absolute paths.

This file is generated cache state and includes a local absolute path (E:/...). It should be removed from version control and ignored to avoid noisy diffs and environment leakage.

Suggested cleanup
diff --git a/agent-team-test-artifacts/agent-1/npm-cache/_cacache/index-v5/8e/df/5472fe1cc0e8f0c6de8ab9638dcb0eb4220317269f225ef94e7896902fd7 b/agent-team-test-artifacts/agent-1/npm-cache/_cacache/index-v5/8e/df/5472fe1cc0e8f0c6de8ab9638dcb0eb4220317269f225ef94e7896902fd7
deleted file mode 100644
index 0000000..0000000
--- a/agent-team-test-artifacts/agent-1/npm-cache/_cacache/index-v5/8e/df/5472fe1cc0e8f0c6de8ab9638dcb0eb4220317269f225ef94e7896902fd7
+++ /dev/null
@@ -1,2 +0,0 @@
-
-c0aca304189825d07d68f12a85ca4c4f5d53e58b	{"key":"pacote:tarball:file:E:/ZNGZ/Code_copy/learning_proj/Open-ClaudeCode/package","integrity":"sha512-ukMtYZCi0I7cD3rt89rnXy20D/Zvk0Gj/SW60xYfz17zTslLz+VuhXw/KPb+2ndp3/ATadJdyNEqdKQlcNk7nQ==","time":1779353697479,"size":31196633}

diff --git a/.gitignore b/.gitignore
@@
+# npm cache artifacts (test artifacts/local runs)
+agent-team-test-artifacts/**/npm-cache/
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
c0aca304189825d07d68f12a85ca4c4f5d53e58b {"key":"pacote:tarball:file:E:/ZNGZ/Code_copy/learning_proj/Open-ClaudeCode/package","integrity":"sha512-ukMtYZCi0I7cD3rt89rnXy20D/Zvk0Gj/SW60xYfz17zTslLz+VuhXw/KPb+2ndp3/ATadJdyNEqdKQlcNk7nQ==","time":1779353697479,"size":31196633}
🤖 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
`@agent-team-test-artifacts/agent-1/npm-cache/_cacache/index-v5/8e/df/5472fe1cc0e8f0c6de8ab9638dcb0eb4220317269f225ef94e7896902fd7`
at line 2, The committed cacache artifact contains a machine-specific absolute
path (see the cached entry with key "pacote:tarball:file:...") and must be
removed and ignored: delete this file from the repo history/working tree, run
git rm --cached on the file (or the entire npm-cache/_cacache directory), add an
appropriate ignore rule (e.g., ignore npm-cache/ or _cacache/ or the specific
pattern matching pacote tarball cache) to .gitignore, and commit the removal so
future commits do not include these generated, environment-specific cache files.

3 changes: 2 additions & 1 deletion plugins/hookify/agents/conversation-analyzer.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
name: conversation-analyzer
description: Use this agent when analyzing conversation transcripts to find behaviors worth preventing with hooks. Examples: <example>Context: User is running /hookify command without arguments\nuser: "/hookify"\nassistant: "I'll analyze the conversation to find behaviors you want to prevent"\n<commentary>The /hookify command without arguments triggers conversation analysis to find unwanted behaviors.</commentary></example><example>Context: User wants to create hooks from recent frustrations\nuser: "Can you look back at this conversation and help me create hooks for the mistakes you made?"\nassistant: "I'll use the conversation-analyzer agent to identify the issues and suggest hooks."\n<commentary>User explicitly asks to analyze conversation for mistakes that should be prevented.</commentary></example>
description: |-
Use this agent when analyzing conversation transcripts to find behaviors worth preventing with hooks. Examples: <example>Context: User is running /hookify command without arguments\nuser: "/hookify"\nassistant: "I'll analyze the conversation to find behaviors you want to prevent"\n<commentary>The /hookify command without arguments triggers conversation analysis to find unwanted behaviors.</commentary></example><example>Context: User wants to create hooks from recent frustrations\nuser: "Can you look back at this conversation and help me create hooks for the mistakes you made?"\nassistant: "I'll use the conversation-analyzer agent to identify the issues and suggest hooks."\n<commentary>User explicitly asks to analyze conversation for mistakes that should be prevented.</commentary></example>
Comment on lines +3 to +4
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Verify block-scalar descriptions that still contain literal "\n"
rg -n --type=md '^description:\s*\|-' plugins | cut -d: -f1 | sort -u | while read -r f; do
  awk '
    BEGIN {in_desc=0}
    /^description:[[:space:]]*\|-/ {in_desc=1; next}
    in_desc && /^[^[:space:]]/ {in_desc=0}
    in_desc && /\\n/ {print FILENAME ":" NR ":" $0}
  ' "$f"
done

Repository: LING71671/Open-ClaudeCode

Length of output: 10009


🏁 Script executed:

#!/bin/bash
# Verify block-scalar descriptions that still contain literal "\n"
rg -n --type=md '^description:\s*\|-' plugins | cut -d: -f1 | sort -u | while read -r f; do
  awk '
    BEGIN {in_desc=0}
    /^description:[[:space:]]*\|-/ {in_desc=1; next}
    in_desc && /^[^[:space:]]/ {in_desc=0}
    in_desc && /\\n/ {print FILENAME ":" NR ":" $0}
  ' "$f"
done

Repository: LING71671/Open-ClaudeCode

Length of output: 10009


🏁 Script executed:

#!/bin/bash
# Verify block-scalar descriptions that still contain literal "\n"
rg -n --type=md '^description:\s*\|-' plugins | cut -d: -f1 | sort -u | while read -r f; do
  awk '
    BEGIN {in_desc=0}
    /^description:[[:space:]]*\|-/ {in_desc=1; next}
    in_desc && /^[^[:space:]]/ {in_desc=0}
    in_desc && /\\n/ {print FILENAME ":" NR ":" $0}
  ' "$f"
done

Repository: LING71671/Open-ClaudeCode

Length of output: 10009


🏁 Script executed:

#!/bin/bash
# Verify block-scalar descriptions that still contain literal "\n"
rg -n --type=md '^description:\s*\|-' plugins | cut -d: -f1 | sort -u | while read -r f; do
  awk '
    BEGIN {in_desc=0}
    /^description:[[:space:]]*\|-/ {in_desc=1; next}
    in_desc && /^[^[:space:]]/ {in_desc=0}
    in_desc && /\\n/ {print FILENAME ":" NR ":" $0}
  ' "$f"
done

Repository: LING71671/Open-ClaudeCode

Length of output: 10009


🏁 Script executed:

#!/bin/bash
# Verify block-scalar descriptions that still contain literal "\n"
rg -n --type=md '^description:\s*\|-' plugins | cut -d: -f1 | sort -u | while read -r f; do
  awk '
    BEGIN {in_desc=0}
    /^description:[[:space:]]*\|-/ {in_desc=1; next}
    in_desc && /^[^[:space:]]/ {in_desc=0}
    in_desc && /\\n/ {print FILENAME ":" NR ":" $0}
  ' "$f"
done

Repository: LING71671/Open-ClaudeCode

Length of output: 10009


🏁 Script executed:

#!/bin/bash
# Verify block-scalar descriptions that still contain literal "\n"
rg -n --type=md '^description:\s*\|-' plugins | cut -d: -f1 | sort -u | while read -r f; do
  awk '
    BEGIN {in_desc=0}
    /^description:[[:space:]]*\|-/ {in_desc=1; next}
    in_desc && /^[^[:space:]]/ {in_desc=0}
    in_desc && /\\n/ {print FILENAME ":" NR ":" $0}
  ' "$f"
done

Repository: LING71671/Open-ClaudeCode

Length of output: 10009


🏁 Script executed:

#!/bin/bash
# Verify block-scalar descriptions that still contain literal "\n"
rg -n --type=md '^description:\s*\|-' plugins | cut -d: -f1 | sort -u | while read -r f; do
  awk '
    BEGIN {in_desc=0}
    /^description:[[:space:]]*\|-/ {in_desc=1; next}
    in_desc && /^[^[:space:]]/ {in_desc=0}
    in_desc && /\\n/ {print FILENAME ":" NR ":" $0}
  ' "$f"
done

Repository: LING71671/Open-ClaudeCode

Length of output: 10009


🏁 Script executed:

#!/bin/bash
# Verify block-scalar descriptions that still contain literal "\n"
rg -n --type=md '^description:\s*\|-' plugins | cut -d: -f1 | sort -u | while read -r f; do
  awk '
    BEGIN {in_desc=0}
    /^description:[[:space:]]*\|-/ {in_desc=1; next}
    in_desc && /^[^[:space:]]/ {in_desc=0}
    in_desc && /\\n/ {print FILENAME ":" NR ":" $0}
  ' "$f"
done

Repository: LING71671/Open-ClaudeCode

Length of output: 10009


🏁 Script executed:

#!/bin/bash
# Verify block-scalar descriptions that still contain literal "\n"
rg -n --type=md '^description:\s*\|-' plugins | cut -d: -f1 | sort -u | while read -r f; do
  awk '
    BEGIN {in_desc=0}
    /^description:[[:space:]]*\|-/ {in_desc=1; next}
    in_desc && /^[^[:space:]]/ {in_desc=0}
    in_desc && /\\n/ {print FILENAME ":" NR ":" $0}
  ' "$f"
done

Repository: LING71671/Open-ClaudeCode

Length of output: 10009


🏁 Script executed:

#!/bin/bash
# Verify block-scalar descriptions that still contain literal "\n"
rg -n --type=md '^description:\s*\|-' plugins | cut -d: -f1 | sort -u | while read -r f; do
  awk '
    BEGIN {in_desc=0}
    /^description:[[:space:]]*\|-/ {in_desc=1; next}
    in_desc && /^[^[:space:]]/ {in_desc=0}
    in_desc && /\\n/ {print FILENAME ":" NR ":" $0}
  ' "$f"
done

Repository: LING71671/Open-ClaudeCode

Length of output: 10009


🏁 Script executed:

#!/bin/bash
# Verify block-scalar descriptions that still contain literal "\n"
rg -n --type=md '^description:\s*\|-' plugins | cut -d: -f1 | sort -u | while read -r f; do
  awk '
    BEGIN {in_desc=0}
    /^description:[[:space:]]*\|-/ {in_desc=1; next}
    in_desc && /^[^[:space:]]/ {in_desc=0}
    in_desc && /\\n/ {print FILENAME ":" NR ":" $0}
  ' "$f"
done

Repository: LING71671/Open-ClaudeCode

Length of output: 10009


🏁 Script executed:

#!/bin/bash
# Verify block-scalar descriptions that still contain literal "\n"
rg -n --type=md '^description:\s*\|-' plugins | cut -d: -f1 | sort -u | while read -r f; do
  awk '
    BEGIN {in_desc=0}
    /^description:[[:space:]]*\|-/ {in_desc=1; next}
    in_desc && /^[^[:space:]]/ {in_desc=0}
    in_desc && /\\n/ {print FILENAME ":" NR ":" $0}
  ' "$f"
done

Repository: LING71671/Open-ClaudeCode

Length of output: 10009


🏁 Script executed:

#!/bin/bash
# Verify block-scalar descriptions that still contain literal "\n"
rg -n --type=md '^description:\s*\|-' plugins | cut -d: -f1 | sort -u | while read -r f; do
  awk '
    BEGIN {in_desc=0}
    /^description:[[:space:]]*\|-/ {in_desc=1; next}
    in_desc && /^[^[:space:]]/ {in_desc=0}
    in_desc && /\\n/ {print FILENAME ":" NR ":" $0}
  ' "$f"
done

Repository: LING71671/Open-ClaudeCode

Length of output: 10009


🏁 Script executed:

#!/bin/bash
# Verify block-scalar descriptions that still contain literal "\n"
rg -n --type=md '^description:\s*\|-' plugins | cut -d: -f1 | sort -u | while read -r f; do
  awk '
    BEGIN {in_desc=0}
    /^description:[[:space:]]*\|-/ {in_desc=1; next}
    in_desc && /^[^[:space:]]/ {in_desc=0}
    in_desc && /\\n/ {print FILENAME ":" NR ":" $0}
  ' "$f"
done

Repository: LING71671/Open-ClaudeCode

Length of output: 10009


🏁 Script executed:

#!/bin/bash
# Verify block-scalar descriptions that still contain literal "\n"
rg -n --type=md '^description:\s*\|-' plugins | cut -d: -f1 | sort -u | while read -r f; do
  awk '
    BEGIN {in_desc=0}
    /^description:[[:space:]]*\|-/ {in_desc=1; next}
    in_desc && /^[^[:space:]]/ {in_desc=0}
    in_desc && /\\n/ {print FILENAME ":" NR ":" $0}
  ' "$f"
done

Repository: LING71671/Open-ClaudeCode

Length of output: 10009


🏁 Script executed:

#!/bin/bash
# Verify block-scalar descriptions that still contain literal "\n"
rg -n --type=md '^description:\s*\|-' plugins | cut -d: -f1 | sort -u | while read -r f; do
  awk '
    BEGIN {in_desc=0}
    /^description:[[:space:]]*\|-/ {in_desc=1; next}
    in_desc && /^[^[:space:]]/ {in_desc=0}
    in_desc && /\\n/ {print FILENAME ":" NR ":" $0}
  ' "$f"
done

Repository: LING71671/Open-ClaudeCode

Length of output: 10009


Fix YAML description: |- to remove literal \n

description: |- in these files contains literal backslash+n (\n) text, which YAML preserves instead of converting to real line breaks. Replace those \n sequences with actual newlines in:

  • plugins/hookify/agents/conversation-analyzer.md
  • plugins/pr-review-toolkit/agents/code-reviewer.md
  • plugins/pr-review-toolkit/agents/code-simplifier.md
  • plugins/pr-review-toolkit/agents/comment-analyzer.md
  • plugins/pr-review-toolkit/agents/pr-test-analyzer.md
  • plugins/pr-review-toolkit/agents/silent-failure-hunter.md
  • plugins/pr-review-toolkit/agents/type-design-analyzer.md
🤖 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 `@plugins/hookify/agents/conversation-analyzer.md` around lines 3 - 4, The YAML
"description: |-" blocks contain literal backslash+n sequences instead of real
line breaks; for each listed file
(plugins/hookify/agents/conversation-analyzer.md and the six
plugins/pr-review-toolkit/agents/*.md files) edit the YAML description value
(the "description: |-" block) and replace occurrences of the two-character
sequence "\n" with actual newline characters so the text is rendered as
intended; ensure you preserve the surrounding YAML block indicator ("|-") and
any inline example/commentary markers while converting those literal "\n"
sequences into real multi-line content.

model: inherit
color: yellow
tools: ["Read", "Grep"]
Expand Down
9 changes: 9 additions & 0 deletions plugins/plugin-dev/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"name": "plugin-dev",
"description": "Comprehensive toolkit for developing Claude Code plugins. Includes expert skills covering hooks, MCP integration, commands, agents, and best practices.",
"version": "0.1.0",
Comment on lines +2 to +4
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Confirm whether other plugins in this repo also duplicate manifest fields in marketplace.json
fd -t f 'plugin.json' plugins -x sh -c 'echo "=== {} ==="; cat {}'

Repository: LING71671/Open-ClaudeCode

Length of output: 51


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# 1) Show the relevant manifest snippet
echo "---- plugin-dev/.claude-plugin/plugin.json (lines 1-40) ----"
nl -ba plugins/plugin-dev/.claude-plugin/plugin.json | sed -n '1,40p'

# 2) Show the relevant marketplace snippet around the plugin-dev entry
echo "---- plugins/.claude-plugin/marketplace.json (around plugin-dev) ----"
ls -la plugins/*/.claude-plugin/marketplace.json 2>/dev/null || true

# Try the path mentioned by the comment (from repo root)
if [ -f plugins/plugin-dev/.claude-plugin/marketplace.json ]; then
  target="plugins/plugin-dev/.claude-plugin/marketplace.json"
else
  # Fallback: search for marketplace.json in repo
  target="$(fd -t f 'marketplace.json' . | head -n 1)"
fi

echo "Using marketplace.json: $target"
nl -ba "$target" | sed -n '90,140p' | cat

# 3) Identify how marketplace.json represents plugin entries (especially plugin-dev)
echo "---- plugin-dev entry block (best-effort) ----"
rg -n '"plugin-dev"' "$target" || true
rg -n '"name"[[:space:]]*:[[:space:]]*"plugin-dev"' "$target" || true
rg -n '"name"[[:space:]]*:[[:space:]]*"plugin-dev"' plugins/plugin-dev -S || true

# 4) Scan for drift: compare plugin.json description vs marketplace.json description where both exist
#    We'll extract all plugin.json descriptions and then look for corresponding marketplace entries.
tmpdir="$(mktemp -d)"
echo "Using temp dir: $tmpdir"

# Extract plugin.json descriptions: <pluginPath>\t<description>
fd -t f 'plugin.json' plugins -x sh -c '
  f="{}";
  desc="$(jq -r ".description // empty" "$f" 2>/dev/null || true)";
  if [ -n "$desc" ]; then
    plugin="$(dirname "$f")";
    printf "%s\t%s\n" "$plugin" "$desc";
  fi
' > "$tmpdir/plugin_descriptions.tsv" || true

echo "---- Sample extracted plugin.json descriptions (first 20) ----"
head -n 20 "$tmpdir/plugin_descriptions.tsv" || true

# For marketplace.json files, look for description under entries containing plugin-dev and any other plugin names.
# We'll find all marketplace.json and check whether they include a "description" field that differs from manifest for the same plugin dir name.
fd -t f 'marketplace.json' plugins -x sh -c '
  mf="{}";
  echo "== Checking $mf ==";
  # Extract candidate plugin name -> description from marketplace.json
  # Assumes top-level array or object containing entries; handle common shapes.
  jq -r '"'"'if (type=="array") then (.[].name // .[].name) else empty end'"'"'' "$mf" >/dev/null 2>&1 || true
  jq -r '"'"'
    def norm(x): (x|tostring);
    if (type=="array") then
      .[]
      | .name as $n
      | "\($n)\t"+( .description // "" )
    else
      to_entries[]
      | .value
      | .name as $n
      | "\($n)\t"+( .description // "" )
    end
  '"'"'' "$mf" 2>/dev/null | head -n 3 || true
' || true

# 5) Specifically count occurrences where marketplace.json includes "description" with markdown emphasis (like **7**),
#    as a proxy for manifest drift patterns.
fd -t f 'marketplace.json' plugins -x rg -n '"description"' || true

Repository: LING71671/Open-ClaudeCode

Length of output: 191


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Locate relevant files
echo "---- marketplace.json files under plugins/ ----"
fd -t f 'marketplace.json' plugins | sed -n '1,200p'

echo "---- plugin-dev manifest ----"
ls -la plugins/plugin-dev/.claude-plugin/plugin.json
echo "plugin.json (lines 1-20)"
cat -n plugins/plugin-dev/.claude-plugin/plugin.json | sed -n '1,25p'

# Find the marketplace.json that contains plugin-dev entry (best-effort)
echo "---- searching for plugin-dev in marketplace.json ----"
fd -t f 'marketplace.json' plugins -x sh -c 'echo "== $1 =="; rg -n "\"plugin-dev\"" "$1" || true' sh {}

echo "---- show nearby block for plugin-dev (best-effort) ----"
# Use rg to find the line number, then print a window around it.
target_mf="$(fd -t f 'marketplace.json' plugins | head -n 50 | xargs -I{} sh -c 'rg -q "\"plugin-dev\"" "{}" && echo "{}"' | head -n 1 || true)"
if [ -n "${target_mf}" ]; then
  echo "Using marketplace.json: $target_mf"
  # Find first match line number
  line="$(rg -n "\"plugin-dev\"" "$target_mf" | head -n 1 | cut -d: -f1 || true)"
  echo "Match line: ${line}"
  start=$(( line>10 ? line-10 : 1 ))
  end=$(( line+40 ))
  echo "---- $target_mf (lines ${start}-${end}) ----"
  sed -n "${start},${end}p" "$target_mf"
else
  echo "No marketplace.json containing \"plugin-dev\" found under plugins/."
fi

echo "---- drift scan: compare plugin.json description vs marketplace.json description ----"
python3 - <<'PY'
import json, os, sys, glob

def find_files(root, name):
    out=[]
    for dirpath, dirnames, filenames in os.walk(root):
        if name in filenames:
            out.append(os.path.join(dirpath, name))
    return out

plugin_jsons = []
for p in find_files("plugins", "plugin.json"):
    if "/.claude-plugin/" in p.replace("\\","/"):
        plugin_jsons.append(p)

marketplaces = find_files("plugins", "marketplace.json")

def collect_entries(obj, path=""):
    # collect objects that look like {name:..., description:...}
    res=[]
    if isinstance(obj, dict):
        if "name" in obj and "description" in obj:
            res.append((obj.get("name"), obj.get("description"), path))
        for k,v in obj.items():
            res.extend(collect_entries(v, path + f"/{k}"))
    elif isinstance(obj, list):
        for i,v in enumerate(obj):
            res.extend(collect_entries(v, path + f"[{i}]"))
    return res

# Parse all plugin manifests
manifest_by_name = {}
for pj in plugin_jsons:
    try:
        with open(pj, "r", encoding="utf-8") as f:
            data=json.load(f)
        name=data.get("name")
        desc=data.get("description")
        if name:
            manifest_by_name[name]=desc
    except Exception as e:
        print(f"Failed to parse {pj}: {e}", file=sys.stderr)

# Parse marketplace files and compare
mismatches=[]
found_entries=0
for mf in marketplaces:
    try:
        with open(mf, "r", encoding="utf-8") as f:
            data=json.load(f)
    except Exception as e:
        print(f"Failed to parse {mf}: {e}", file=sys.stderr)
        continue
    entries=collect_entries(data)
    # index marketplace descriptions by name (first occurrence)
    desc_by_name={}
    for nm, desc, path in entries:
        if nm not in desc_by_name:
            desc_by_name[nm]=desc
    for nm, mdesc in manifest_by_name.items():
        if nm in desc_by_name:
            found_entries+=1
            if (mdesc or "") != (desc_by_name[nm] or ""):
                mismatches.append((nm, mdesc, desc_by_name[nm], mf))
    # also count how many plugin names matched
# Output results
print(f"Manifest plugins found: {len(manifest_by_name)}")
print(f"Marketplace.json files found: {len(marketplaces)}")
print(f"Marketplace entries matched to manifests: {found_entries}")

print("---- mismatches (up to 50) ----")
for i,(nm, mdesc, pdesc, mf) in enumerate(mismatches[:50], 1):
    print(f"{i}) {nm} @ {mf}")
    print("   manifest description:", (mdesc or "")[:200].replace("\n","\\n"))
    print("   marketplace description:", (pdesc or "")[:200].replace("\n","\\n"))
print(f"Total mismatches: {len(mismatches)}")
PY

Repository: LING71671/Open-ClaudeCode

Length of output: 1052


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "---- locate marketplace.json anywhere in repo ----"
fd -t f 'marketplace.json' .

echo "---- search for plugin-dev in any marketplace.json ----"
fd -t f 'marketplace.json' . | xargs -I{} sh -c 'echo "== {} =="; rg -n "\"plugin-dev\"" "{}" || true'

echo "---- search for marketplace.json under any .claude-plugin dirs ----"
fd -t f 'marketplace.json' . -g '*.json' -E node_modules . || true

echo "---- locate any .claude-plugin/marketplace.json specifically ----"
fd -t f 'marketplace.json' . -E node_modules | rg -n "\\.claude-plugin/marketplace\\.json$" || true

Repository: LING71671/Open-ClaudeCode

Length of output: 381


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "---- fd for marketplace.json (include hidden) ----"
fd -t f --hidden 'marketplace.json' . || true

echo "---- rg for 'marketplace.json' references (include hidden) ----"
rg -n --hidden --no-ignore -S 'marketplace\.json' . || true

echo "---- find any .claude-plugin/marketplace.* (include hidden) ----"
fd -t f --hidden '.*/.claude-plugin/marketplace.*' . || true

echo "---- list all .claude-plugin directories (include hidden) ----"
fd -t d --hidden '.claude-plugin' . || true

Repository: LING71671/Open-ClaudeCode

Length of output: 50383


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "---- marketplace.json files (all) ----"
fd -t f --hidden 'marketplace.json' .

echo "---- plugin-dev entry excerpt from .claude-plugin/marketplace.json (lines 95-135, best-effort) ----"
mf=".claude-plugin/marketplace.json"
if [ -f "$mf" ]; then
  awk '{print NR "\t" $0}' "$mf" | sed -n '95,135p'
else
  echo "Missing $mf"
fi

echo "---- drift scan: manifest vs marketplace description ----"
python3 - <<'PY'
import json, os, sys
from pathlib import Path

def load_json(p):
    with open(p, "r", encoding="utf-8") as f:
        return json.load(f)

def find_manifest_plugins(root="plugins"):
    out = {}
    for p in Path(root).glob("*/.claude-plugin/plugin.json"):
        try:
            d = load_json(p)
            name = d.get("name")
            if name:
                out[name] = d.get("description","") or ""
        except Exception as e:
            print(f"Failed to parse manifest {p}: {e}", file=sys.stderr)
    return out

def collect_objects_with_keys(obj):
    # returns list of tuples (name, description)
    res=[]
    def walk(x):
        if isinstance(x, dict):
            if "name" in x and "description" in x:
                res.append((x.get("name"), x.get("description","") or ""))
            for v in x.values():
                walk(v)
        elif isinstance(x, list):
            for it in x:
                walk(it)
    walk(obj)
    return res

manifest = find_manifest_plugins("plugins")

marketplace_files = []
for p in Path(".").rglob("marketplace.json"):
    if ".git" in p.parts: 
        continue
    marketplace_files.append(p)

mismatches=[]
matched=0
for mf in marketplace_files:
    try:
        data = load_json(mf)
    except Exception as e:
        print(f"Failed to parse marketplace {mf}: {e}", file=sys.stderr)
        continue
    entries = collect_objects_with_keys(data)
    desc_by_name = {}
    for nm, desc in entries:
        if nm is None:
            continue
        if nm not in desc_by_name:
            desc_by_name[nm] = (desc or "")
    for nm, mdesc in manifest.items():
        if nm in desc_by_name:
            matched += 1
            if (mdesc or "") != (desc_by_name.get(nm) or ""):
                mismatches.append((nm, str(mf), mdesc or "", desc_by_name[nm] or ""))
    # done

print(f"Manifest plugins found: {len(manifest)}")
print(f"Marketplace.json files found: {len(marketplace_files)}")
print(f"Matched manifest->marketplace entries: {matched}")
print(f"Mismatches (manifest description != marketplace description): {len(mismatches)}")

# Show up to 20 mismatches
for i, (nm, mf, mdesc, pdesc) in enumerate(mismatches[:20], 1):
    print(f"{i}) {nm} @ {mf}")
    print(f"   manifest description: {mdesc[:160].replace(chr(10),'\\n')}")
    print(f"   marketplace description: {pdesc[:160].replace(chr(10),'\\n')}")
PY

Repository: LING71671/Open-ClaudeCode

Length of output: 2336


🏁 Script executed:

#!/bin/bash
set -euo pipefail

python3 - <<'PY'
import json
from pathlib import Path

def load_json(p):
    with open(p, "r", encoding="utf-8") as f:
        return json.load(f)

def manifest_descriptions():
    out = {}
    for p in Path("plugins").glob("*/.claude-plugin/plugin.json"):
        try:
            d = load_json(p)
            name = d.get("name")
            if name:
                out[name] = d.get("description") or ""
        except Exception as e:
            print(f"Failed to parse manifest {p}: {e}")
    return out

def collect_objects_with_keys(obj, acc=None):
    if acc is None:
        acc = []
    if isinstance(obj, dict):
        if "name" in obj and "description" in obj:
            acc.append((obj.get("name"), obj.get("description") or ""))
        for v in obj.values():
            collect_objects_with_keys(v, acc)
    elif isinstance(obj, list):
        for it in obj:
            collect_objects_with_keys(it, acc)
    return acc

manifest = manifest_descriptions()

marketplace_files = [p for p in Path(".").rglob("marketplace.json") if ".git" not in p.parts]

mismatches = []
matched = 0
for mf in marketplace_files:
    try:
        data = load_json(mf)
    except Exception as e:
        print(f"Failed to parse marketplace {mf}: {e}")
        continue

    entries = collect_objects_with_keys(data)
    desc_by_name = {}
    for nm, desc in entries:
        if nm is None:
            continue
        if nm not in desc_by_name:
            desc_by_name[nm] = desc

    for nm, mdesc in manifest.items():
        if nm in desc_by_name:
            matched += 1
            pdesc = desc_by_name.get(nm) or ""
            if (mdesc or "") != pdesc:
                mismatches.append((nm, str(mf), mdesc, pdesc))

print(f"Manifest plugins found: {len(manifest)}")
print(f"Marketplace.json files found: {len(marketplace_files)}")
print(f"Matched manifest->marketplace entries: {matched}")
print(f"Mismatches: {len(mismatches)}")

# show the plugin-dev mismatch and then a few others
def show_one(i):
    nm, mf, mdesc, pdesc = mismatches[i]
    def esc(s): return s[:160].replace("\n","\\n")
    print(f"\n{i+1}) {nm} @ {mf}")
    print(f"   manifest description: {esc(mdesc)}")
    print(f"   marketplace description: {esc(pdesc)}")

# prioritize plugin-dev
idxs = [i for i,(nm,_,_,_) in enumerate(mismatches) if nm=="plugin-dev"]
if idxs:
    show_one(idxs[0])

for i in range(len(mismatches)):
    nm, _, _, _ = mismatches[i]
    if nm=="plugin-dev":
        continue
    if mismatches and len([x for x in mismatches if x[0]=="plugin-dev"])==0:
        pass
    # show up to 10 non-plugin-dev mismatches
    if sum(1 for x in mismatches[:i] if x[0]!="plugin-dev") >= 10:
        break
    # just show next few
PY

Repository: LING71671/Open-ClaudeCode

Length of output: 599


🏁 Script executed:

#!/bin/bash
set -euo pipefail

python3 - <<'PY'
import json
from pathlib import Path

def load_json(p):
    with open(p, "r", encoding="utf-8") as f:
        return json.load(f)

def manifest_descriptions():
    out = {}
    for p in Path("plugins").glob("*/.claude-plugin/plugin.json"):
        d = load_json(p)
        name = d.get("name")
        if name:
            out[name] = d.get("description","") or ""
    return out

def collect_objects_with_keys(obj, acc):
    if isinstance(obj, dict):
        if "name" in obj and "description" in obj:
            acc.append((obj.get("name"), obj.get("description") or ""))
        for v in obj.values():
            collect_objects_with_keys(v, acc)
    elif isinstance(obj, list):
        for it in obj:
            collect_objects_with_keys(it, acc)

manifest = manifest_descriptions()
marketplace_files = [p for p in Path(".").rglob("marketplace.json") if ".git" not in p.parts]
assert marketplace_files, "No marketplace.json found"

mismatches=[]
for mf in marketplace_files:
    data = load_json(mf)
    entries=[]
    collect_objects_with_keys(data, entries)
    desc_by_name={}
    for nm, desc in entries:
        if nm not in desc_by_name:
            desc_by_name[nm]=desc
    for nm, mdesc in manifest.items():
        if nm in desc_by_name and (mdesc or "") != (desc_by_name[nm] or ""):
            mismatches.append((nm, str(mf)))

print("MISMATCH count:", len(mismatches))
print("MISMATCH names:", ", ".join([nm for nm,_ in mismatches]))
print("Has plugin-dev mismatch:", any(nm=="plugin-dev" for nm,_ in mismatches))
PY

# Find repo docs/schema language about marketplace entries allowing manifest fields
echo "---- rg: marketplace entry schema/docs ----"
rg -n "PluginMarketplaceEntrySchema|marketplace entry|Prefer marketplace.json over plugin.json|description.*marketplace" src/utils/plugins/validatePlugin.ts src/utils/plugins/schemas.ts src/utils/plugins/pluginLoader.ts src/utils/plugins/marketplaceManager.ts || true

echo "---- show validatePlugin lines around 'Prefer marketplace.json over plugin.json' ----"
rg -n "Prefer marketplace\\.json over plugin\\.json" -n src/utils/plugins/validatePlugin.ts
python3 - <<'PY'
import subprocess, re, os, textwrap, sys
# Extract the block around the match line number from validatePlugin.ts
import pathlib
p=pathlib.Path("src/utils/plugins/validatePlugin.ts")
s=p.read_text(encoding="utf-8").splitlines()
# find match
for i,line in enumerate(s, start=1):
    if "Prefer marketplace.json over plugin.json" in line:
        start=max(1,i-20); end=min(len(s), i+20)
        for j in range(start,end+1):
            print(f"{j}\t{s[j-1]}")
        break
PY

Repository: LING71671/Open-ClaudeCode

Length of output: 7245


Align plugin description between plugin.json and marketplace entry to prevent user-facing drift

plugins/plugin-dev/.claude-plugin/plugin.json (lines 2-4) has:

  "name": "plugin-dev",
  "description": "Comprehensive toolkit for developing Claude Code plugins. Includes expert skills covering hooks, MCP integration, commands, agents, and best practices.",
  "version": "0.1.0",

…but .claude-plugin/marketplace.json (line 107–115) declares a different description for plugin-dev (“Includes 7 expert skills…” and “AI-assisted plugin creation and validation.”).

Repo-wide drift exists: 7 of 13 plugins have mismatched description values between plugins/*/.claude-plugin/plugin.json and .claude-plugin/marketplace.json. Recommendation: align the strings or remove the duplicated description from the marketplace entry so plugin.json is the source of truth.

🤖 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 `@plugins/plugin-dev/.claude-plugin/plugin.json` around lines 2 - 4, The plugin
description for "plugin-dev" is inconsistent between the plugin manifest key
"description" in plugins/plugin-dev/.claude-plugin/plugin.json and the
corresponding entry in .claude-plugin/marketplace.json; update them so they
match (either copy the canonical "description" from plugin.json into the
marketplace.json entry for "plugin-dev" or remove the duplicated "description"
field from the marketplace entry so plugin.json is the single source of truth),
and repeat the same alignment for the other plugins with mismatched
"description" values to eliminate repo-wide drift.

"author": {
"name": "Daisy Hollman",
"email": "daisy@anthropic.com"
}
}
57 changes: 29 additions & 28 deletions plugins/plugin-dev/agents/agent-creator.md
Original file line number Diff line number Diff line change
@@ -1,33 +1,34 @@
---
name: agent-creator
description: Use this agent when the user asks to "create an agent", "generate an agent", "build a new agent", "make me an agent that...", or describes agent functionality they need. Trigger when user wants to create autonomous agents for plugins. Examples:

<example>
Context: User wants to create a code review agent
user: "Create an agent that reviews code for quality issues"
assistant: "I'll use the agent-creator agent to generate the agent configuration."
<commentary>
User requesting new agent creation, trigger agent-creator to generate it.
</commentary>
</example>

<example>
Context: User describes needed functionality
user: "I need an agent that generates unit tests for my code"
assistant: "I'll use the agent-creator agent to create a test generation agent."
<commentary>
User describes agent need, trigger agent-creator to build it.
</commentary>
</example>

<example>
Context: User wants to add agent to plugin
user: "Add an agent to my plugin that validates configurations"
assistant: "I'll use the agent-creator agent to generate a configuration validator agent."
<commentary>
Plugin development with agent addition, trigger agent-creator.
</commentary>
</example>
description: |-
Use this agent when the user asks to "create an agent", "generate an agent", "build a new agent", "make me an agent that...", or describes agent functionality they need. Trigger when user wants to create autonomous agents for plugins. Examples:

<example>
Context: User wants to create a code review agent
user: "Create an agent that reviews code for quality issues"
assistant: "I'll use the agent-creator agent to generate the agent configuration."
<commentary>
User requesting new agent creation, trigger agent-creator to generate it.
</commentary>
</example>

<example>
Context: User describes needed functionality
user: "I need an agent that generates unit tests for my code"
assistant: "I'll use the agent-creator agent to create a test generation agent."
<commentary>
User describes agent need, trigger agent-creator to build it.
</commentary>
</example>

<example>
Context: User wants to add agent to plugin
user: "Add an agent to my plugin that validates configurations"
assistant: "I'll use the agent-creator agent to generate a configuration validator agent."
<commentary>
Plugin development with agent addition, trigger agent-creator.
</commentary>
</example>

model: sonnet
color: magenta
Expand Down
61 changes: 31 additions & 30 deletions plugins/plugin-dev/agents/plugin-validator.md
Original file line number Diff line number Diff line change
@@ -1,35 +1,36 @@
---
name: plugin-validator
description: Use this agent when the user asks to "validate my plugin", "check plugin structure", "verify plugin is correct", "validate plugin.json", "check plugin files", or mentions plugin validation. Also trigger proactively after user creates or modifies plugin components. Examples:

<example>
Context: User finished creating a new plugin
user: "I've created my first plugin with commands and hooks"
assistant: "Great! Let me validate the plugin structure."
<commentary>
Plugin created, proactively validate to catch issues early.
</commentary>
assistant: "I'll use the plugin-validator agent to check the plugin."
</example>

<example>
Context: User explicitly requests validation
user: "Validate my plugin before I publish it"
assistant: "I'll use the plugin-validator agent to perform comprehensive validation."
<commentary>
Explicit validation request triggers the agent.
</commentary>
</example>

<example>
Context: User modified plugin.json
user: "I've updated the plugin manifest"
assistant: "Let me validate the changes."
<commentary>
Manifest modified, validate to ensure correctness.
</commentary>
assistant: "I'll use the plugin-validator agent to check the manifest."
</example>
description: |-
Use this agent when the user asks to "validate my plugin", "check plugin structure", "verify plugin is correct", "validate plugin.json", "check plugin files", or mentions plugin validation. Also trigger proactively after user creates or modifies plugin components. Examples:

<example>
Context: User finished creating a new plugin
user: "I've created my first plugin with commands and hooks"
assistant: "Great! Let me validate the plugin structure."
<commentary>
Plugin created, proactively validate to catch issues early.
</commentary>
assistant: "I'll use the plugin-validator agent to check the plugin."
</example>

<example>
Context: User explicitly requests validation
user: "Validate my plugin before I publish it"
assistant: "I'll use the plugin-validator agent to perform comprehensive validation."
<commentary>
Explicit validation request triggers the agent.
</commentary>
</example>

<example>
Context: User modified plugin.json
user: "I've updated the plugin manifest"
assistant: "Let me validate the changes."
<commentary>
Manifest modified, validate to ensure correctness.
</commentary>
assistant: "I'll use the plugin-validator agent to check the manifest."
</example>

model: inherit
color: yellow
Expand Down
59 changes: 30 additions & 29 deletions plugins/plugin-dev/agents/skill-reviewer.md
Original file line number Diff line number Diff line change
@@ -1,34 +1,35 @@
---
name: skill-reviewer
description: Use this agent when the user has created or modified a skill and needs quality review, asks to "review my skill", "check skill quality", "improve skill description", or wants to ensure skill follows best practices. Trigger proactively after skill creation. Examples:

<example>
Context: User just created a new skill
user: "I've created a PDF processing skill"
assistant: "Great! Let me review the skill quality."
<commentary>
Skill created, proactively trigger skill-reviewer to ensure it follows best practices.
</commentary>
assistant: "I'll use the skill-reviewer agent to review the skill."
</example>

<example>
Context: User requests skill review
user: "Review my skill and tell me how to improve it"
assistant: "I'll use the skill-reviewer agent to analyze the skill quality."
<commentary>
Explicit skill review request triggers the agent.
</commentary>
</example>

<example>
Context: User modified skill description
user: "I updated the skill description, does it look good?"
assistant: "I'll use the skill-reviewer agent to review the changes."
<commentary>
Skill description modified, review for triggering effectiveness.
</commentary>
</example>
description: |-
Use this agent when the user has created or modified a skill and needs quality review, asks to "review my skill", "check skill quality", "improve skill description", or wants to ensure skill follows best practices. Trigger proactively after skill creation. Examples:

<example>
Context: User just created a new skill
user: "I've created a PDF processing skill"
assistant: "Great! Let me review the skill quality."
<commentary>
Skill created, proactively trigger skill-reviewer to ensure it follows best practices.
</commentary>
assistant: "I'll use the skill-reviewer agent to review the skill."
</example>

<example>
Context: User requests skill review
user: "Review my skill and tell me how to improve it"
assistant: "I'll use the skill-reviewer agent to analyze the skill quality."
<commentary>
Explicit skill review request triggers the agent.
</commentary>
</example>

<example>
Context: User modified skill description
user: "I updated the skill description, does it look good?"
assistant: "I'll use the skill-reviewer agent to review the changes."
<commentary>
Skill description modified, review for triggering effectiveness.
</commentary>
</example>

model: inherit
color: cyan
Expand Down
3 changes: 2 additions & 1 deletion plugins/pr-review-toolkit/agents/code-reviewer.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
name: code-reviewer
description: Use this agent when you need to review code for adherence to project guidelines, style guides, and best practices. This agent should be used proactively after writing or modifying code, especially before committing changes or creating pull requests. It will check for style violations, potential issues, and ensure code follows the established patterns in CLAUDE.md. Also the agent needs to know which files to focus on for the review. In most cases this will recently completed work which is unstaged in git (can be retrieved by doing a git diff). However there can be cases where this is different, make sure to specify this as the agent input when calling the agent. \n\nExamples:\n<example>\nContext: The user has just implemented a new feature with several TypeScript files.\nuser: "I've added the new authentication feature. Can you check if everything looks good?"\nassistant: "I'll use the Task tool to launch the code-reviewer agent to review your recent changes."\n<commentary>\nSince the user has completed a feature and wants validation, use the code-reviewer agent to ensure the code meets project standards.\n</commentary>\n</example>\n<example>\nContext: The assistant has just written a new utility function.\nuser: "Please create a function to validate email addresses"\nassistant: "Here's the email validation function:"\n<function call omitted for brevity>\nassistant: "Now I'll use the Task tool to launch the code-reviewer agent to review this implementation."\n<commentary>\nProactively use the code-reviewer agent after writing new code to catch issues early.\n</commentary>\n</example>\n<example>\nContext: The user is about to create a PR.\nuser: "I think I'm ready to create a PR for this feature"\nassistant: "Before creating the PR, I'll use the Task tool to launch the code-reviewer agent to ensure all code meets our standards."\n<commentary>\nProactively review code before PR creation to avoid review comments and iterations.\n</commentary>\n</example>
description: |-
Use this agent when you need to review code for adherence to project guidelines, style guides, and best practices. This agent should be used proactively after writing or modifying code, especially before committing changes or creating pull requests. It will check for style violations, potential issues, and ensure code follows the established patterns in CLAUDE.md. Also the agent needs to know which files to focus on for the review. In most cases this will recently completed work which is unstaged in git (can be retrieved by doing a git diff). However there can be cases where this is different, make sure to specify this as the agent input when calling the agent. \n\nExamples:\n<example>\nContext: The user has just implemented a new feature with several TypeScript files.\nuser: "I've added the new authentication feature. Can you check if everything looks good?"\nassistant: "I'll use the Task tool to launch the code-reviewer agent to review your recent changes."\n<commentary>\nSince the user has completed a feature and wants validation, use the code-reviewer agent to ensure the code meets project standards.\n</commentary>\n</example>\n<example>\nContext: The assistant has just written a new utility function.\nuser: "Please create a function to validate email addresses"\nassistant: "Here's the email validation function:"\n<function call omitted for brevity>\nassistant: "Now I'll use the Task tool to launch the code-reviewer agent to review this implementation."\n<commentary>\nProactively use the code-reviewer agent after writing new code to catch issues early.\n</commentary>\n</example>\n<example>\nContext: The user is about to create a PR.\nuser: "I think I'm ready to create a PR for this feature"\nassistant: "Before creating the PR, I'll use the Task tool to launch the code-reviewer agent to ensure all code meets our standards."\n<commentary>\nProactively review code before PR creation to avoid review comments and iterations.\n</commentary>\n</example>
model: opus
color: green
---
Expand Down
61 changes: 31 additions & 30 deletions plugins/pr-review-toolkit/agents/code-simplifier.md
Original file line number Diff line number Diff line change
@@ -1,37 +1,38 @@
---
name: code-simplifier
description: Use this agent when code has been written or modified and needs to be simplified for clarity, consistency, and maintainability while preserving all functionality. This agent should be triggered automatically after completing a coding task or writing a logical chunk of code. It simplifies code by following project best practices while retaining all functionality. The agent focuses only on recently modified code unless instructed otherwise.\n\nExamples:\n\n<example>
Context: The assistant has just implemented a new feature that adds user authentication to an API endpoint.
user: "Please add authentication to the /api/users endpoint"
assistant: "I've implemented the authentication for the /api/users endpoint. Here's the code:"
<function call omitted for brevity>
<commentary>
Since a logical chunk of code has been written (authentication feature), use the Task tool to launch the code-simplifier agent to improve the code's clarity and maintainability while preserving functionality.
</commentary>
assistant: "Now let me use the code-simplifier agent to refine this implementation for better clarity and maintainability"
</example>
description: |-
Use this agent when code has been written or modified and needs to be simplified for clarity, consistency, and maintainability while preserving all functionality. This agent should be triggered automatically after completing a coding task or writing a logical chunk of code. It simplifies code by following project best practices while retaining all functionality. The agent focuses only on recently modified code unless instructed otherwise.\n\nExamples:\n\n<example>
Context: The assistant has just implemented a new feature that adds user authentication to an API endpoint.
user: "Please add authentication to the /api/users endpoint"
assistant: "I've implemented the authentication for the /api/users endpoint. Here's the code:"
<function call omitted for brevity>
<commentary>
Since a logical chunk of code has been written (authentication feature), use the Task tool to launch the code-simplifier agent to improve the code's clarity and maintainability while preserving functionality.
</commentary>
assistant: "Now let me use the code-simplifier agent to refine this implementation for better clarity and maintainability"
</example>

<example>
Context: The assistant has just fixed a bug by adding several conditional checks.
user: "Fix the null pointer exception in the data processor"
assistant: "I've added the necessary null checks to prevent the exception:"
<function call omitted for brevity>
<commentary>
After modifying code to fix a bug, use the code-simplifier agent to ensure the fix follows best practices and maintains code quality.
</commentary>
assistant: "Let me refine this bug fix using the code-simplifier agent to ensure it follows our best practices"
</example>
<example>
Context: The assistant has just fixed a bug by adding several conditional checks.
user: "Fix the null pointer exception in the data processor"
assistant: "I've added the necessary null checks to prevent the exception:"
<function call omitted for brevity>
<commentary>
After modifying code to fix a bug, use the code-simplifier agent to ensure the fix follows best practices and maintains code quality.
</commentary>
assistant: "Let me refine this bug fix using the code-simplifier agent to ensure it follows our best practices"
</example>

<example>
Context: The assistant has just refactored a function to improve performance.
user: "Optimize the data sorting algorithm for better performance"
assistant: "I've optimized the sorting algorithm. Here's the updated implementation:"
<function call omitted for brevity>
<commentary>
After completing a performance optimization task, use the code-simplifier agent to ensure the optimized code is also clear and maintainable.
</commentary>
assistant: "Now I'll use the code-simplifier agent to ensure the optimized code is also clear and follows our coding standards"
</example>
<example>
Context: The assistant has just refactored a function to improve performance.
user: "Optimize the data sorting algorithm for better performance"
assistant: "I've optimized the sorting algorithm. Here's the updated implementation:"
<function call omitted for brevity>
<commentary>
After completing a performance optimization task, use the code-simplifier agent to ensure the optimized code is also clear and maintainable.
</commentary>
assistant: "Now I'll use the code-simplifier agent to ensure the optimized code is also clear and follows our coding standards"
</example>
model: opus
---

Expand Down
Loading