Agent Harness Fault Injection logo

Agent Harness Fault Injection

CommunityPopular
sickn33
agent-harness-fault-injection

Use when an agent workflow needs deterministic recovery evidence for sandbox, MCP/tool, worker, checkpoint, memory, or orchestration failures.

Overview

Publishersickn33
Repositoryagentic-awesome-skills
Skill nameagent-harness-fault-injection
Stars
46.5K
Forks
6.8K
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 sickn33 on GitHub. Read the source before you install it.

Installation

Install the Agent Harness Fault Injection 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/sickn33/agentic-awesome-skills.git /tmp/agentic-awesome-skills
mkdir -p .claude/skills
cp -r /tmp/agentic-awesome-skills/plugins/agentic-awesome-skills-claude/skills/agent-harness-fault-injection .claude/skills/agent-harness-fault-injection
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Agent Harness Fault Injection 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 Agent Harness Fault Injection 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 Agent Harness Fault Injection 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.

Agent Harness Fault Injection

Overview

Use a deterministic, non-production fault schedule to test whether an agent workflow preserves state, budgets, safety boundaries, and evidence when a dependency fails. The output is a small fault matrix, an event timeline, and a verdict that distinguishes recovered, contained, unrecoverable, and inconclusive runs.

When to Use This Skill

  • Use when a multi-step agent, state machine, loop, or multi-agent workflow has a new recovery path.
  • Use when sandbox execution, an MCP/tool call, a worker, a checkpoint store, or memory can time out or disappear.
  • Use before claiming retry, resume, deadline, isolation, or partial-failure behavior is production-ready.
  • Use when a regression needs reproducible failure evidence instead of a random chaos run.

Do not use this skill against a production target, real user data, live credentials, or an unbounded external service. Convert those cases to a local simulator or an authorized staging harness first.

Safety and Boundary Preconditions

  1. Freeze the workflow revision, model/prompt configuration, tool schemas, seed, input fixture, timeout, retry budget, deadline, and expected terminal states.
  2. Run in a disposable sandbox with synthetic inputs and stubbed tools. Keep network disabled unless the test explicitly needs a local test server.
  3. Make every injected failure an in-memory or fixture-controlled event. Never delete real data, revoke real credentials, kill an unrelated process, or mutate a live service to create a failure.
  4. Record the test scope and a run identifier before starting. A missing scope, fixture, or recovery contract makes the verdict inconclusive.

Recovery Contract

Write the invariant before injecting a fault. A useful contract names the state that must survive and the side effects that must not repeat:

text
After recovery, resume from the latest durable checkpoint, preserve the task
identity and safety policy, spend no more than the remaining retry/deadline
budget, and commit each externally visible effect at most once.

Model the workflow with explicit states. For example:

text
created -> running -> checkpointed -> waiting_for_tool
                       |                |
                       v                v
                    failed <--------- recovering -> resumed -> completed

For each transition, define the owner, durable fields, allowed retry count, and terminal behavior. In-memory values are not checkpoints unless the harness proves they survive the simulated restart.

Fault Matrix

Select the smallest set of faults that covers the new recovery logic. Do not randomize the schedule until a deterministic schedule has passed.

FaultInjection boundaryRequired observationExpected containment
sandbox denialbefore a tool startsno unsafe side effect; reason is retainedretry only when policy allows
MCP/tool timeoutafter request id is assignedtimeout is attributed to that requestbounded retry with same idempotency key
worker restartafter checkpoint writeworker reloads the same task versionresume from latest checkpoint
missing/stale checkpointbefore resumestale data is rejected or markedstop safely; never invent progress
parallel branch failureone branch after fan-outsibling status is preservedjoin policy decides retry, degrade, or stop
memory lossclear ephemeral contextdurable facts are reconstructedask or stop when required facts are absent
retry/deadline exhaustionon the final attemptno extra call is scheduledterminal failed or timed_out

Deterministic Injection Schedule

Use event numbers rather than wall-clock randomness. A schedule should be portable across harnesses:

json
{
  "seed": "harness-fixture-07",
  "faults": [
    {"event": "tool.call", "ordinal": 2, "kind": "timeout", "tool": "search"},
    {"event": "worker.start", "ordinal": 2, "kind": "restart"},
    {"event": "branch.join", "ordinal": 1, "kind": "partial_failure", "branch": "summarize"}
  ]
}

The harness should emit the schedule, not merely the seed. Keep fault identity separate from the observed error so a wrapper cannot accidentally turn a timeout into a generic failure. Run the same schedule twice and compare the normalized timeline before trying a different schedule.

Recovery Rules by Boundary

Sandbox and MCP/tool failures

  • Assign a request id and idempotency key before the call.
  • Distinguish timeout, explicit tool error, invalid output, and policy denial.
  • Retry only the declared retryable classes; preserve the original error and attempt count in the evidence.
  • Do not retry a side effect unless the tool contract says the key is safe to replay. A read timeout is not proof that a write did not happen.
  • When the deadline or retry budget is exhausted, emit one terminal event and stop scheduling work.

Worker restart and checkpoints

  • Persist task id, workflow version, state name, completed effects, remaining budgets, and the checkpoint sequence before a restart test.
  • Reload the newest valid checkpoint and reject a future-version or corrupted checkpoint instead of guessing.
  • Verify that resumption does not replay a committed effect. If exactly-once cannot be proven, downgrade the verdict and require reconciliation.

Parallel branches

