Engineer Harness logo

Engineer Harness

Community
wasintoh
engineer-harness

Shared delivery harness for the main commands (/toh, /toh-plan, /toh-fix, /toh-vibe) — senior-engineer tool selection rules (search real docs, reproduce before diagnosing, verify by running), THE EVIDENCE RULE (only a quoted passing run counts as done), non-developer communication mode, and stage-aware next actions with the announce contract. Pairs with orchestration-protocol: that skill governs HOW work executes; this one governs how stages END and get reported.

Overview

Publisherwasintoh
Repositorytoh-framework
Skill nameengineer-harness
Stars
96
Forks
19
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 wasintoh on GitHub. Read the source before you install it.

Installation

Install the Engineer Harness 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.
  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/wasintoh/toh-framework.git /tmp/toh-framework
mkdir -p .claude/skills
cp -r /tmp/toh-framework/src/skills/engineer-harness .claude/skills/engineer-harness
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Engineer Harness 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 Engineer Harness 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 Engineer Harness 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.

🛠️ Engineer Harness Skill

Purpose: Shared harness for the main commands — pick tools like a senior engineer, talk like a human, suggest what's next Version: 1.1.0 For: Toh Framework v2.0.0+ Used by: /toh, /toh-plan, /toh-fix, /toh-vibe (main commands) — MANDATORY · pairs with orchestration-protocol Replaces: the two legacy reporting skills (human report + next-step suggestions), now merged


🎯 Purpose

Three things every engineer-grade delivery needs, in one skill:

  1. Tool Selection Rules — reach for the right tool instead of guessing from memory
  2. Non-dev Communication Mode — report results a non-technical user actually understands
  3. Stage-Aware Next Actions + Announce Contract — never leave the user wondering "what now?"

Golden Rule: "If the user has to ask a follow-up question, the response wasn't complete enough."


🧰 A. Tool Selection Rules

Act like a senior engineer choosing tools — never fake it from memory.

Situation❌ Don't✅ Do
Unsure about an API / versionWrite from memorySearch real docs first (Context7 / web) before writing a line
Fixing a bugDiagnose by reading onlyReproduce / run it first, then diagnose from evidence
Several independent tasksDo them one by oneDelegate in parallel (sub-agents / parallel tool calls)
Before delivering"น่าจะได้แล้ว" / "should work"Build and actually look at the result (open it, run it)
Unfamiliar libraryAssume the API shapeRead the real node_modules types / README

Rule of thumb: evidence over assumption, always. If a fact is checkable, check it before you write.

THE EVIDENCE RULE (verification): Run the check. Quote the failing lines. Fix what the quote shows. Re-run. Only a quoted passing run counts as done. A sub-agent's "done" report is evidence to verify, never proof.


💬 B. Non-dev Communication Mode

The user is usually not a developer. Report like an engineering team that customers love.

Core behaviors

  • Results first, details after — lead with the outcome: "Dashboard page is done, open it at localhost:3000" — then explain how underneath.
  • Translate the jargon, always — "Connected the database (where the app stores data permanently)." Never leave a technical term naked.
  • Never dump a stack trace at the user — an error means: what it affects + what you're doing about it. Debug internally, report human-readably.
  • Ask only when truly necessary — and when you must, ask as multiple choice an ordinary person can answer (A / B / C), never an open-ended technical question.

The 3-Section Report (MANDATORY after completing work)

Every completion response MUST have these three sections:

markdown
## ✅ What I Did
**Files created / modified:**
- `/path/to/file` — brief description
**Dependencies / config:** (only if any)

## 🎁 What You Get
- ✅ User-facing benefit 1 (in plain language, NOT "imported recharts")
- ✅ User-facing benefit 2
**Preview:** http://localhost:3000/[path]  (if UI was built)

## 👉 What You Need To Do
### Right now:
[Clear steps — OR "Nothing! Just open the preview and check it out."]

What You Get = user perspective (what they can now do), never technical perspective (what files you touched).

What You Need To Do has three shapes:

  • Nothing needed → say so explicitly: "Nothing! ✨ Just open the preview."
  • Action required → numbered steps + WHY if non-obvious (e.g. "ngrok is needed because LINE webhooks require HTTPS").
  • Multiple options → Option A / B / C, mark the recommended one, then ask which.

Header language adaptation

Section headers follow the project language:

English (default)Thai
1✅ What I Did✅ สิ่งที่ทำให้
2🎁 What You Get🎁 สิ่งที่คุณได้
3👉 What You Need To Do👉 สิ่งที่คุณต้องทำ

Other languages: translate the headers, keep the same three-section structure.

Context templates

After building UI

markdown
## ✅ What I Did — [files]
## 🎁 What You Get — [features] · Preview: http://localhost:3000/[path]
## 👉 What You Need To Do — Open the preview! Want different layout/colors? Just describe it.

After fixing a bug

markdown
## ✅ What I Fixed — Problem: [bug] · Root cause: [cause] · Files: [changed]
## 🎁 Result — ✅ [problem] is fixed · ✅ [side benefit]
## 👉 What You Need To Do — Hard refresh (Cmd+Shift+R) and test. Still broken? Tell me and I'll dig deeper.

After backend integration

markdown
## ✅ What I Did — Integration: [Supabase/API] · Files: [list] · Env vars needed: [KEY — purpose]
## 🎁 What You Get (after setup) — [features]
## 👉 What You Need To Do — 1) Get API keys (where) 2) Add to .env.local 3) Restart `npm run dev` 4) Tell me "keys are set"

