Write and revise developer blog posts or run a humanizer / humanization pass on existing drafts using the AI anti-pattern catalog, structural audits, and reusable personal and explicitly selected corporate writing identities.
72
91%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Low
Low-risk findings worth noting
create-personal-identity is the sole owner and writer. It reads every manifest and
provenance field when it creates, updates, migrates, or audits a package.resolve-identities.py is the validating reader for blog-writer. It enforces the
manifest and resource schema in
skills/create-personal-identity/references/package-contract.md; a missing or malformed
required value makes resolution fail.blog-writer reads only the files returned by a successful resolver result. It may inspect
a draft but asks before using one for publishable content. It never writes the package or
invents missing fields.No reader may migrate, substitute, or rewrite a personal identity package.
For migration only, legacy v0 is a directory with no identity.json and a non-empty
voice.md. It may also contain framework.md, examples.md, bio.md, and product.md.
No other pre-v1 shape is supported.
Only create-personal-identity upgrades v0. Treat the legacy directory as a read-only
source and compile a new package at the destination resolved through
skills/blog-writer/references/identity-storage.md:
voice.md into the new package; declare it as the voice resource.framework.md, examples.md, and bio.md; declare them as
composition, examples, and bio resources in that order.product.md without declaring it as a personal resource. Record its exclusion in
sources.md and ask whether its corporate material should seed a corporate identity.identity.md with concise shared guidance and routing derived from the declared
resources.sources.md with each legacy file's path, scope, authority, and migration notes.identity.json under
skills/create-personal-identity/references/package-contract.md with the chosen name,
the ordered resources, and status: draft.status to approved after explicit approval.The completed manifest stamps the new package as schema_version: 1. Leave the legacy
directory, symlink, and files unchanged. Preserve all unresolved conflicts. A
manifest-bearing v1 source routes to Step 3 instead of migration. Stop on every other
manifest schema and ask for an updated plugin or an owner-defined migration. Never silently
downgrade, discard, substitute, or rewrite an unsupported package.
.tessl-plugin
skills
blog-writer
cfp-abstract
create-corporate-identity
create-personal-identity
references