Repository navigation
Releases
0.5.0: hardened
Hardened: the install gate catches the commands people really type, updates and uninstalls know the harness's own copies, the Hyperframes CLI runs only as reviewed (pinned, its telemetry and npm install scripts off), the Design Score loader is pinned by hash, and the docs claim no more than what ships. Prompted by an independent review of 0.4.0.
Security
- Design Score: the agent's loader carries the bundle's Subresource Integrity hash, so a browser runs the copy on GitHub Pages only when it is exactly the
mh-score.jsthe skill ships, and refuses anything else. CI checks the hash against the built file; AGENTS.md says which file runs on each path #55. - The Hyperframes CLI kept its own usage telemetry on when the harness started it, through the launcher or the media-use scripts. It now starts with
HYPERFRAMES_NO_TELEMETRY=1unless you setMEDIA_USE_TELEMETRY=1or choseHYPERFRAMES_NO_TELEMETRYyourself #57. - The hyperframes skill now opens with the launcher command and says every
npx hyperframesin the skills means it, so the reviewed CLI release is what runs. It no longer tells the agent to runnpx hyperframes@latest upgradeon its own, runsusage(which reads your Claude or Codex sign-in) only when you ask about plan usage, and the launcher starts the CLI with npm install scripts off #56.
Fixed
- The install gate let real commands through: a multi-line command, one inside quotes (
bash -c "npm install x") or with options before the verb (npm --prefix app install x). It now decodes the hook input and matches in pure bash, starting no other program;npxfor a tool already in the project'snode_modules/.binpasses without a question. 54 test cases, run on Linux, macOS and Windows #52. - Updating in place and then uninstalling left old harness skills behind: an update treated the previous version of each skill as yours and backed it up, and the uninstaller restored it. The manifest now records a fingerprint of every skill copied, so an update replaces the harness's own earlier copies and the uninstaller removes exactly them; copies from installs before 0.5.0 go to
backups/<date>/earlier-harness/and are not restored #53. uninstall.shsplit paths on spaces, so in a folder likeMy Projectyour own skills stayed in the backup folder. It reads the manifest line by line now #54.
Added
- A design-only scope for the Claude plugin: with
MAKKOV_HARNESS_SCOPE=design(for example underenvin~/.claude/settings.json), the session-start hook loads the design rows of the routing map only, as--scope designdoes for the installers #60. - CREDITS.md, NOTICE and the README footer say that the 19 sound effects bundled with
media-useare under the Pixabay Content License, not Apache-2.0 or MIT: free to use in your videos, not to be distributed on their own #61.
Changed
harness-onboardingwrites the personal layer where the harness was installed (the manifest's instructions file; a project install stays in the project), between<!-- makkov-harness:personal:start -->and<!-- makkov-harness:personal:end -->, within the install's scope. The uninstallers take it out with the routing block, and an update keeps it #59.- Claims brought in line with what ships: two hooks, not one (README, AGENTS.md); the badge and the site say the harness installs in 9 agents, as COMPATIBILITY.md separates installs tested in CI from use by hand; Frame Lens is marked as the author's own, not as a reviewed companion; ffmpeg in the cloud setup comes from Ubuntu's archive, not a pin; SECURITY.md names the site's font hosts next to GoatCounter #58.
Full changelog: v0.4.0...v0.5.0
0.4.0: verified and scoped
Release 0.4.0: verified and scoped (#51) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
0.3.4: privacy and pinning
Release 0.3.4: privacy and pinning (#41) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
0.3.3: safe installs
Release 0.3.3: safe installs (#35) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
0.3.2: Frame Lens studies any video
Video and animation study now goes through Frame Lens.
Changed
- ytlens is now Frame Lens (
framelens, Makkov-design/framelens), v2.0.0 in the marketplace. It studies any video or animation, not only YouTube, and works locally without a key; only its Gemini tools need one. Routing, README, SECURITY, CREDITS and the site's situations and security pages say so.
Full history: CHANGELOG.md
0.3.1: the 0.3.0 sound code now runs
The 0.3.0 sound code is now what runs. An end-to-end test of a plain video request ("make a short promo with real sound effects") showed that agents took a different path than the one 0.3.0 changed. The sounds themselves were right (real Openverse recordings, CC0 / CC BY only), but the optional Openverse keys had no effect, and the bundled HyperFrames launcher could not start inside this plugin.
Fixed
- Sound effects go through the harness's own audio engine.
media-useand the sound guides now send agents toaudio/scripts/audio.mjs --only sfx, which runs the 0.3.0 Openverse search and readsOPENVERSE_CLIENT_ID/OPENVERSE_CLIENT_SECRETwhen they are set.hyperframes media-use resolve --type sfxuses the CLI's own older copy (no keys, HeyGen first when signed in) and is now only a fallback. Seesfx.md. - The HyperFrames launcher works inside makkov-harness.
skills/hyperframes/scripts/plugin-cli.mjsexpected a plugin namedhyperframesand would have asked npm forhyperframes@<harness version>. It now reads the reviewed CLI release, 0.9.9, fromskills/hyperframes/scripts/cli-version.json. Tests added. - The sound guides no longer promise that
assets/sfx/CREDITS.mdalways exists: it lists CC BY sounds only, so a video with only CC0 sounds has none.
Full list of changes: v0.3.0...v0.3.1 · CHANGELOG
0.3.0: real sounds for every video
Update: on the path agents take by default, the Openverse keys below only take effect from 0.3.1, which also fixes the bundled HyperFrames launcher. Sounds were already real Openverse recordings in 0.3.0.
Real sounds for every video. When the harness edits or generates a video, sound effects now come from real recordings on Openverse first (CC0 / CC BY only, credits kept in CREDITS.md). Generated sound is used only for a cue with no real recording, or when you ask for it.
Added
- Optional Openverse API keys for
media-usesound effects. PutOPENVERSE_CLIENT_IDandOPENVERSE_CLIENT_SECRETin the environment and searches use a short-lived access token with the higher registered limits. Without them, search stays anonymous, as before.- The keys are read from the environment only. The token lives in memory for the run and is never written to disk.
- If Openverse refuses the keys or the token, search falls back to anonymous and does not retry the keys for five minutes, so a wrong key costs one extra request per run, not one per search.
- How to register a free Openverse app and where the keys go:
sfx.md. - Tests for the token flow and the fallback:
skills/media-use/audio/scripts/lib/openverse.test.mjs.
Changed
- Video sound rules: real Openverse recordings first, generated sound only for gaps. Openverse music (Jamendo, CC0 / CC BY) is a free option for a music bed, and CC BY music credits go in
CREDITS.md. Stated insound.mdand inROUTING.md. sfx.mdexplains that Freesound's CDN can refuse downloads from cloud containers, and what to do instead.
Fixed
- A Python bytecode file that slipped into the repository is gone;
__pycache__/and*.pycare now ignored. - A broken sentence about music in the Hyperframes sound guide.
Full list of changes: v0.2.0...v0.3.0 · CHANGELOG
0.2.0: Design Score, Lighthouse for design
Design Score: Lighthouse for design. Score any live page 0 to 100 in one click, see every point it takes off highlighted on the page, and hand your agent a fix prompt. Try it: https://makkov-design.github.io/makkov-harness/score.html
Before release, Design Score was calibrated on two fixtures and twelve public sites, reviewed by four independent reviewers (31 fixes) and run on this project's own site, which it caught out: accessibility is now 100 on every page.
The Design Score release: the harness gets a flagship of its own.
Added
- Design Score (
skills/design-score/), Lighthouse for design. It scores any live page from 0 to 100 on 37 checks in seven categories (accessibility 25, typography 20, colour 15, layout and spacing 20, responsive 10, motion 5, consistency 5), explains every point it takes off and writes a fix prompt for any agent. It runs inside the page, makes no network requests and never changes the page's own content.- A panel in its own Shadow DOM: the score ring and grade, the seven categories, issues sorted by the points they cost that light up their elements on the page, every check with its value and target, Copy fix prompt, a 1200 × 630 score card and a full self-contained HTML report with a README badge.
- Steal the style: the palette with roles, fonts, type scale, spacing, radii, shadows and
:rootcustom properties a page renders, exported asDESIGN.md, CSS variables, a Tailwind theme or W3C Design Tokens (DTCG) JSON. - The
design-scoreskill for any agent: a measured pass in a real page and a judged pass from a screenshot or Figma frame, never blended; desktop and phone viewports; the score-and-fix loop through interfaces and animate; a before → after line at the end. rubric.mdwith every check, weight and threshold, and calibration fixtures intest/.- An optional Node runner,
scripts/score.mjs, for when puppeteer-core and Chrome are already installed: JSON, HTML report, DESIGN.md, tokens, fix prompt, score card, a baseline comparison and--fail-underfor CI. build.mjsbundles the probe and the panel intomh-score.jsand refreshes the bookmarklets;--checkfails when a generated file is stale.
- The Design Score page (score.html): a bookmarklet to drag to the bookmarks bar, an offline bookmarklet for sites that block outside scripts, a console snippet, a sample panel to explore, the rubric, export samples, the fix loop, a badge builder and a privacy FAQ.
- The security index (security.html): every verdict from
SECURITY.md, searchable and filterable, with the reviewed commit, what each piece runs, sends and needs, and how a review works. - Ask the router at the top of situations.html: describe a task in your own words and it finds the skill, how to call it and a prompt to paste, matched in the browser.
- Design Score in the situations catalog: a habit ("Want a number? Score it") and three rows in Audit and polish, 72 situations in all.
- An agent briefing in
AGENTS.md,docs/llms.txtfor AI agents reading the site, and a star step after install that asks once and acts only on a clear yes. - Repository checks on every push and pull request: manifests, the hook's output, skill names and descriptions, and a scan for anything that looks like a key. This release adds: the Design Score build is up to date and its two bundle copies match, the bundle uses no network or storage API and the loader bookmarklet loads only the bundle from this site, as
SECURITY.mdsays, local links and in-page anchors on the site resolve, every page is in the sitemap, situation counts and section numbering stay in step, and the plugin versions match this changelog. CHANGELOG.md,docs/sitemap.xmlanddocs/robots.txt.- Page views on the website through GoatCounter: no cookies, no personal data, a pinned script checked with Subresource Integrity.
Changed
- Home page: a Design Score section after the before/after demo, a "New" tag in the hero, Score and Security in the navigation and the footer, and a link from the gate section to the full security index.
- Website redesign: the scroll-driven before/after demo, the routing board, "Find your situation" with a picker on phones, the install guide by where you work, and an edge index for the catalog on phones.
ROUTING.mdsends score, rate and grade requests, and requests to extract a site's design tokens, todesign-score.README.md,AGENTS.md,INSTALL.md,SECURITY.md,CREDITS.md,COMPATIBILITY.mdandllms.txtdescribe Design Score.SECURITY.mdlists what the Design Score bundle and its bookmarklet run.- Companions reviewed again and moved to the new pins: Superpowers 7.0.2 (
22f0b46), Impeccable 4.8.0 (c3bb418) and Hallmark 2.0.0 (407fa68). - The key scan now also reads new files before they are committed.
- Plugin and marketplace version 0.2.0, with the keyword
design-score.
Full changelog: v0.1.0...v0.2.0
v0.1.0: the right design skill for every request
First public release of makkov-harness: a designer's harness for AI agents.
What's inside
ROUTING.md, the situation-to-skill map that loads at the start of every session: "review this screen", "make it feel like Linear", "animate this card" each reach the right skill- 16 skills:
design-md-library, five motion skills by Emil Kowalski, designed report pages (rich-report,html-report),third-party-install-guard, Hyperframes HTML-to-video andharness-onboarding - Six companion plugins in the same marketplace (interfaces, Impeccable, Hallmark, Superpowers, security-audit, ytlens), each pinned to the commit that passed security review
- Installers for Codex, Cursor, Gemini CLI, Copilot, Windsurf, Cline, OpenCode and Aider, plus a chat pack for ChatGPT, Gemini, Grok and DeepSeek
- A weekly upstream check that opens an issue when a pinned companion has a new version
Install in two minutes
- Claude (app, web, Claude Code, cloud): in a browser, claude.ai → Customize → Plugins → Add → Add marketplace →
Makkov-design/makkov-harness→ switch on makkov-harness. - Coding agents: paste
Install https://github.com/Makkov-design/makkov-harnessinto your agent. - Chat apps: follow the chat pack.
Then say run harness-onboarding once. Step-by-step pictures for each path are in the README.