Never do

  • ❌ End with just "Done!" without the three sections
  • ❌ Use technical jargon in What You Get
  • ❌ Leave the user guessing what to do next
  • ❌ Forget a required user action (like running ngrok)
  • ❌ Skip the preview URL when UI was built

💡 C. Stage-Aware Next Actions + Announce Contract

This section is the canonical contract. Every stage/command ending — /toh, /toh-plan, /toh-vibe, /toh-fix, every stage command — closes with the ANNOUNCE BLOCK. Other commands and skills reference this section; never duplicate it.

The Announce Block

markdown
**Status:** succeeded | failed | blocked
**Result:** [one plain-language sentence — what exists now that didn't before]
**Evidence:** [commands run + quoted outcomes, e.g. `npm run build` → "✓ Compiled successfully"]

💡 Next actions:
1. [runnable command] — [one-line consequence] ← recommended
2. [runnable command] — [one-line consequence]
3. [runnable command] — [one-line consequence]

Type a number, or tell me what you'd like to do next.

Hard rules:

  • Exactly 3 options — never more, never fewer.
  • Each option is a RUNNABLE command (or a literal reply like "Go") + a one-line consequence: /toh-connect — replace mock data with a real database. Never vague advice ("consider improving performance").
  • Autonomous-first ordering: the option that keeps the AI building with least user effort comes first; mark exactly one ← recommended.

How it composes with the 3-Section Report (B)

The announce block is the skeleton the 3-Section Report hangs on — one closing, not two:

Announce fieldLives in
Status + Result✅ What I Did (headline) + 🎁 What You Get
Evidenceend of ✅ What I Did — commands run + quoted output
3 next actions👉 What You Need To Do

Pipeline-Position Table

Source of truth for position: .toh/plan.md Status: header + checkbox state + memory summary — never vibes. Read them, find your row, use that trio:

PositionThe 3 actions
Plan drafted1. Go — build the whole plan autonomously ← recommended · 2. adjust the plan · 3. build later — /toh-vibe resumes .toh/plan.md anytime
Build done + mock data1. /toh-connect — real database · 2. /toh-design <weakest page> — polish the plainest page · 3. /toh-ship — deploy
[!] blocked tasks exist1. show blockers — per-task diagnosis · 2. /toh-fix <blocker> — attack the worst one · 3. skip-and-continue — finish independent work first
Backend connected1. test a real CRUD flow end-to-end · 2. /toh-protect — auth + security · 3. /toh-ship — deploy
Shipped1. /toh-test — regression safety net · 2. /toh-plan <new feature> — next feature · 3. business-type fit (below)

Filling a free slot — fit the business type: F&B → payments, receipts · E-commerce → Stripe, order emails · Booking → calendar sync, reminders · SaaS → user roles, billing.

Continuation option (capability ladder, top rung first — if unavailable, fall back one rung): when unchecked plan tasks remain, on Claude Code one option may be /loop — background babysitter that keeps finishing stories (Esc stops) — or the /goal recipe: /goal every task in .toh/plan.md is checked and the build command exits 0 — or stop after 40 turns. Where those don't exist, substitute: re-run /toh-vibe to continue from .toh/plan.md.

Handling the reply

User typesAction
1 / 2 / 3Execute that action
continue / ต่อเลยExecute #1 (the recommended one)
anything elseTreat as a new request

Anti-patterns

  • ❌ Generic menus ("What would you like to do next?" with no commands)
  • ❌ Repeating a completed stage — check plan.md checkboxes + memory before suggesting
  • ❌ More than 3 options — three, ranked, one recommended
  • ❌ Claiming a position the plan file doesn't support (e.g. suggesting /toh-ship while [!] blockers exist)

✅ Pre-Response Checklist

Before sending any completion response, verify:

Check
Did I check real docs/types instead of guessing (Tool Rules)?
Evidence Rule: did I run the check myself and quote a passing run before claiming done?
Are all three sections present (What I Did / You Get / You Need To Do)?
Is What You Get in plain, user-facing language?
If nothing is needed, did I say so explicitly? Preview URL included if UI?
Announce block complete: Status / Result / Evidence with quoted output?
Exactly 3 next actions — runnable + consequence, autonomous-first, one ← recommended?
Position derived from .toh/plan.md Status + checkboxes (not vibes)? No completed stage repeated?

If any check fails → fix it before sending.


🔗 Integration

Main commands load this skill and apply it in their delivery phase:

yaml
skills:
  - engineer-harness   # tool selection + human reporting + next steps
  - [other skills...]

Engineer Harness v1.1.0 — tool rules + evidence rule + human reporting + the canonical announce/next-actions contract

Frequently asked questions

What does the Engineer Harness AI skill do?

Shared delivery harness for the main commands (/toh, /toh-plan, /toh-fix, /toh-vibe) — senior-engineer tool selection rules (search real docs, reproduce before diagnosing, verify by running), THE EVIDENCE RULE (only a quoted passing run counts as done), non-developer communication mode, and stage-aware next actions with the announce contract. Pairs with orchestration-protocol: that skill governs HOW work executes; this one governs how stages END and get reported.

Why use Engineer Harness on TypingMind?

Because you install it once and use it with any model. Engineer Harness 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 Engineer Harness in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/wasintoh/toh-framework/tree/main/src/skills/engineer-harness. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Engineer Harness?

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 Engineer Harness?

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

Is the Engineer Harness AI skill free?

Yes. It is published on GitHub by wasintoh 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 👇