Agent skill

Create Dotfile

by danshapiro in danshapiro/kilroy

A skill your agent uses when authoring or repairing Kilroy Attractor DOT graphs from requirements, with template-first topology, routing guardrails, and validator-clean output.

MITAuto-check passedAI & LLM Engineering

Install Create Dotfile

skills CLI
$ npx skills add danshapiro/kilroy --skill create-dotfile -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install danshapiro/kilroy create-dotfile --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/danshapiro/kilroy.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/create-dotfile .claude/skills/create-dotfile && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
create-dotfile
GitHub stars
221
Token cost
~6.4k tokens
SKILL.md length
2,866 words
Files
5
Skills in repo
7
Repo updated
First seen
Licence
MIT

At a glance

A skill your agent uses when authoring or repairing Kilroy Attractor DOT graphs from requirements, with template-first topology, routing guardrails, and validator-clean output.

  • Works in 4 steps: exact user-provided ID (if already… → internal/attractor/modeldb/pinned/openrou… → internal/attractor/modeldb/manual_models.… → …
  • Repairing Kilroy Attractor DOT graphs from requirements
  • SKILL.md covers Scope, Overview, Workflow and Model Constraint Contract…, plus 3 more sections
  • Runs Shell scripts from its folder; calls sh, git and playwright

What it does

Create Dotfile is an agent skill from danshapiro/kilroy. Use when authoring or repairing Kilroy Attractor DOT graphs from requirements, with template-first topology, routing guardrails, and validator-clean output.

Its SKILL.md is about 6.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files (for example `hooks/validate-dot.sh`, `hooks/validate-dot.test.sh` and `preferences.yaml`).

It sits in AI & LLM Engineering, covering LLM guardrails. The licence is MIT.

When your agent uses it

  • Repairing Kilroy Attractor DOT graphs from requirements
  • With template-first topology
  • Routing guardrails
  • Validator-clean output

Example prompts

  • “/create-dotfile”

Requirements

  • A Bash shell

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. exact user-provided ID (if already canonical),
  2. internal/attractor/modeldb/pinned/openrouter_models.json,
  3. internal/attractor/modeldb/manual_models.yaml (if present),
  4. skills/shared/model_fallbacks.yaml (backup only when other sources fail).

What it can do on your machine

Read from SKILL.md and the folder at commit b55fb0f. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships script files (Shell), which the agent can run.

    Shell commands in SKILL.md call:

    • sh
    • git
    • playwright
    • npm
    • go

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use git and npm, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Create Dotfile loads about 6.4k tokens when it runs. Until then it costs about 43 tokens; SKILL.md has 2,866 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~43
When it runs · the whole SKILL.md, loaded when a task matches
~6.4k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from danshapiro/kilroy at commit b55fb0f, republished under its MIT licence (© danshapiro). 2,866 words, ~6,353 tokens.

Download SKILL.mdSave it as .claude/skills/create-dotfile/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.
name
create-dotfile
description
Use when authoring or repairing Kilroy Attractor DOT graphs from requirements, with template-first topology, routing guardrails, and validator-clean output.

Create Dotfile

Scope

This skill owns DOT graph authoring and repair for Attractor pipelines.

In scope:

  • Turning requirements/spec/DoD into a runnable .dot graph.
  • Defining topology, node prompts, routing, model assignments, and validation behavior.
  • Enforcing DOT-specific guardrails and validator compatibility.

Out of scope:

  • Run config (run.yaml / run.json) authoring and backend policy details. Use create-runfile for that.

Overview

Core principle:

  • Prefer validated template topology over ad-hoc graph design.
  • Compose prompt text from project evidence; do not copy stale boilerplate.
  • Optimize for reliable execution and recoverability, not novelty.

Default topology source:

  • skills/create-dotfile/reference_template.dot

Model defaults source:

  • skills/create-dotfile/preferences.yaml

Workflow

  1. Fetch the current model list (required before writing any model_stylesheet).

Run: kilroy attractor modeldb suggest

Capture the output. Use ONLY the model IDs listed in the output. Do not use model IDs from memory — they go stale. If the command is unavailable, default to: claude-sonnet-4.6 (anthropic), gemini-3-flash-preview (google), gpt-4.1 (openai).

  1. Determine mode and hard constraints.
  • If non-interactive/programmatic, do not ask follow-up questions.
  • Extract explicit constraints (no fanout, model/provider requirements, deliverable paths).
  1. Gather repo evidence.
  • Read the authoritative spec/DoD sources if provided.
  • Use repo docs and files to resolve ambiguity before making assumptions.
  1. Choose topology from template first.
  • Start from reference_template.dot for node shapes, routing, and loop structure.
  • If user says no fanout or single path, remove fan-out/fan-in branch families.
  • Fan-in semantics are shape-dependent:
    • shape=tripleoctagon (parallel.fan_in) uses FanInHandler winner selection/fast-forward semantics.
    • Converging branches into a shape=box node is a manual merge handoff: branch worktrees are passed to the LLM in that box node, and the prompt must instruct the node to manually inspect and merge branch outputs (including git-based workflows such as git diff, commit inspection, and merge/cherry-pick by branch head_sha when appropriate).
  • graph-level retry_target: Set graph-level retry_target to the earliest node that preserves already-completed work on re-entry. For pipelines with an analysis or planning phase, point to plan_work or debate_consolidate so re-entry can reuse completed design docs and implementation files. Pointing retry_target at a specific implement_* node skips all sibling workers' output.
Implementation Decomposition
  • If the task involves implementing or porting a codebase estimated to exceed ~1,000 lines of new code, decompose the implement node into per-module fan-out nodes (e.g. implement_core, implement_api, implement_data_layer) with a merge_implementation synthesis node. Each module node targets a bounded deliverable (~200–500 lines). A single implement node for large codebases produces stub implementations that pass structural checks but deliver no functional behavior.
  • Use parallel fan-out (multiple implement_X → merge_implementation) or sequential chain as appropriate. Each implement_X node writes to .ai/runs/$KILROY_RUN_ID/module_X_impl.md and commits the code. merge_implementation synthesizes integration points and resolves conflicts.
  • Threshold: >1,000 estimated lines of new code → decompose. The cost of extra nodes is much lower than a stub implementation.

Analyze-before-implement (required when porting or reading existing source): When the task involves translating, porting, or extending an existing codebase, insert a dedicated analysis cluster BEFORE any implement_* nodes:

analyze_fanout (shape=component) → analyze_<module>×N (shape=box, auto_status=true)
  → merge_analysis (shape=box, auto_status=true) → [implement cluster]

Each analyze_<module> node reads specific source files and writes a compact design doc to .ai/runs/$KILROY_RUN_ID/design_<module>.md (under 300 lines — spec only, no implementation code). merge_analysis verifies all design docs exist and are cross-module consistent. Only after merge_analysis succeeds does the pipeline proceed to implement_* nodes. See skills/create-dotfile/reference_template.dot OPTIONAL comments for stub examples.

auto_status=true assignment rules:

  • MUST: synthesis nodes — consolidate_*, merge_*, debate_*, review_consensus, postmortem
  • SHOULD: all implement_*, analyze_* nodes in fan-outs — their primary completion signal is the deliverable file; auto_status removes redundant success writes
  • NEVER on shape=diamond routing nodes or shape=parallelogram tool nodes
  1. Set model/provider resolution in model_stylesheet.
  • Ensure every shape=box node resolves provider + model via attrs or stylesheet.
  • Keep backend choice (cli vs api) out of DOT; backend belongs in run config.
  • model_stylesheet declarations MUST use semicolons to separate property-value pairs within each selector block. Omitting semicolons causes silent parsing failures where nodes resolve to no provider.
    • Correct: * { llm_model: gemini-2.0-flash; llm_provider: google; }
    • Wrong: * { llm_model: gemini-2.0-flash llm_provider: google } — space-separated declarations silently fail.
  • After writing model_stylesheet: verify each {} block uses only semicolon-terminated declarations; no two property names appear adjacent without a semicolon separator.
  • Anthropic model IDs use dot-separated version numbers: claude-opus-4.6, claude-sonnet-4.6, claude-haiku-4.5. Never use dashes in the version suffix — claude-opus-4-6 is wrong and will cause a validation ERROR. The three current canonical Anthropic IDs are: claude-opus-4.6, claude-sonnet-4.6, claude-haiku-4.5.

Model Constraint Contract (Required)

  • Treat explicit user model/provider directives as hard constraints.
  • For explicit fan-out mappings, keep branch-to-model assignments one-to-one; do not reorder branches or merge assignments.
  • Canonicalize provider aliases for DOT keys: gemini/google_ai_studio -> google, z-ai/z.ai -> zai, moonshot/moonshotai -> kimi, minimax-ai -> minimax.
  • Resolve explicit model IDs against local evidence in this order:
  1. exact user-provided ID (if already canonical),
  2. internal/attractor/modeldb/pinned/openrouter_models.json,
  3. internal/attractor/modeldb/manual_models.yaml (if present),
  4. skills/shared/model_fallbacks.yaml (backup only when other sources fail).
  • Never silently downgrade or substitute an explicit model request with a different major/minor family (example: requested glm-5 must not become glm-4.5).
  • If exact canonical resolution is unavailable, preserve the user-requested model literal in llm_model (normalize whitespace only) instead of guessing a nearby model.
  • Apply known alias normalization from the fallback file before deciding unresolved status (for example: glm-5.0 -> glm-5 for provider zai).
  • Explicit user model/provider directives override skills/create-dotfile/preferences.yaml defaults.
  1. Compose node prompts and handoffs.
  • Every shape=box prompt must include both $KILROY_STAGE_STATUS_PATH and $KILROY_STAGE_STATUS_FALLBACK_PATH.
  • IMPORTANT: auto_status=true suppresses writing status=success on normal completion. It does NOT remove the requirement to include $KILROY_STAGE_STATUS_PATH and $KILROY_STAGE_STATUS_FALLBACK_PATH in the prompt — those paths are still required for failure-case writes. For auto_status nodes, phrase it as:
    "Write to $KILROY_STAGE_STATUS_PATH (fallback: $KILROY_STAGE_STATUS_FALLBACK_PATH)
     ONLY on failure: {"status":"fail","failure_reason":"...","failure_class":"..."}"
    Omitting the paths from auto_status node prompts causes status_contract_in_prompt warnings.
  • Require explicit success/fail/retry behavior. For fail/retry, failure_reason and failure_class are required — not optional. Missing failure_class defaults to deterministic, which is tracked by the cycle breaker. Silently omitting it makes the breaker behavior unpredictable.
  • For any node whose failure prose may vary between retries (filenames, line numbers, counts, AC lists), also set failure_signature to a stable short key: "failure_signature":"compile_errors". This prevents the same root cause from appearing as distinct signatures and defeating the cycle breaker. See Cycle Detection Contract section below.
  • Keep .ai/runs/$KILROY_RUN_ID/* producer/consumer paths exact; no filename drift.
  • Scratch artifacts are run-scoped only: use .ai/runs/$KILROY_RUN_ID/... everywhere. Root .ai is not implicitly ingested.
  • max_tokens (output token cap, default 32768): Every provider adapter defaults to 32768 output tokens per response. This is a per-response generation cap — completely separate from the model's input context window. For nodes that write large files (full source modules, long docs), leave this at the default or increase it. For classification-only or short-answer nodes, reducing it is fine. Set it explicitly when you want deterministic behavior regardless of provider defaults:
    dot
    implement [shape=box, max_agent_turns=300, max_tokens=32768, prompt="..."]
    Failing to account for max_tokens on code-generating nodes is the most common silent failure mode: the model generates a large write_file call, hits the cap, Gemini/Anthropic return an empty or truncated response, and Kilroy interprets the session as cleanly ended (auto_status=true writes {"status":"success"}), producing an infinite do-nothing loop.
  • shape=parallelogram nodes must use tool_command.
  • For compiled or packaged deliverables (executables, libraries, modules, services, containers, bundles): the verification node MUST validate the expected runtime behavior or interface contract — not just file existence or a successful build exit code.
  • Add a domain-specific runtime validation node when needed (for example verify_runtime, verify_api_contract, verify_cli_behavior, verify_ui_smoke). Use checks that prove the deliverable actually works for the intended use case.
  • A stub artifact can compile and still be functionally empty; require contract-level verification (exports, endpoints, CLI behavior, or observable outputs) to catch this.
  • For browser/UI verification, prefer explicit verify node names (for example verify_browser, verify_e2e) and runner commands (playwright test, cypress run, npm run e2e) so intent is unambiguous.
  • If browser verification intent is wrapped/ambiguous (for example custom shell wrapper), set collect_browser_artifacts=true on that verify node.
  • The verify_fidelity prompt MUST enumerate acceptance criteria by numbered ID (AC1, AC2, ...), map each to the specific output file(s) that implement it:
    AC1: src/auth.py   — verify token issuance and expiry behaviour
    AC2: src/storage.py — verify data persistence across restart
    Use these IDs in the failure_signature field so postmortem can reference failing ACs precisely and the next verify pass can re-check only those criteria.
  • Verify nodes must call runtime-authored scripts, not hardcode tool invocations. Any shape=parallelogram verify node whose pass/fail depends on decisions made by implementation nodes — package manager, build system, directory layout, language runtime — MUST use tool_command="sh scripts/validate-{stage}.sh" rather than inline tool calls. The implementation node responsible for project scaffolding MUST write scripts/validate-build.sh, scripts/validate-fmt.sh, and scripts/validate-test.sh as committed deliverables. Scripts MUST open with #!/bin/sh and MUST NOT assume any runtime beyond what check_toolchain confirmed. Rationale: ingest-time tool_command strings embed assumptions about structure the implementation loop has not yet made; when the loop's choices diverge — different directory names, package managers, or build systems — the verify node fails deterministically and no postmortem routing can repair it.
  • Test evidence contract (required when DoD defines integration scenarios): scripts/validate-test.sh MUST write deterministic evidence artifacts under .ai/runs/$KILROY_RUN_ID/test-evidence/latest/ and produce .ai/runs/$KILROY_RUN_ID/test-evidence/latest/manifest.json mapping each IT-* scenario ID to artifact paths/types and pass/fail status. UI scenarios require screenshot evidence; non-UI scenarios require text/structured evidence. Do not require a specific test framework — require artifact outcomes.
  • Failure-path evidence durability: scripts/validate-test.sh MUST emit best-effort evidence and a manifest entry even when tests fail (for example command exits non-zero). Missing evidence must be explicit in manifest fields so postmortem can diagnose incomplete capture as a finding.
  • Artifact verification gate: ensure verify_artifacts checks that manifest scenario IDs match the DoD integration scenarios and that each scenario satisfies required artifact types (for example screenshots for UI scenarios) before semantic review proceeds.
  1. Enforce routing guardrails.
  • Do not bypass actionable outcomes with unconditional pass-through edges.
  • For nodes with conditional edges, include one unconditional fallback edge.
  • Use only supported condition operators: =, !=, &&.
  • Use loop_restart=true only for context.failure_class=transient_infra.
  • The postmortem node MUST have at least three condition-keyed outbound edges covering distinct outcome classes (e.g. impl_repair, needs_replan, needs_toolchain or equivalents for the task domain) before the unconditional fallback. A postmortem with only one unconditional edge is invalid — it prevents recovery classification from routing differently and collapses all failure modes into a single path.
  • The unconditional fallback from postmortem MUST come last among its outbound edges.
  • Postmortem progress detection (required): The postmortem prompt MUST compare the current failing AC set against the previous iteration's failing AC set (stored in context key last_failing_acs). If the sets are identical — zero progress — the postmortem MUST route needs_replan, not impl_repair. The default impl_repair applies ONLY on the first occurrence of a failure. Identical repeated failures are a signal that the implementation approach is wrong, not that another repair pass will help. Add loop_restart_persist_keys="last_failing_acs" to the graph attrs so this key survives loop restarts.
  • Implement pre-exit verification (required on repair passes): The implement prompt MUST require that on any repair pass (when .ai/runs/$KILROY_RUN_ID/postmortem_latest.md or .ai/runs/$KILROY_RUN_ID/review_consensus.md exists), the node runs ./scripts/validate-build.sh and re-reads each targeted file to confirm the fix is present before exiting. Silent exit (auto-success) on a repair pass without self-verification is the primary cause of no-progress cycles.
  • Postmortem evidence usage (required): The postmortem prompt MUST read .ai/runs/$KILROY_RUN_ID/test-evidence/latest/manifest.json when present. For each failed or suspicious IT-* scenario, it MUST read listed artifacts that can materially improve diagnosis and cite artifact file paths in .ai/runs/$KILROY_RUN_ID/postmortem_latest.md. It may skip an artifact only with an explicit reason (missing/unreadable/not produced), which becomes a finding.
Show full SKILL.md (1,096 more words)Show less

Cycle Detection Contract (Required)

The engine tracks a map[signature]int where signature = nodeID|failureClass|normalizedReason. When the same (node, class, reason) tuple appears loop_restart_signature_limit times (default 3), the run aborts with "deterministic failure cycle detected." Understanding this mechanism is required to design pipelines that terminate correctly without false-positive aborts.

What counts toward the limit:

  • Only status=fail or status=retry outcomes enter the tracker. Custom non-fail statuses (more_work, impl_repair, needs_revision, etc.) do not — see the non-fail loop hole below.
  • Only failure_class=deterministic and failure_class=structural are tracked. transient_infra is excluded (it routes through the loop_restart circuit breaker instead). Any unrecognized or missing failure_class defaults to deterministic and is tracked.
  • Signatures never reset on success. If implement succeeds 10 times but verify_build fails with the same signature 5 times across those cycles, the breaker fires on the 5th hit. Routing through postmortem does not reset the map either — postmortem's own outcome is non-fail (impl_repair etc.) and is invisible to the tracker.

The failure_signature field stabilizes the reason component: By default, failure_reason is normalized (lowercase, hex→<hex>, digits→<n>, comma-spaces collapsed) to form the reason component of the signature. For any node that emits variable failure prose, set an explicit stable key:

json
{
  "status": "fail",
  "failure_reason": "cargo build returned 47 errors in src/lib.rs line 203...",
  "failure_signature": "compile_errors",
  "failure_class": "deterministic_agent_bug"
}

The failure_signature value replaces failure_reason as the reason component. This collapses all "compile error" variants into one counter regardless of error count, line numbers, or message wording.

Set failure_signature on:

  • All verify/check nodes whose failure enumerates file paths, AC IDs, or counts.
  • Merge/synthesis nodes whose failure lists missing files (use "missing_files" or "missing_design_docs").
  • Any node where the same root cause may appear with varying wording across retries.
  • Any node where you want to intentionally distinguish two different failure modes: use separate stable keys like "compile_errors" vs "missing_wasm_exports".

The non-fail loop_restart hole: loop_restart=true edges carrying a custom non-fail status (e.g. outcome=more_work) bypass the engine's signature cycle breaker entirely. The only protections are the LLM-side pass counter and max_restarts (default 50). For every non-fail loop_restart cycle, the prompting node MUST:

  1. Maintain a pass counter in a scratch file (e.g. .ai/runs/$KILROY_RUN_ID/work_pass.txt)
  2. Increment it on each execution
  3. Emit status=fail, failure_class=deterministic_agent_bug when the counter exceeds N (recommended: 5–10)

This converts the stall into a fail that the signature cycle breaker can then accumulate and trip on. This is the only engine-enforced backstop for more_work-style loops.

Setting loop_restart_signature_limit: The default is 3. For pipelines with a multi-pass repair loop (implement → verify → postmortem → implement), 3 may abort legitimate repair attempts. Recommended values:

  • Simple linear pipelines: default (3)
  • Pipelines with 1–2 repair passes expected: 4–5
  • Pipelines with postmortem → plan_work → implement repair cycles: 5
  • Always set explicitly in graph attrs so the intent is visible:
    graph [loop_restart_signature_limit=5, loop_restart_persist_keys="last_failing_acs", ...]
  1. Preserve authoritative text contracts.
  • If user explicitly provides goal/spec/DoD text, keep it verbatim (DOT-escape only).
  • expand_spec must include the full user input verbatim in a delimited block.
  1. Validate and repair before emit.
  • Verify no unresolved placeholders (DEFAULT_MODEL, etc.).
  • Run syntax + semantic validation loops, applying minimal fixes until clean.
  • A PostToolUse hook (skills/create-dotfile/hooks/validate-dot.sh) runs automatically after every Write, Edit, or MultiEdit to a .dot file. It calls kilroy attractor validate --graph and, if issues are found, signals Claude Code via exit 2 + stderr so the feedback is injected into your context. If feedback appears, repair the reported issues immediately and re-write the file. No manual validate invocation is needed during ingest sessions.
  • The hook requires kilroy in PATH. The KILROY_CLAUDE_PATH environment variable can override the binary location (full path or directory containing kilroy).

Non-Negotiable Guardrails

  • Programmatic output is DOT only (digraph ... }), no markdown fences or sentinel text.
  • shape=diamond nodes route outcomes only; do not attach execution prompts.
  • Keep prerequisite/tool gates real: route success/failure explicitly.
  • Add deterministic checks for explicit deliverable paths named in requirements.
  • Include a stable failure_signature on any node whose failure_reason may vary between retries — not just verify stages. Merge nodes listing missing files, plan nodes, analysis nodes, and any node whose error prose contains counts or filenames all need a stable key. See Cycle Detection Contract for the full guidance.
  • Never instruct any shape=box node to write status: retry. It is reserved by the attractor and triggers deterministic_failure_cycle_check, which downgrades to fail after N attempts. For iteration/revision loops, use a custom outcome: e.g. {"status": "needs_revision"} routed via condition="outcome=needs_revision" edge.
  • Never instruct review_consensus (or any review/gate node) to write status: fail for a rejection verdict. Write a custom outcome instead: e.g. {"status": "rejected"}. status: fail triggers failure processing and blocks goal_gate=true re-execution. Route rejection via condition="outcome=rejected".
  • Never write {"status":"success","outcome":"..."} in a status JSON — the outcome key is silently ignored by the runtime decoder; only status drives edge condition matching. Custom routing always uses the status field: {"status":"more_work"} matches condition="outcome=more_work", not {"status":"success","outcome":"more_work"}.
  • Never use DOT/Graphviz reserved keywords as node IDs: if, node, edge, graph, digraph, subgraph, strict. These cause routing failures — the DOT parser interprets them as language keywords rather than node names.
  • Every goal_gate=true node must declare its own retry_target pointing to the appropriate recovery node (typically postmortem). The graph-level retry_target is for transient node failures and is not an appropriate retry path for a failed review/gate consensus. Example: review_consensus [auto_status=true, goal_gate=true, retry_target="postmortem"].
  • Never embed runtime assumptions in verify tool_command fields. Package manager invocations (npm, cargo, pip, go build), directory paths (server/, client/, backend/), and build tool flags MUST NOT appear directly in a verify node's tool_command. The only permitted form is tool_command="sh scripts/validate-{stage}.sh". Violation causes deterministic cycle failures that postmortem cannot route out of: the script is hardcoded at ingest time, the implementation loop makes different structural choices at runtime, and every retry re-runs the same broken command against the same wrong structure until the cycle limit aborts the run.
  • Every sh scripts/validate-*.sh call MUST include a KILROY_VALIDATE_FAILURE fallback. When a validate script is missing, crashes before printing output, or returns non-zero without diagnostic text, postmortem receives no repair signal and cannot distinguish a missing script from a genuine build failure. The canonical tool_command form is:
    tool_command="sh scripts/validate-{stage}.sh || { echo 'KILROY_VALIDATE_FAILURE: validate-{stage}.sh missing or failed — postmortem must write scripts/validate-{stage}.sh'; exit 1; }"
    Within each scripts/validate-{stage}.sh authored by implementation nodes, include a POSIX sh failure trap as the first executable line:
    sh
    #!/bin/sh
    set -e
    trap 'echo "KILROY_VALIDATE_FAILURE: validate-{stage}.sh crashed at line $LINENO — postmortem must repair scripts/validate-{stage}.sh"' EXIT
    # ... stage-specific checks ...
    trap - EXIT
    The KILROY_VALIDATE_FAILURE: prefix is the linter-enforced token. The validator rule validate_script_failure_contract fires a warning when sh scripts/validate-*.sh appears in tool_command without this token.
  • Never treat verify_artifacts as optional when a DoD defines test evidence. If .ai/runs/$KILROY_RUN_ID/test-evidence/latest/manifest.json is missing, scenario IDs are incomplete, or required artifact types are absent, route to failure/postmortem with a stable failure_signature (for example missing_test_evidence) instead of proceeding.

References

  • docs/strongdm/attractor/ingestor-spec.md
  • docs/strongdm/attractor/attractor-spec.md
  • docs/strongdm/attractor/coding-agent-loop-spec.md
  • skills/create-dotfile/reference_template.dot
  • skills/create-dotfile/preferences.yaml
  • skills/shared/model_fallbacks.yaml
  • internal/attractor/modeldb/pinned/openrouter_models.json
  • internal/attractor/modeldb/manual_models.yaml

© danshapiro, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 4 other files in skills/create-dotfile of danshapiro/kilroy.

  • SKILL.md
  • hooks/validate-dot.sh
  • hooks/validate-dot.test.sh
  • preferences.yaml
  • reference_template.dot

Open the folder on GitHubat commit b55fb0f

Compare with similar skills

Create Dotfile next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Create Dotfile compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Create Dotfile this skilldanshapiro/kilroy221—~6.4kAutomated safety check: PassMIT
ObliteratusRedWoodOG/Hermes-Desktop1776 repos~3.8kAutomated safety check: PassMIT
Aisafetyhotwuyoscar/AISafetyHot-Hub175—~1.2kAutomated safety check: PassCustom licence
Lemonade Router Builderamd/skills395—~4kAutomated safety check: PassMIT
Persona Designkangarooking/system-prompt-skills2051 repos~956Automated safety check: PassMIT
Execution Guardrailsmrtooher/fable-mode870—~1kAutomated safety check: PassNone

Similar skills

  • Obliteratus

    RedWoodOG/Hermes-Desktop

    Remove refusal behaviors from open-weight LLMs using OBLITERATUS — mechanistic interpretability techniques (diff-in-means, SVD, whitened SVD, LEACE, SAE decomposition, etc.) to excise guardrails…

    177 GitHub starsUsed in 6 repos~3.8k tokens
    AI & LLM EngineeringAuto-check passed
  • Aisafetyhot

    wuyoscar/AISafetyHot-Hub

    Read AI Safety HOT daily digests, search recent AI safety research and incidents, and follow current hot topics.

    175 GitHub stars~1.2k tokensUpdated today
    AI & LLM EngineeringAuto-check passed
  • Turns a natural-language description of routing intent into a valid Lemonade collection.router policy JSON.

    395 GitHub stars~4k tokensUpdated today
    AI & LLM EngineeringAuto-check passed
  • Persona Design

    kangarooking/system-prompt-skills

    当需要为 AI 产品定义核心身份、角色声明和能力边界时调用此 skill。典型场景包括:设计新 AI 产品的 system prompt 首段、为不同场景创建差异化角色(如教学助手 vs 编程代理)、重新定义 AI 与用户的关系框架。

    205 GitHub starsUsed in 1 repo~956 tokens
    AI & LLM EngineeringAuto-check passed
  • Execution Guardrails

    mrtooher/fable-mode

    Always-on operational guardrails, model-independent. An agent skill from mrtooher/fable-mode.

    870 GitHub stars~1k tokensUpdated 1 mo ago
    AI & LLM EngineeringAuto-check passed
  • Writing Eval Scenarios

    open-bias/open-bias

    Guide for writing eval conversation JSONs and running them through policy engines

    143 GitHub stars~1.5k tokensUpdated 4 mo ago
    AI & LLM EngineeringAuto-check passed

More from danshapiro/kilroy

  • Build Dod

    danshapiro/kilroy

    A skill your agent uses when converting a spec, requirements document, or goal statement into a Definition of Done with acceptance criteria and integration test scenarios

    221 GitHub stars~2.5k tokensUpdated 5 mo ago
    Auto-check passed
  • Create Runfile

    danshapiro/kilroy

    A skill your agent uses when authoring or repairing Kilroy run config YAML/JSON files, including DOT-to-provider backend alignment and runtime policy defaults.

    221 GitHub stars~1.4k tokensUpdated 5 mo ago
    Auto-check: notes
  • Release Kilroy

    danshapiro/kilroy

    A skill your agent uses when preparing a Kilroy release — writing release notes, tagging, and publishing via goreleaser on GitHub.

    221 GitHub stars~2k tokensUpdated 5 mo ago
    Auto-check passed
  • Investigating Kilroy Runs

    danshapiro/kilroy

    To diagnose active, stuck, or failed Kilroy Attractor runs, inspect run artifacts (manifest.json, live.json, checkpoint.json, final.json, progress.ndjson), resolve run IDs/log roots, identify…

    221 GitHub stars~3.1k tokensUpdated 5 mo ago
    Auto-check passed
  • Starting A Project

    danshapiro/kilroy

    A skill your agent uses when bootstrapping a new project repository for Kilroy Attractor from a clean directory using existing spec, DoD, graph, and run config artifacts.

    221 GitHub stars~498 tokensUpdated 5 mo ago
    Auto-check passed
  • Using Kilroy

    danshapiro/kilroy

    Operate Kilroy Attractor pipelines end-to-end: ingest English requirements into DOT graphs, validate graph semantics, run and resume pipelines with run config files, configure provider backends…

    221 GitHub stars~4.3k tokensUpdated 5 mo ago
    Auto-check passed

Questions about Create Dotfile

What does Create Dotfile do?

A skill your agent uses when authoring or repairing Kilroy Attractor DOT graphs from requirements, with template-first topology, routing guardrails, and validator-clean output. Create Dotfile is an agent skill from danshapiro/kilroy. Use when authoring or repairing Kilroy Attractor DOT graphs from requirements, with template-first topology, routing guardrails, and validator-clean output.

When should I use Create Dotfile?

Create Dotfile fits situations like: repairing Kilroy Attractor DOT graphs from requirements; with template-first topology; routing guardrails; validator-clean output.

How do I install Create Dotfile in Claude Code?

Run `npx skills add danshapiro/kilroy --skill create-dotfile -a claude-code`. Or copy the skill folder (skills/create-dotfile in danshapiro/kilroy) into .claude/skills/create-dotfile in your project. Claude Code loads it when a task matches its description.

How do I install Create Dotfile in Codex?

Run `npx skills add danshapiro/kilroy --skill create-dotfile -a codex`. Or copy the skill folder (skills/create-dotfile in danshapiro/kilroy) into .agents/skills/create-dotfile in your project. Codex loads it when a task matches its description.

Can I use Create Dotfile in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add danshapiro/kilroy --skill create-dotfile -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/create-dotfile, .gemini/skills/create-dotfile, .github/skills/create-dotfile and .opencode/skills/create-dotfile in your project.

What does Create Dotfile need to run?

Going by SKILL.md and its folder, Create Dotfile needs a shell for the scripts in its folder and the command-line tools its instructions call (sh, git, playwright, npm and go). Our summary lists: A Bash shell.

Does Create Dotfile access the network?

SKILL.md contains no URLs. Its commands use git and npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Create Dotfile safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Create Dotfile use?

Create Dotfile is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Create Dotfile use?

About 6.4k tokens (SKILL.md is roughly 25k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Create Dotfile?

Skills that share tags, products or a category with Create Dotfile: Obliteratus (RedWoodOG/Hermes-Desktop, 177 stars), Aisafetyhot (wuyoscar/AISafetyHot-Hub, 175 stars), Lemonade Router Builder (amd/skills, 395 stars) and Persona Design (kangarooking/system-prompt-skills, 205 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Create Dotfile?

danshapiro (a GitHub user) maintains it in danshapiro/kilroy, which has 221 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on April 27, 2026.

Source: danshapiro/kilroy on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.