voice-layer-e925c4 — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited voice-layer-e925c4 (Plugin) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
<p align="center"> <img src="assets/brand/logo.png" alt="voice-layer" width="360"> </p>
A local-first personal voice layer for AI agents.
Bring your voice to any agent. Adapt to any audience without losing yourself.
Humanize AI-generated drafts by rewriting them in your own calibrated voice: PR comments, Slack replies, docs, RFCs, and emails.
voice-layer gives Claude Code and Codex a reusable local profile for writing like you: direct where you are direct, careful where you are careful, and shaped for the channel without flattening into generic AI prose. It is a local-first AI writing assistant for personal voice, not a generic humanizer prompt.
voice-layer local rewrite flow
generic AI draft + local voice-profile.md -> PR comment | Slack reply | RFC | emailvoice-layer zero-data Claude Code demo
The demo uses only the synthetic profile in this repo.
Homebrew install:
brew tap ymeiri/voice-layer
brew install voice-layer
voice-layer install --agent both
voice-layer doctor --agent bothRemove skills while preserving your profile:
voice-layer uninstall --agent bothDelete local profile data only when you explicitly mean it:
voice-layer purge --yesClone-based install also works:
./voice-layer install --agent both
./voice-layer doctor --agent bothThis repo currently ships the reference implementation as two Agent Skills:
write-in-my-voice: drafts or rewrites Slack replies, emails, PRdescriptions, review comments, docs, design docs, RFCs, issue updates, and similar text.
calibrate-my-voice: builds a local voice profile from samples youexplicitly approve.
The repo and plugin packages use the voice-layer name. The commands are verbs: one for writing, one for calibration.
Current packaged support is Claude Code and Codex. "Bring your voice to any agent" is the long-term direction; Cursor and other agents are not claimed as supported until their package and invocation behavior are verified. See docs/support-matrix.md.
Why this is not just a prompt:
voice-profile.md, stored outside the repo.get different shapes from the same facts.
are explicitly checked.
not evading AI detectors or hiding provenance.
network/telemetry paths.
AI agents are good at producing text. They are much worse at preserving the person behind the text.
Most AI-polishing tools remove a few cliches. That is not enough. Real writing depends on voice, channel, audience, context, document shape, and boundaries. A message can be more corporate-friendly, more direct, or easier for a different audience to read without erasing the person who wrote it. A design doc can also keep the user's structure, depth, risk framing, and decision style.
If you are searching for an AI text humanizer, voice-layer is the stricter version of that idea: it humanizes AI-written text by applying an explicit, auditable voice profile that you control.
voice-layer treats style as a portable profile:
voice + vibe + channel + audience + guardrails -> usable draftfile that agents can reuse.
sources such as Slack, email, docs, PRs, or project tools.
cultural or regional language into a costume.
preserve how the user structures context, alternatives, risks, and decisions.
AI writing sound fake: AI_TELLS.md.
You can test the core loop without connecting Slack, Google Docs, GitHub, email, or any private workspace. The repo includes a synthetic profile at tests/fixtures/profiles/valid-profile.md.
Install the Claude Code skill from this checkout, then launch Claude Code with the bundled profile:
./voice-layer install --agent claude --mode symlink
VOICE_LAYER_PROFILE="$PWD/tests/fixtures/profiles/valid-profile.md" claudeThen ask Claude Code:
/write-in-my-voice draft a PR comment from this:
Change parseWidgetConfig() in src/widgets/config.ts.
Goal: fix FOO-123.
Behavior is behind ENABLE_WIDGET_V2=true.
Tests: npm test -- widgets/config.test.ts.
Concern: we should make sure invalid widget types still return the existing validation error.A real zero-data Claude Code run produced:
Patch parseWidgetConfig() in src/widgets/config.ts for FOO-123. Gated on
ENABLE_WIDGET_V2=true.
One thing to confirm before this lands: invalid widget types should still
return the existing validation error, not fall through to the new path. Worth
an explicit test case alongside npm test -- widgets/config.test.ts.The same facts can be shaped for another channel:
/write-in-my-voice make this suitable for a short Slack update to the team:
Change parseWidgetConfig() in src/widgets/config.ts.
Goal: fix FOO-123.
Behavior is behind ENABLE_WIDGET_V2=true.
Tests: npm test -- widgets/config.test.ts.
Concern: invalid widget types should still return the existing validation error.Output:
Patching parseWidgetConfig() in src/widgets/config.ts for FOO-123, gated on
ENABLE_WIDGET_V2=true. Tests: npm test -- widgets/config.test.ts. Watch item:
invalid widget types should still hit the existing validation error. Flagging
in case anyone sees otherwise.The broader synthetic example set lives in examples/README.md. No examples are based on a real person.
From a clone of this repo, if you are not using Homebrew:
./voice-layer install --agent both
./voice-layer doctor --agent bothRestart Claude Code or Codex after installing.
The CLI links the skills into:
~/.claude/skills~/.agents/skillsIt also creates the local profile path:
~/.config/voice-layer/voice-profile.mdPreview file changes before installing:
./voice-layer install --agent both --dry-runRemove skill links without deleting your profile:
./voice-layer uninstall --agent bothDelete local profile data only with an explicit purge:
./voice-layer purge --yesFor Homebrew, plugin/marketplace installs, uninstall, and troubleshooting, see docs/install.md.
Before calibration, write-in-my-voice can still remove generic AI writing patterns, but it does not know your voice yet.
Claude Code:
/write-in-my-voice rewrite this Slack reply:
Great question! It is important to note that we could potentially leverage this robust approach.Codex:
Use $write-in-my-voice to rewrite this Slack reply:
Great question! It is important to note that we could potentially leverage this robust approach.Start calibration when you want the skill to learn your style:
/calibrate-my-voice build my local voice profile.The calibrating agent should first inspect what source tools are available in the current session, then ask which sources it may use. It can work from pasted samples, exports, local git commits, code reviews, chat, email, docs, or project-management tools such as Linear, Jira, Asana, Monday.com, or internal trackers.
It must not read any source until you approve the source, scope, date range, author filter, and retention mode.
voice-layer separates stable identity from temporary adaptation:
corporate-friendly orchill-rock-star.
runbooks, and design docs.
The key rule:
Voice is portable. Culture is not a costume.This repo does not include a hosted service, telemetry, or personal samples. CI runs a static no-silent-telemetry guard over executable repo code:
voice-layer is not an AI detector bypass tool. It is meant to help users communicate honestly in their own style, with local profile data they can inspect and delete.
python3 scripts/check_no_silent_telemetry.pyThe generated profile stays local by default at:
~/.config/voice-layer/voice-profile.mdRead PRIVACY.md before calibrating from private workspaces.
python3 scripts/sync_core.py --check
python3 scripts/validate_repo.py
python3 scripts/check_no_silent_telemetry.py
python3 scripts/validate_profile.py ~/.config/voice-layer/voice-profile.md
python3 scripts/evaluate_examples.py
python3 scripts/evaluate_behavior.py
python3 scripts/evaluate_behavior.py --print-pilot-prompts
python3 -m unittest discover -s testsprofile schema.
and Nano Banana prompt pack.
and public-posting guardrails.
eval scenarios for writing, calibration, privacy, and audience adaptation.
validation.
complete multi-agent implementation.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.