Represent each branch as its own child attempt. The join record must retain success, failure, timeout, and not-started states. Choose one predeclared join policy:

  • all_required: any required branch failure stops the join;
  • best_effort: continue with an explicit degraded marker;
  • compensate: run a bounded compensating action and then stop or resume.

Never let a successful sibling erase a failed branch from the final ledger.

Memory loss

Clear only the ephemeral context named in the schedule. Rebuild from the checkpoint and durable evidence, then check that the agent does not fabricate missing user intent, tool output, or approval. If a required fact is absent, the safe result is inconclusive or a human clarification state.

Budgets and Terminal Verdicts

Track remaining attempts and remaining time after every event. Do not reset a budget on a worker restart or branch retry. Use these verdicts:

VerdictMeaning
recoveredThe declared invariant held and the workflow completed within budget.
contained_failureThe fault was isolated and the workflow stopped safely as designed.
unrecoverableRecovery violated an invariant, repeated a side effect, crossed a boundary, or exceeded budget.
inconclusiveThe fixture, checkpoint, contract, or evidence was insufficient to judge.

contained_failure is not autonomous success. Report it separately from completed work and include the terminal reason.

Evidence Output

Produce one machine-readable record and one concise human summary. Every event should include run_id, monotonic seq, logical time, state_before, state_after, actor, event, fault_id (when injected), attempt, checkpoint_seq, retry_remaining, deadline_remaining_ms, and a redacted evidence_ref.

json
{
  "run_id": "fi-2026-08-19-07",
  "verdict": "recovered",
  "invariants": {"resume_from_checkpoint": "pass", "effect_at_most_once": "pass", "budget": "pass"},
  "faults": [{"id": "f1", "kind": "tool_timeout", "at": "tool.call#2", "handled": true}],
  "timeline": [
    {"seq": 4, "event": "checkpoint.write", "checkpoint_seq": 3},
    {"seq": 5, "event": "tool.timeout", "fault_id": "f1", "retry_remaining": 1},
    {"seq": 8, "event": "workflow.completed", "checkpoint_seq": 4}
  ],
  "limitations": ["Tool output was synthetic; no deployed MCP was exercised."]
}

The human summary should state the frozen contract, injected schedule, verdict, failed invariants, budget consumption, and the narrowest next verification. Redact prompts, tokens, private records, and tool payloads; stable references are enough for replay.

Example: Local Harness Run

text
Fixture: checkout planner / seed harness-fixture-07
Schedule: search timeout on call 2; worker restart after checkpoint 3
Policy: one retry, 2s deadline, all_required branch join

Result: recovered
Proof: checkpoint 3 reloaded, search request key replayed once, no duplicate
commit, deadline remaining 640ms, final ledger contains both branch outcomes.

Best Practices

  • Freeze inputs and schedules so a failure can be replayed from the evidence.
  • Test one boundary at a time, then add a combined schedule for interaction risk.
  • Assert invariants after every recovery transition, not only at final output.
  • Keep attempt-level faults and task-level outcomes in separate ledgers.
  • Treat missing evidence as inconclusive, never as a passing recovery.

Limitations

  • A local stub cannot prove behavior of a deployed model, MCP server, scheduler, filesystem, or network.
  • Deterministic schedules cover named paths; they do not estimate random-fault frequency or discover unknown failure modes.
  • At-most-once effects require an idempotent, observable contract; a timeline alone cannot prove an external write was not duplicated.
  • This skill does not select production SLOs, repair broken workflows, or grant permission to test systems outside the declared sandbox.

Security & Safety Notes

  • Keep tests local-only and read-only by default; use synthetic fixtures and fake credentials that cannot access a real account.
  • Require explicit authorization and a disposable staging boundary before any test that could contact a non-local service.
  • Do not include destructive commands, exploit payloads, credential material, or automatic cleanup of user data in a harness or report.
  • Redact secrets and personal data before storing timelines or attaching them to a pull request.

Common Pitfalls

  • Problem: A retry clears the original timeout and hides the fault. Solution: Keep fault id, original class, attempt, and retry lineage in the ledger.
  • Problem: A restart passes because the test reused in-memory state. Solution: Serialize, clear, and reload only the declared checkpoint fields.
  • Problem: A partial fan-out is reported as success. Solution: Preserve every branch state and apply the predeclared join policy.
  • Problem: A missing checkpoint is replaced with guessed progress. Solution: Stop safely and return inconclusive or unrecoverable with evidence.
  • Problem: A green final answer hides a deadline or duplicate-effect violation. Solution: Gate the verdict on invariants and remaining budget, not output text alone.

Related Skills

  • @agent-evaluation-reporting - Report autonomous, assisted, failed, timed-out, and invalid outcomes.
  • @cross-platform-contract-propagation-audit - Trace recovery fields and status contracts across consumers.
  • @multi-agent-patterns - Choose a multi-agent topology before testing its failure behavior.

Frequently asked questions

What does the Agent Harness Fault Injection AI skill do?

Use when an agent workflow needs deterministic recovery evidence for sandbox, MCP/tool, worker, checkpoint, memory, or orchestration failures.

Why use Agent Harness Fault Injection on TypingMind?

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

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/sickn33/agentic-awesome-skills/tree/main/plugins/agentic-awesome-skills-claude/skills/agent-harness-fault-injection. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Agent Harness Fault Injection?

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 Agent Harness Fault Injection?

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

Is the Agent Harness Fault Injection AI skill free?

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