Write developer blog posts from video transcripts, meeting notes, or rough ideas while composing reusable personal and explicitly selected corporate writing identities, then checking each draft against the full AI anti-pattern catalog and structural audits.
73
92%
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
create-corporate-identity
create-personal-identity
references