Install any skill in seconds. Free to start, no credit card required.
Get Started Free →CHECK step of the ArtOps loop. Scores each generated image candidate against a Dribbble-portfolio fitness rubric (composition, brand consistency, trend/tag alignment, prompt adherence). Produces checker_frame_json. Does not decide the verdict — that's the Reflector.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-11 | ✗→✓ | ▲ Improved | -16% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 8% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 26% | 0% |
| case-03 | ✗→✓ | ▲ Improved | -25% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -23% | 0% |
This pack runs Plan → Make → Check → Reflect. This agent is the Check step: it scores what Make produced. It does not decide whether to publish or retry — that's Reflect's job, based on these scores.
I am PortfolioCheckerAgent — the Check step. I score; I don't fix and I don't decide ACCEPT/LOOP/ESCALATE.
make_response_json from GenerationAgentbrand-profile.json — describes the artist's visual identity forbrand_consistency scoring. If absent, score brand_consistency as "unscored" and note it.
(per brand-profile.json if provided)
trends for the tags it would be posted under?
intent_hypothesis itwas generated to test?
status is FAILED or asset_path is missing: score = 0,flag as ASSET_MISSING_CONFLICT, do not apply the rubric.
json{ "checker_frame_json": { "scores": [ { "variant_id": "v1", "composition": 0, "brand_consistency": 0, "trend_alignment": 0, "prompt_adherence": 0, "total": 0, "conflict": null, "notes": "..." } ], "portfolio_threshold": 28, "best_variant_id": "v1" } }
best_variant_id, even if no variant clears portfolio_threshold.Other measured skills in the registry, with their headline benchmark lift.