{
  "schema": "snappy-card/1",
  "skill": "snappy-nightshift",
  "tier": "public",
  "origin_tier": "base",
  "purpose": "One agent installs/drives/commits; crews build in worktrees and return",
  "verbs": [
    {
      "name": "bar",
      "args": [],
      "effect": "read",
      "firstCall": "npx tsx ~/.claude/skills/snappy-nightshift/api.ts bar"
    },
    {
      "name": "blocked",
      "args": [
        "lane-id",
        "failed",
        "tried-first",
        "tried-second",
        "unblock"
      ],
      "effect": "write-reversible",
      "firstCall": "npx tsx ~/.claude/skills/snappy-nightshift/api.ts blocked <lane-id> <failed> <tried-first> <tried-second> <unblock>"
    },
    {
      "name": "board",
      "args": [],
      "effect": "read",
      "firstCall": "npx tsx ~/.claude/skills/snappy-nightshift/api.ts board"
    },
    {
      "name": "log",
      "args": [],
      "effect": "read",
      "firstCall": "npx tsx ~/.claude/skills/snappy-nightshift/api.ts log"
    },
    {
      "name": "preflight",
      "args": [],
      "effect": "read",
      "firstCall": "npx tsx ~/.claude/skills/snappy-nightshift/api.ts preflight"
    },
    {
      "name": "reap",
      "args": [],
      "effect": "delete",
      "firstCall": "npx tsx ~/.claude/skills/snappy-nightshift/api.ts reap"
    },
    {
      "name": "report",
      "args": [],
      "effect": "read",
      "firstCall": "npx tsx ~/.claude/skills/snappy-nightshift/api.ts report"
    },
    {
      "name": "status",
      "args": [],
      "effect": "read",
      "firstCall": "npx tsx ~/.claude/skills/snappy-nightshift/api.ts status"
    }
  ],
  "faces": [],
  "agents": [],
  "uses": [],
  "used_by": [],
  "checks": {
    "pass": 37,
    "fail": 10,
    "defer": 14,
    "line": "37 of 47 checks pass",
    "failing": [
      {
        "id": 4,
        "rule": "Near-neighbour descriptions cross-reference each other",
        "says": "near neighbours not named: snappy-client-feisst, snappy-runner, snappy-specwatch"
      },
      {
        "id": 5,
        "rule": "Description is valid, third-person, and says what plus when",
        "says": "first/second person"
      },
      {
        "id": 8,
        "rule": "Skill body and reference graph stay within disclosure budgets",
        "says": "373 lines; ~6158 tokens"
      },
      {
        "id": 10,
        "rule": "One term names each concept",
        "says": "mixed synonym sets: endpoint/url/route/path"
      },
      {
        "id": 20,
        "rule": "Read and write are separate verbs",
        "says": "mode-changing args on: reap"
      },
      {
        "id": 31,
        "rule": "Refusals have outcome, code, message, and fix",
        "says": "refusals schema-checked for outcome/code/message/fix"
      },
      {
        "id": 32,
        "rule": "Refusals name a literal from the valid domain",
        "says": "refusals checked against contract literals"
      },
      {
        "id": 40,
        "rule": "Metadata, skill body, and resources follow three-level budgets",
        "says": "metadata ~247 tokens; body ~6158 tokens"
      },
      {
        "id": 55,
        "rule": "Eval scenarios are multi-call with ground truth",
        "says": "eval manifest missing"
      },
      {
        "id": 57,
        "rule": "Eval manifest contains a disjoint holdout",
        "says": "0 disjoint holdout scenario(s)"
      }
    ]
  },
  "coverage": null,
  "spec": null,
  "evals": null,
  "files": [
    "AGENTS.md",
    "SKILL.md",
    "api.ts",
    "refusals.test.ts"
  ],
  "total_size": 62697,
  "checksum": "sha256:127cd81aafdfc593eff9d6a8d91a8d1f950b4ca091da229c69347878a6cce1f8",
  "built_at": "2026-09-09T22:09:55.512Z",
  "openapi": {
    "openapi": "3.1.0",
    "info": {
      "title": "snappy-nightshift",
      "version": "0.0.0",
      "description": "The overnight orchestration operating system: one orchestrator drives a repo toward 100% all night with build crews in worktrees, batched install windows, cold-walker signatures, wake-up loops to a hard stop time, and the throughput discipline measured from the real 2026-08 runs (peak 33 commits/hour at 10-12 lanes). Use when Robert says: /snappy-nightshift, \\\"we need to do /snappy-nightshift relentless through the night\\\", \\\"push hard overnight to 10AM eastern\\\", \\\"keep going all night dont stop\\\", \\\"keep the cadence, keep the momentum high to 10AM eastern time\\\", \\\"make a prompt for the other ai to push hard overnight\\\", \\\"update your wake up loop to keep you on the highest momentum\\\", \\\"continue, launch the agents again, go back to the mission\\\", \\\"night run\\\". Triggers on: nightshift, night run, overnight, build crew, install window, wake-up loop, hard stop time. NOT the per-seat app dogfooding (see snappy-resident). NOT Mac-mini jcode lane dispatch (see snappy-jcode)."
    },
    "x-snappy-transport": "cli",
    "servers": [
      {
        "url": "npx tsx ~/.claude/skills/snappy-nightshift/api.ts",
        "description": "The hand itself. Every path is a verb word, every query or body key an argument."
      }
    ],
    "paths": {
      "/bar": {
        "get": {
          "operationId": "snappy_nightshift_bar",
          "summary": "snappy-nightshift bar",
          "x-snappy-effect": "read",
          "x-snappy-annotations": {
            "readOnlyHint": true,
            "destructiveHint": false,
            "idempotentHint": false,
            "openWorldHint": true
          },
          "parameters": [],
          "responses": {
            "200": {
              "description": "The verb's own answer, as printed by `--json`."
            }
          }
        }
      },
      "/blocked": {
        "post": {
          "operationId": "snappy_nightshift_blocked",
          "summary": "snappy-nightshift blocked",
          "x-snappy-effect": "write-reversible",
          "x-snappy-annotations": {
            "readOnlyHint": false,
            "destructiveHint": false,
            "idempotentHint": false,
            "openWorldHint": true
          },
          "requestBody": {
            "required": true,
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "lane-id": {
                      "type": "string",
                      "description": "Lane id the block is parked under",
                      "x-snappy-position": 0
                    },
                    "failed": {
                      "type": "string",
                      "description": "What failed, in one line",
                      "x-snappy-position": 1
                    },
                    "tried-first": {
                      "type": "string",
                      "description": "The first thing already tried",
                      "x-snappy-position": 2
                    },
                    "tried-second": {
                      "type": "string",
                      "description": "The second thing already tried",
                      "x-snappy-position": 3
                    },
                    "unblock": {
                      "type": "string",
                      "description": "What would unblock the lane",
                      "x-snappy-position": 4
                    }
                  },
                  "required": [
                    "lane-id",
                    "failed",
                    "tried-first",
                    "tried-second",
                    "unblock"
                  ]
                }
              }
            }
          },
          "responses": {
            "200": {
              "description": "The verb's own answer, as printed by `--json`."
            }
          }
        }
      },
      "/board": {
        "get": {
          "operationId": "snappy_nightshift_board",
          "summary": "snappy-nightshift board",
          "x-snappy-effect": "read",
          "x-snappy-annotations": {
            "readOnlyHint": true,
            "destructiveHint": false,
            "idempotentHint": false,
            "openWorldHint": true
          },
          "parameters": [],
          "responses": {
            "200": {
              "description": "The verb's own answer, as printed by `--json`."
            }
          }
        }
      },
      "/log": {
        "get": {
          "operationId": "snappy_nightshift_log",
          "summary": "snappy-nightshift log",
          "x-snappy-effect": "read",
          "x-snappy-annotations": {
            "readOnlyHint": true,
            "destructiveHint": false,
            "idempotentHint": false,
            "openWorldHint": true
          },
          "parameters": [],
          "responses": {
            "200": {
              "description": "The verb's own answer, as printed by `--json`."
            }
          }
        }
      },
      "/preflight": {
        "get": {
          "operationId": "snappy_nightshift_preflight",
          "summary": "snappy-nightshift preflight",
          "x-snappy-effect": "read",
          "x-snappy-annotations": {
            "readOnlyHint": true,
            "destructiveHint": false,
            "idempotentHint": false,
            "openWorldHint": true
          },
          "parameters": [],
          "responses": {
            "200": {
              "description": "The verb's own answer, as printed by `--json`."
            }
          }
        }
      },
      "/reap": {
        "post": {
          "operationId": "snappy_nightshift_reap",
          "summary": "snappy-nightshift reap",
          "x-snappy-effect": "delete",
          "x-snappy-annotations": {
            "readOnlyHint": false,
            "destructiveHint": true,
            "idempotentHint": false,
            "openWorldHint": true
          },
          "requestBody": {
            "required": false,
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "apply": {
                      "x-snappy-flag": "--apply"
                    }
                  }
                }
              }
            }
          },
          "responses": {
            "200": {
              "description": "The verb's own answer, as printed by `--json`."
            }
          }
        }
      },
      "/report": {
        "get": {
          "operationId": "snappy_nightshift_report",
          "summary": "snappy-nightshift report",
          "x-snappy-effect": "read",
          "x-snappy-annotations": {
            "readOnlyHint": true,
            "destructiveHint": false,
            "idempotentHint": false,
            "openWorldHint": true
          },
          "parameters": [],
          "responses": {
            "200": {
              "description": "The verb's own answer, as printed by `--json`."
            }
          }
        }
      },
      "/status": {
        "get": {
          "operationId": "snappy_nightshift_status",
          "summary": "snappy-nightshift status",
          "x-snappy-effect": "read",
          "x-snappy-annotations": {
            "readOnlyHint": true,
            "destructiveHint": false,
            "idempotentHint": false,
            "openWorldHint": true
          },
          "parameters": [],
          "responses": {
            "200": {
              "description": "The verb's own answer, as printed by `--json`."
            }
          }
        }
      }
    },
    "components": {
      "schemas": {
        "SnappyRefusal": {
          "type": "object",
          "required": [
            "outcome",
            "code",
            "message"
          ],
          "properties": {
            "outcome": {
              "type": "string",
              "const": "refused"
            },
            "code": {
              "type": "string",
              "description": "A row of the closed refusal table."
            },
            "message": {
              "type": "string"
            },
            "fix": {
              "type": "string"
            }
          }
        }
      }
    }
  }
}