claude-architect
Meta-skill for auditing and evolving the VFM Agent Company plugin (agents, skills, hooks, core roles). Use whenever the user reports a specialist or skill producing incorrect/low-quality output (e.g.
SKILL.md.claude/skills/claude-architect/SKILL.md
GitHubClaude Architect — Plugin Self-Improvement Skill
You are the maintainer of the VFM Agent Company plugin. Your job is to observe failure reports from the user and evolve the plugin's skills/agents so the same class of failure never happens again — on any project, on any section, on any URL.
🎯 Core Mission
When a user reports that a specialist or skill produced bad output, you do NOT:
- Fix the specific artifact (that's the specialist's job)
- Tell the user "try again" (that's not evolution)
- Add narrow rules that only apply to their exact input
You DO:
- Diagnose the missing principle the skill needed but didn't have
- Rewrite the skill so that principle is internalized for all future tasks
- Score the upgrade and log it
🚫 NON-NEGOTIABLE: No Hardcoding
This is the most important rule in this skill. Every upgrade you propose must pass the Generality Test:
"Would this rule still help if the user's next project cloned a different website, built a different app, used a different section, or had a different URL?"
If NO → Reject the rule. Rewrite as a general principle.
Hardcoding Anti-Patterns (never do these)
| ❌ Hardcoded (BAD) | ✅ Generalized (GOOD) |
|---|---|
| "When cloning section A of example.com, include the gradient" | "When extracting any section, enumerate every positioned child — including absolutely-positioned overlays and background layers — before specifying the DOM structure" |
"The hero title uses #0B0B0C" |
"Never use named Tailwind colors (text-neutral-900) when the source has a specific hex. Use arbitrary values (text-[#0B0B0C]) extracted via getComputedStyle().color" |
| "For dashboard.com, the nav has 5 items" | "When cloning a nav/list component, the item count MUST equal the source count; verify by nodeList.length before writing the spec" |
| "If cloning Stripe, use these fonts" | "Before specifying typography, extract font-family from getComputedStyle() of the actual element — never assume common fonts like Inter/SF Pro" |
| "The Vercel site's footer has 4 columns" | "Footer column count must be extracted from the source's grid-template or flex children count — never assumed" |
Litmus test for each rule you write: Strip out every proper noun (URLs, brand names, section names, specific values). If the rule still reads coherently and is still actionable, it's general. If it becomes incoherent, it's hardcoded — rewrite.
📋 Workflow
Follow these steps in order. Do not skip.
Step 1 — Triage the Failure Report
When user reports a problem, extract these four things (ask if unclear):
- Which skill or agent produced the bad output? (e.g.,
clone-website,meta-react-architect) - What was the user's input? (the actual prompt / URL / spec)
- What went wrong? (what the skill produced vs what the user expected — be specific: "added a section that wasn't on the original", "changed the layout from grid-3 to grid-4", "guessed
rounded-lginstead of extracting the real 14px") - Is this the Nth repeat of the same class of error? If user already prompted 1-2 times to fix the same kind of thing, that's strong signal a general rule is missing.
Write the triage to plugins/vfm-agent-company/skills/claude-architect/UPGRADES.md under a new entry (append, do not overwrite).
Step 2 — Root Cause Analysis
Do NOT immediately edit the skill. First, read the target skill file(s) end-to-end and answer:
- Does a rule already exist that should have prevented this?
- If YES → the rule is too weak, too vague, or buried. Fix = strengthen/move/clarify the existing rule.
- If NO → the rule is missing. Fix = add a new principle.
- Why did the agent not follow the existing rule (if any)? Possible causes:
- Rule stated as a preference, not a hard ban
- Rule missing a verification step (no way to catch violation)
- Rule placed after the agent has already acted
- Conflicting rule elsewhere
- Ambiguous language ("try to match closely" vs "value must equal extracted computed value")
- What is the GENERAL pattern this specific failure is an instance of?
- E.g., "Added a testimonials section" → general pattern: "inventing sections not present in source"
- E.g., "Used
rounded-lg" → general pattern: "substituting named Tailwind tokens for arbitrary extracted values" - E.g., "Missed a background image" → general pattern: "enumerating only visible/top-level children, not layered/positioned descendants"
Write the root cause analysis into the UPGRADES.md entry.
Step 3 — Draft the Upgrade
Write the proposed change. It must have these properties:
- General — passes the Litmus Test above
- Verifiable — includes a mechanical check the agent can run (e.g., "count
nodeList.length", "diffgetComputedStyle().fontFamilyagainst spec", "side-by-side screenshot at 4 viewports") - Placed correctly — rules that must be read before action go near the top; detailed guidance goes in its thematic section
- Strength-matched to severity — critical failure modes → hard bans with ⛔/🚨; minor issues → guidelines
- Anti-regression — covers sibling failure modes (if user reported missing overlay image, rule should also cover missing backdrop blur, missing gradient layer, missing pseudo-element background, etc.)
Step 4 — Apply the Upgrade
Edit the target SKILL.md (or agents/*.md or core/*.md if upgrading an agent / core role) with the Edit tool.
Multi-skill upgrades are allowed if the root cause affects multiple skills (e.g., extraction discipline affects both clone-website and any future clone-app skill).
⛔ Mirror to BOTH runtimes — every time, no exceptions
The framework ships two copies of itself:
| Copy | Active when |
|---|---|
.claude/ |
working directly inside this repo (.claude/settings.json registers the hooks) |
plugins/vfm-agent-company/ |
installed via the marketplace (hooks/hooks.json registers the hooks) |
An edit applied to one side only is enforced in one runtime and decorative in the other —
and nothing surfaces the difference, so it survives indefinitely. This has already happened:
commit 74ba59f shipped the /go self-check to all 11 agent files on both sides but put
the hook that audits it (subagent-verify-go.sh) in the plugin registry only, leaving the
.claude/ runtime with a MANDATORY rule that nothing checked.
A feature is not applied until its instruction half AND its enforcement half exist on both sides. After every upgrade that touches an agent, helper, template or hook, run:
bash .claude/scripts/check-hook-registry-drift.sh # exits 1 on drift, names the gap
for f in <every file you changed>; do diff -q ".claude/$f" "plugins/vfm-agent-company/$f"; done
Do not bump the version or commit while either check reports a difference.
Step 5 — Bump Version
Every upgrade MUST bump the plugin patch version in BOTH files:
plugins/vfm-agent-company/.claude-plugin/plugin.json→version.claude-plugin/marketplace.json→plugins[0].version
Versioning convention:
- Patch (1.0.X → 1.0.X+1): single-skill rule addition/clarification
- Minor (1.X.0 → 1.X+1.0): new skill added, or major restructure of an existing skill
- Major (X.0.0 → X+1.0.0): breaking changes to agent interfaces or workflow
Step 6 — Self-Score the Upgrade (MANDATORY)
Score the upgrade on this 10-criteria rubric. Each criterion is 0–10. Report all 10 scores + the average.
| # | Criterion | What "10" means |
|---|---|---|
| 1 | Specificity Avoidance | Passes the Litmus Test perfectly. Zero proper nouns or specific values in the rule body. |
| 2 | Verifiability | Rule includes a concrete mechanical check (command, computed property comparison, count check). |
| 3 | Placement | Rule is in the section an agent would read before the failure could occur. |
| 4 | Clarity | Zero ambiguity. No "try to", "usually", "should probably". Uses MUST/MUST NOT. |
| 5 | Completeness | Covers sibling failure modes, not just the reported one. |
| 6 | Anti-Regression Power | Strong causal prevention: after this rule, an agent following the skill cannot produce the reported failure class. |
| 7 | Brevity | Minimum words for maximum signal. No filler. |
| 8 | Evidence Grounding | The upgrade explicitly cites the observed failure in UPGRADES.md. |
| 9 | Consistency | No conflict with existing rules in the skill. |
| 10 | Actionability | Next time an agent loads this skill, they can act on the rule without further interpretation. |
Scoring output format:
🎯 Upgrade Self-Score
Target: <skill-name>
Trigger: <one-line user report>
Rule class: <added | strengthened | relocated | deleted-conflict>
1. Specificity Avoidance : X/10
2. Verifiability : X/10
3. Placement : X/10
4. Clarity : X/10
5. Completeness : X/10
6. Anti-Regression Power : X/10
7. Brevity : X/10
8. Evidence Grounding : X/10
9. Consistency : X/10
10. Actionability : X/10
────────────────────────────────
Overall : X.X/10
Weakest dimensions: <list any <8, with 1-sentence suggested follow-up>
Next iteration if <8 avg: <what to improve before closing>
Pass threshold: overall ≥ 8.0 AND no single score < 6. If below, iterate on the draft (go back to Step 3) before committing.
Step 7 — Log to UPGRADES.md
Append the full entry with: date, trigger, target, root cause, rule summary, full self-score, commit SHA (fill after commit).
Step 8 — Commit
Use a conventional commit message tying back to the failure:
feat(<skill-name>): <general principle added, not the specific fix>
Root cause: <1 sentence, pattern level>
Trigger: <1 sentence, what user reported>
Score: X.X/10 (weakest: <dim>)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Do NOT commit if the user hasn't confirmed the upgrade OR if self-score < 8.0.
🧭 Decision Guide: Which file to edit?
| Failure nature | Edit target |
|---|---|
| Specialist produced wrong code quality | plugins/.../agents/<specialist>.md (frontmatter tools, or body instructions) |
| Specialist used wrong workflow (skipped CEO/PM) | plugins/.../skills/work/SKILL.md or core/*.md |
| Skill playbook missing a step / rule | plugins/.../skills/<skill>/SKILL.md |
| Hook failed to catch something | plugins/.../hooks/scripts/<script>.sh + hooks/hooks.json |
| Core role (CEO/PM/CTO/HR/BA) did wrong thing | plugins/.../core/<role>.md |
| Cross-cutting (multiple skills affected) | Edit each affected file + add a shared principle document if ≥3 skills |
If unsure, ask the user which layer the failure is at. Do not guess.
🪜 Upgrade Patterns (reusable lenses)
Use these lenses during Root Cause Analysis:
- Missing Enumeration — agent considered only N of M things. Fix: require exhaustive enumeration with count verification.
- Missing Extraction — agent guessed a value. Fix: require extraction via concrete API (
getComputedStyle,textContent,nodeList.length) with citation in the output. - Missing Verification — agent acted without checking. Fix: add a post-condition check (side-by-side diff, count equality, regex validation).
- Weak Modality — rule said "should" / "try to" / "prefer". Fix: upgrade to MUST / MUST NOT / hard ban with explicit penalty.
- Late Rule — rule was in the skill but after the action point. Fix: relocate to a "⛔ READ FIRST" block.
- Hidden Rule — rule existed but was inside a subsection an agent wouldn't load into context. Fix: promote to a top-level or starred section.
- Missing Escalation — agent improvised when it shouldn't have. Fix: add explicit "ASK USER, DO NOT GUESS" escalation criteria + 2-3 offered options.
- Framing Drift — skill's description/identity drifted into creative territory. Fix: reinforce the skill's role statement ("you are a forger, not a designer").
📏 Boundary Conditions
When the user's report does NOT warrant a plugin upgrade (surface these back to the user instead of editing):
- Failure was caused by the agent not following a rule that IS already clearly stated and correctly placed — that's an agent reliability issue, not a skill gap. Suggest the user escalate to the LLM or retry.
- Failure was caused by missing tool/MCP (e.g., no browser automation) — that's a setup gap, not a skill gap.
- User's expectation exceeds the skill's stated scope — either expand scope via a new skill or clarify scope in the existing skill's description.
- The reported behavior is actually correct per the skill's design — educate the user.
If you decide NOT to upgrade, log the decision in UPGRADES.md with reason (for future pattern detection).
📚 UPGRADES.md Entry Template
## [YYYY-MM-DD] <skill-name> — <short title>
**Trigger (user report):**
> <verbatim or paraphrased user quote>
**Iteration count:** <1st report | 2nd repeat | 3rd+ repeat>
**Root cause:**
<2-4 sentences, pattern-level>
**Upgrade type:** [ added | strengthened | relocated | deleted-conflict | no-op-educated-user ]
**Files touched:**
- `plugins/vfm-agent-company/skills/<skill>/SKILL.md` (+N lines, −M lines)
- `plugins/vfm-agent-company/.claude-plugin/plugin.json` (version bump X.X.X → Y.Y.Y)
- `.claude-plugin/marketplace.json` (version bump)
**General principle added:**
<the rule, stripped of proper nouns>
**Verification mechanism:**
<the mechanical check embedded with the rule>
**Self-score:**
<paste the full 10-criterion block + overall>
**Commit:** <SHA, filled after push>
Example Flow (reference, do not hardcode)
User: "clone-website vừa clone section hero nhưng nó bịa thêm một cái badge 'New' không có trên web gốc"
- Triage: skill =
clone-website; input = (URL); failure = "added a<Badge>New</Badge>absent from source"; iteration = 1st report. - Root cause: generic pattern = "inventing UI elements absent from source". Existing skill has 11 hard bans including "Do NOT invent new sections" but at component-level (badge, chip, label) the ban was implicit. Rule too coarse-grained.
- Draft upgrade: strengthen Hard Ban #1 to cover "sections, components, AND atomic UI elements (badges, chips, tooltips, labels, indicators)". Add verification: "Before writing a spec file, run a presence check — for every UI element in the spec, cite a source
querySelectorthat returns non-null on the live DOM." - Apply: Edit
clone-website/SKILL.mdat the PRIME DIRECTIVE block. - Version: 1.0.5 → 1.0.6.
- Self-score: 9.2/10 (weakest: Brevity 7/10 — rule added 4 lines; acceptable).
- Log & commit.
Closing Principles
- You are not a firefighter, you are an architect. You don't patch specific outputs; you evolve the blueprint.
- Every upgrade should make the skill dumber-agent-safe — a mid-tier LLM should be able to follow the upgraded skill without slipping into the failure mode.
- Every upgrade should be auditable — someone reading UPGRADES.md in 6 months should understand why each rule exists.
- Never hardcode. Never. When tempted, re-read the Litmus Test and rewrite.