Skill Authoring logo

Skill Authoring

Community
HezaoHezao
skill-authoring

Author SKILL.md: frontmatter, structure, writing principles.

Overview

PublisherHezaoHezao
Repositorypoirot
Skill nameskill-authoring
Stars
252
Forks
26
Bundled files
Instructions only
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by HezaoHezao on GitHub. Read the source before you install it.

Installation

Install the Skill Authoring AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/HezaoHezao/poirot/tree/master/poirot/backend/agents/skill/builtin_skills/core/skill-authoring
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/HezaoHezao/poirot.git /tmp/poirot
mkdir -p .claude/skills
cp -r /tmp/poirot/poirot/backend/agents/skill/builtin_skills/core/skill-authoring .claude/skills/skill-authoring
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Skill Authoring in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Skill Authoring on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Skill Authoring is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Authoring Poirot Skills

Overview

A SKILL.md can live in two places:

  1. Builtin (in-repo): poirot/backend/agents/skill/builtin_skills/<category>/<name>/SKILL.md — committed, shipped with the package. Use write_file + git add.
  2. User-local: skills/<name>/SKILL.md — personal, gitignored. Created via /skill install <path> or by writing directly.

This skill covers authoring for both, with emphasis on builtin skills.

When to Use

  • User asks you to add a skill "in this repo / commit"
  • You're committing a reusable workflow that should ship with Poirot
  • You're editing an existing skill under builtin_skills/

Required Frontmatter

Source of truth: poirot/backend/agents/skill/parser.py::parse_skill_file. Hard requirements:

  • Starts with --- as the first bytes (no leading blank line).
  • Closes with \n---\n before the body.
  • Parses as a YAML mapping.
  • name field present (lowercase, hyphens).
  • description field present.

Peer-matched shape:

yaml
---
name: my-skill-name               # lowercase, hyphens
description: Use when <trigger>. <one-line behavior>.
allowed-tools:                    # Poirot tools this skill may invoke
  - bash
  - read_file
  - write_file
  - list_dir
  - str_replace
  - web_search
  - browse_page
  - present_files
  - read_snapshot
enabled: true
related-skills: [other-skill]     # optional cross-references
license: MIT                      # recommended for contributed skills
author: <human contributor or source attribution>
---

allowed-tools / enabled / related-skills / license / author are NOT enforced by the parser (it reads name/description/allowed-tools/enabled), but every peer has them — omit and your skill sticks out.

Description Standard

description ≤ 60 characters, one sentence, ends with a period. State the capability, not the implementation. No marketing words ("powerful", "comprehensive", "seamless"). Don't repeat the skill name.

Verify:

python
import re, pathlib
m = re.search(r'^description: (.*)$',
              pathlib.Path('builtin_skills/<cat>/<name>/SKILL.md').read_text(),
              re.MULTILINE)
assert len(m.group(1)) <= 60, len(m.group(1))

