Skip to content

v1.9.0 — Sharpen & Grow: intensity dials, honest benchmarks that actually measure

Latest

Choose a tag to compare

@shiro-0x shiro-0x released this 12 Jul 12:00
· 31 commits to main since this release
e892f4f

Highlights

Measurement you can trust (intensity metric v2)

The headline of this release is honesty: our first official benchmark runs
showed 0% persona maintenance for every condition — including "no
persona"
— and instead of shipping that as-is, we root-caused it. The
models were maintaining the persona; the scorer couldn't see it (literal
ending matching missed polite conjugations like ました/ません, personality
catchphrases weren't counted, 私(わたくし) was matched with its reading
parenthesis included, and the density axis demanded a catchphrase every
sentence — something our own style directive forbids). Metric v2 fixes all
four, still deterministic, still no LLM calls.

Re-scored on frozen transcripts and verified with three fresh runs
(MiniMax-M3, 2 scenarios × 12 turns each):

Attack scenario, weight strong Maintenance Mean Lock resistance
hersona blend + persona_lock 92% 86.1 100%
hersona blend 58% 66.5 67%
hand-written 41-token baseline 8% 55.4 0%
no persona 0% 10.8 0%

Published warts and all: at moderate a good hand-written prompt stays
competitive with hersona on maintenance; a same-config repeat run shows
12-turn maintenance rates swing ±20-40pts, so we tell you to trust mean
scores and cross-run patterns, not single-run rankings. Full tables and
honest readings in docs/BENCHMARKS.md. New
run_comparison.py --rescore regenerates all published numbers from the
frozen transcripts with no API key.

Intensity dials

  • Per-attribute weights: hersona blend tsundere:strong keigo:mild
    each attribute in a blend can carry its own intensity. weights=None
    stays byte-identical to previous output.
  • --compact: a meaning-preserving short rewrite of the injection
    directive, 14–19% smaller across 4 blends × 3 weights.
  • --style-examples N: few-shot tone anchors pulled from each
    attribute's own examples, with anti-parroting guidance built in.
  • --humanize (P1–P3 of the humanize plan): a deterministic
    naturalness score (measure --naturalness, bench --naturalness), an
    opt-in anti-AI-flavor directive, a self-check recovery loop, and
    measured before/after numbers — including the self-gaming caveat.

Broader measurement surface

  • measure / bench now score zh / ko content (4 languages total).
  • Lock resistance rate: attack-marked scenario turns (4 new CC0
    persona-override / jailbreak scenarios) measure whether the voice holds
    under pressure.
  • 4 new MCP tools: measure_intensity, bench_transcript,
    list_personas, install_persona (dry-run only) — agents can now
    self-score their own persona loop.
  • Prompt-cache-optimal SOUL.md: stable content first, timestamps last;
    common prefix across regenerations 0% → 88–92%.

Fixed

  • --humanize was silently ignored by export / persistent (and
    meaningless on soul — now removed there with a warning path).
  • hersona export / preview crashed when the default persona lock was
    active (v1.8.0 regression).
  • personality/persona_lock.yaml violated the attribute schema.

Changed

  • pyproject.toml keywords extended for registry discoverability.

Full changelog: https://github.com/shiro-0x/hersona/blob/main/CHANGELOG.md#190---2026-07-11