Skip to content
Merged
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
6 changes: 3 additions & 3 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,21 @@
"email": "[email protected]"
},
"metadata": {
"description": "Claude Code plugins for scoring, evaluating, and improving content with resonance models on u22a8.ai",
"description": "Claude Code plugins for scoring, evaluating, and improving content with scoring models on u22a8.ai",
"pluginRoot": "./plugins"
},
"plugins": [
{
"name": "u22a8",
"source": "./plugins/u22a8",
"description": "Score and compare content against information resonance models on u22a8.ai",
"description": "Score and compare content against scoring models on u22a8.ai",
"version": "0.1.0",
"category": "content-quality",
"tags": [
"scoring",
"writing",
"content-quality",
"resonance-models"
"scoring-models"
]
}
]
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# U+22A8 plugins

Claude Code plugin marketplace for [u22a8.ai](https://u22a8.ai) — score and improve content with resonance models.
Claude Code plugin marketplace for [u22a8.ai](https://u22a8.ai) — score and improve content with scoring models.

> A resonance model is a standard of judgment, learned from examples, that can score any content — turning subjective quality into something measurable.
> A scoring model is a standard of judgment, learned from examples, that can score any content — turning subjective quality into something measurable.

## Quick start █░░

Expand All @@ -18,7 +18,7 @@ Claude Code plugin marketplace for [u22a8.ai](https://u22a8.ai) — score and im

### u22a8

Score and improve content against resonance models on u22a8.ai.
Score and improve content against scoring models on u22a8.ai.

Two skills:

Expand Down
4 changes: 2 additions & 2 deletions actions/score-docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ That's it. The action posts a score comment on every PR that changes a markdown
# Model to score against. Default: u22a8.compelling-readme
# Options: u22a8.compelling-readme, u22a8.technical-writing,
# u22a8.developer-landing-page, u22a8.puns
profile: u22a8.technical-writing
model: u22a8.technical-writing

# Flag files that score below this threshold (0-100).
# Informational only — does not block merge.
Expand Down Expand Up @@ -95,7 +95,7 @@ For tighter iteration — score a draft, improve it, rescore — the [U+22A8 Cla

Most "AI quality" tools use an LLM to judge output. That means different scores on the same content on different runs. You can't set a threshold you can trust.

U+22A8 scores are deterministic — same content, same profile, same score every time. That's what makes a threshold meaningful in a CI context.
U+22A8 scores are deterministic — same content, same model, same score every time. That's what makes a threshold meaningful in a CI context.

U+22A8 also outperforms LLM-as-judge on correlation with human judgment, at a fraction of the cost and latency. [Details at u22a8.ai.](https://u22a8.ai)

Expand Down
6 changes: 3 additions & 3 deletions actions/score-docs/action.yml
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
name: "U+22A8 Score Docs"
description: "Score markdown files in PRs against U+22A8 resonance models. Posts per-trait quality scores as a PR comment."
description: "Score markdown files in PRs against U+22A8 scoring models. Posts per-trait quality scores as a PR comment."
author: "u22a8.ai"

branding:
icon: "check-circle"
color: "green"

inputs:
profile:
model:
description: "Model handle to score against"
required: false
default: "u22a8.compelling-readme"
Expand Down Expand Up @@ -40,7 +40,7 @@ runs:
shell: bash
env:
GH_TOKEN: ${{ inputs.github-token || github.token }}
U22A8_PROFILE: ${{ inputs.profile }}
U22A8_MODEL: ${{ inputs.model }}
U22A8_THRESHOLD: ${{ inputs.threshold }}
U22A8_FILES: ${{ inputs.files }}
U22A8_API: "https://u22a8.ai"
Expand Down
4 changes: 2 additions & 2 deletions actions/score-docs/examples/u22a8-score.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# .github/workflows/u22a8-score.yml
#
# Score markdown files on every PR against a U+22A8 resonance model.
# Score markdown files on every PR against a U+22A8 scoring model.
# Posts a comment with per-trait quality scores.
#
# More info: https://u22a8.ai
Expand All @@ -21,5 +21,5 @@ jobs:
- uses: actions/checkout@v4
- uses: u22a8/plugins/actions/score-docs@main
# with:
# profile: u22a8.compelling-readme # default
# model: u22a8.compelling-readme # default
# threshold: 60 # flag files below this score
12 changes: 6 additions & 6 deletions actions/score-docs/score-docs.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@
set -euo pipefail

# U+22A8 Score Docs — GitHub Action
# Scores markdown files changed in a PR against a U+22A8 resonance model.
# Scores markdown files changed in a PR against a U+22A8 scoring model.
# Posts (or updates) a PR comment with per-trait scores.

MARKER="<!-- u22a8-score -->"
API="${U22A8_API:-https://u22a8.ai}"
PROFILE="${U22A8_PROFILE:-u22a8.compelling-readme}"
MODEL="${U22A8_MODEL:-u22a8.compelling-readme}"
THRESHOLD="${U22A8_THRESHOLD:-}"
REPO="${GITHUB_REPOSITORY:-}"

Expand Down Expand Up @@ -49,7 +49,7 @@ if [[ ${#MD_FILES[@]} -eq 0 ]]; then
exit 0
fi

echo "Found ${#MD_FILES[@]} markdown file(s) to score against ${PROFILE}."
echo "Found ${#MD_FILES[@]} markdown file(s) to score against ${MODEL}."

# Score each file and build comment body
COMMENT_BODY="${MARKER}"$'\n'
Expand All @@ -64,7 +64,7 @@ for file in "${MD_FILES[@]}"; do
CONTENT=$(cat "$file")

# Call U+22A8 API with tracking headers
RESPONSE=$(curl -sf "${API}/p/${PROFILE}" \
RESPONSE=$(curl -sf "${API}/m/${MODEL}" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "User-Agent: u22a8-score-docs/1.0 (GitHub Action)" \
Expand All @@ -84,7 +84,7 @@ for file in "${MD_FILES[@]}"; do
fi

# Get plain-text formatted output for the comment
PLAIN_RESPONSE=$(curl -sf "${API}/p/${PROFILE}" \
PLAIN_RESPONSE=$(curl -sf "${API}/m/${MODEL}" \
-H "Content-Type: application/json" \
-H "Accept: text/plain" \
-H "User-Agent: u22a8-score-docs/1.0 (GitHub Action)" \
Expand All @@ -94,7 +94,7 @@ for file in "${MD_FILES[@]}"; do
2>/dev/null) || PLAIN_RESPONSE=""

# Build file section
COMMENT_BODY+="\`${file}\` scored against \`${PROFILE}\` — **${COMPOSITE}/100**"$'\n\n'
COMMENT_BODY+="\`${file}\` scored against \`${MODEL}\` — **${COMPOSITE}/100**"$'\n\n'

if [[ -n "$PLAIN_RESPONSE" ]]; then
COMMENT_BODY+='```'$'\n'
Expand Down
4 changes: 2 additions & 2 deletions plugins/u22a8/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
{
"name": "u22a8",
"description": "Score and compare content against resonance models on u22a8.ai",
"description": "Score and compare content against scoring models on u22a8.ai",
"version": "0.1.0",
"author": {
"name": "u22a8.ai"
},
"homepage": "https://u22a8.ai",
"repository": "https://github.com/u22a8/plugins",
"license": "Apache-2.0",
"keywords": ["scoring", "writing", "content-quality", "resonance-models"]
"keywords": ["scoring", "writing", "content-quality", "scoring-models"]
}
6 changes: 3 additions & 3 deletions plugins/u22a8/skills/evaluate/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
---
name: evaluate
description: Score content against resonance model traits. Use when the user wants to measure how content performs on specific traits.
description: Score content against scoring model traits. Use when the user wants to measure how content performs on specific traits.
user-invocable: true
allowed-tools: Read, Glob, Bash(u22a8 MCP tools)
argument-hint: [file-or-text]
---

# Evaluate Content

A resonance model is a standard of judgment, learned from examples, that can score any content. Each model has traits — distinct dimensions of quality — and scores content 0–100 per trait. Scores are deterministic and instant.
A scoring model is a standard of judgment, learned from examples, that can score any content. Each model has traits — distinct dimensions of quality — and scores content 0–100 per trait. Scores are deterministic and instant.

Score content against specific traits. Measurement only — no edits.

## Core Flow

1. **Identify content to score.** Read from a file path ($ARGUMENTS), a URL, a selection, or conversation context. URLs (http/https) can be passed directly to `score` — they are fetched and text-extracted automatically. If unclear, ask the user what content to evaluate.

2. **Determine the model.** If the user specifies a model, use it. Otherwise, call `list_profiles` to see what's available and either pick the most relevant one based on context (e.g. a README → `u22a8.compelling-readme`) or present the options and let the user choose.
2. **Determine the model.** If the user specifies a model, use it. Otherwise, call `list_models` to see what's available and either pick the most relevant one based on context (e.g. a README → `u22a8.compelling-readme`) or present the options and let the user choose.

3. **Identify traits.** Use `list_traits` to show the model's traits. Suggest relevant ones based on context, but confirm the user's choice. Do NOT silently evaluate all traits unless the user explicitly asks for "all".

Expand Down
8 changes: 4 additions & 4 deletions plugins/u22a8/skills/improve/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
---
name: improve
description: Evaluate content, identify weaknesses, make targeted edits, and re-evaluate to confirm improvement. Use when the user wants to improve content against resonance model traits.
description: Evaluate content, identify weaknesses, make targeted edits, and re-evaluate to confirm improvement. Use when the user wants to improve content against scoring model traits.
user-invocable: true
allowed-tools: Read, Write, Edit, Glob, Bash(u22a8 MCP tools)
argument-hint: [file-or-text]
---

# Improve Content

A resonance model is a standard of judgment, learned from examples, that can score any content. Each model has traits — distinct dimensions of quality — and scores content 0–100 per trait. Scores are deterministic and instant.
A scoring model is a standard of judgment, learned from examples, that can score any content. Each model has traits — distinct dimensions of quality — and scores content 0–100 per trait. Scores are deterministic and instant.

Evaluate content, analyze weaknesses, make targeted edits, and re-evaluate to confirm improvement.

## Core Flow

1. **Identify content and model.** Read content from file ($ARGUMENTS), URL, or conversation. URLs passed to `score` are fetched automatically. If the user specifies a model, use it. Otherwise, call `list_profiles` and pick the most relevant one based on context, or let the user choose. Then confirm which traits to optimize for using `list_traits`.
1. **Identify content and model.** Read content from file ($ARGUMENTS), URL, or conversation. URLs passed to `score` are fetched automatically. If the user specifies a model, use it. Otherwise, call `list_models` and pick the most relevant one based on context, or let the user choose. Then confirm which traits to optimize for using `list_traits`.

2. **Baseline evaluation.** Call `score` with the current content. Record per-trait scores, zones, and headroom. Present the baseline — highlight which traits have the most headroom (furthest from "solid" threshold).

Expand Down Expand Up @@ -71,7 +71,7 @@ Evaluate content, analyze weaknesses, make targeted edits, and re-evaluate to co

User: "Improve my blog post for flow and storytelling"

1. No model specified and content is a blog post — call `list_profiles`, pick the most fitting model or ask the user
1. No model specified and content is a blog post — call `list_models`, pick the most fitting model or ask the user
2. Baseline: Flow=45 (Developing, headroom 12), Storytelling=62 (Solid), Composite=53
3. Analyze: "Flow has the most headroom. The third paragraph jumps abruptly from personal anecdote to technical explanation without transition."
4. Edit: Add transitional sentences, restructure the opening to establish the narrative thread
Expand Down
Loading