Size Limits

  • Peer skills sit at 8-14k chars. Aim for that range.
  • If pushing past 20k, split into references/*.md and reference them from SKILL.md.

Writing Quality Principles

A skill exists to make the agent's process more predictable. Predictability does not mean identical output every run; it means the agent reliably follows the same useful discipline.

  1. Optimize for process predictability. Ask: what behavior should change when this skill loads? If a line does not change behavior, cut it.
  2. Choose the right context load. A model-invoked skill pays for its description every turn. Keep descriptions focused on trigger classes and the skill's distinctive behavior. Put details in the body or linked references.
  3. Use an information hierarchy. Put always-needed steps in SKILL.md; put branch-specific or bulky reference material in references/, templates/, or scripts/ and point to it only when needed.
  4. End steps with completion criteria. Each ordered step should say how the agent knows it is done. Good criteria are checkable: "every modified file accounted for" beats "summarize changes."
  5. Co-locate rules with the concept they govern. Avoid scattering one idea across the file.
  6. Use strong leading words. Prefer compact concepts the model already knows — "tight loop," "tracer bullet," "root cause," "regression test" — over long repeated explanations.
  7. Prune duplication and no-ops. Keep each meaning in one source of truth. If a sentence doesn't change agent behavior vs the default, delete it.
  8. Watch for premature completion. If agents tend to rush a step, sharpen that step's completion criterion.

Common quality failures:

  • Premature completion — skill lets the agent move on before work is done
  • Duplication — same rule in multiple places, drifts
  • Sediment — stale lines remain because adding felt safer than deleting
  • Sprawl — too much always-visible material; push branch-specific behind pointers
  • No-op prose — generic advice the agent would follow without the skill

Tool Reference Rules

Tools referenced in SKILL.md prose must be native Poirot tools (listed in allowed-tools) or MCP servers the skill explicitly expects. Do NOT name shell utilities the agent already has wrapped:

  • grep → bash (run grep via bash)
  • cat/head/tail → read_file
  • sed/awk → str_replace
  • find/ls → list_dir

Peer-Matched Structure

# <Title>

## Overview
One or two paragraphs: what and why.

## When to Use
- Bulleted triggers
- "Don't use for:" counter-triggers

## <Topic sections specific to the skill>
- Quick-reference tables are common
- Code blocks with exact commands

## Common Pitfalls
Numbered list of mistakes and their fixes.

## Verification Checklist
- [ ] Checkbox list of post-action verifications

Not every section is mandatory, but Overview + When to Use + actionable body + pitfalls are the minimum.

Directory Placement

builtin_skills/<category>/<skill-name>/SKILL.md     # builtin
skills/<skill-name>/SKILL.md                         # user-local

Builtin categories: core, research, software-development, creative, productivity. Pick the closest existing category. Don't invent new top-level categories casually.

Workflow

  1. Survey peers in the target category:
    list_dir("poirot/backend/agents/skill/builtin_skills/<category>/")
    Read 2-3 peer SKILL.md files to match tone and structure.
  2. Draft with write_file to builtin_skills/<category>/<name>/SKILL.md.
  3. Validate locally:
    python
    import yaml, re, pathlib
    content = pathlib.Path("builtin_skills/<category>/<name>/SKILL.md").read_text()
    assert content.startswith("---")
    m = re.search(r'\n---\s*\n', content[3:])
    fm = yaml.safe_load(content[3:m.start()+3])
    assert "name" in fm and "description" in fm
    assert len(fm["description"]) <= 60
  4. Git add + commit on the active branch.
  5. Note: the current session's skill loader is cached — /skill list will not see the new skill until restart. This is expected.

Cross-Referencing Other Skills

related-skills is documentation-only (parser ignores it). You can reference any skill, but prefer referencing only builtin skills from builtin skills — user-local skills won't resolve for other users.

Editing Existing Skills

  • Small fix (typo, added pitfall): str_replace on the SKILL.md.
  • Major rewrite: write_file the whole SKILL.md.
  • Adding supporting files: write_file to builtin_skills/<category>/<name>/references/<file>.md, templates/<file>, or scripts/<file>.
  • Always commit the edit — builtin skills are source, not runtime state.

Common Pitfalls

  1. Leading whitespace before ---. Parser requires content.startswith("---"); any leading blank line or BOM fails.

  2. Description too generic. Peer descriptions start with the trigger class, not the one task. "Use when debugging X" > "Debug X".

  3. Description too long. >60 chars bloats skill listings and dilutes model attention. Trim ruthlessly.

  4. Naming shell utilities. grep/cat/sed/find → use Poirot tool names (bash/read_file/str_replace/list_dir). Otherwise the model hallucinates calls to non-existent tools.

  5. Writing a skill that duplicates a peer. Before creating, list_dir the category and open 2-3 peers. Prefer extending an existing skill to creating a narrow sibling.

  6. Expecting the current session to see the new skill. It won't. The skill loader initializes at startup. Verify in a fresh session.

  7. Letting skills accumulate sediment. A skill should get shorter or sharper over time. When adding a rule, remove the old wording it replaces.

  8. Writing no-op prose. "Be careful," "be thorough," "use best practices" rarely change model behavior. Replace with a checkable completion criterion.

Verification Checklist

  • File is at builtin_skills/<category>/<name>/SKILL.md (or skills/<name>/)
  • Frontmatter starts at byte 0 with ---, closes with \n---\n
  • name, description, allowed-tools, enabled present
  • license, author present (attribution)
  • Name is lowercase + hyphens
  • Description ≤ 60 chars and describes the trigger class
  • Structure: # Title → ## Overview → ## When to Use → body → ## Pitfalls → ## Verification
  • Each ordered step has a checkable completion criterion
  • No shell utility names in prose (use Poirot tool names)
  • No-op prose and duplicated rules removed
  • git add && git commit completed

Frequently asked questions

What does the Skill Authoring AI skill do?

Author SKILL.md: frontmatter, structure, writing principles.

Why use Skill Authoring on TypingMind?

Because you install it once and use it with any model. Skill Authoring is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Skill Authoring in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/HezaoHezao/poirot/tree/master/poirot/backend/agents/skill/builtin_skills/core/skill-authoring. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Skill Authoring?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Skill Authoring?

As many as you like. As long as a model supports skills, you can use Skill Authoring with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Skill Authoring AI skill free?

Yes. It is published on GitHub by HezaoHezao under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