{
  "name": "rootly — 3 hooks",
  "slug": "source-hooks-237e0462e2dfed676856eed6",
  "type": "hooks",
  "category": "developer-tools",
  "example": false,
  "evidence_state": "pinned_source_listing",
  "stamp": "Pinned source listing — machine-checked",
  "summary": "Pinned source declarations and file hashes were listed.",
  "outcome": "Listed 3 hook declarations. Ran 39 git commands; each one's exit status and output hash is in commands.json. Scope: acquisition and static inspection.",
  "rule_results": [
    "The retained source tree matches its acquisition manifest.",
    "Declared hook names (listing.json): SessionStart; PreToolUse; PreToolUse"
  ],
  "task": "What declarations and files are present in this pinned source?",
  "setup": "Git blob acquisition followed by static source inspection.",
  "limitations": "Scope: acquisition and static inspection. Command results: commands.json.",
  "source_url": "https://github.com/Rootly-AI-Labs/rootly-claude-plugin.git",
  "documentation_url": "https://github.com/Rootly-AI-Labs/rootly-claude-plugin.git",
  "commit": "65832aa6ff7a7b39c6bd64899a7a64646e3948ed",
  "tree_sha256": "57e7f53ba52563b4c1c97429d71df4fc85a57dfe73b7137d0b10dd22aed77fcd",
  "file_sha256": {
    ".claude-plugin/marketplace.json": "0c64b1c5a48b8a1a332d0c351c5ce84b5a672c545b3873cdbec1e57238ced63a",
    ".claude-plugin/plugin.json": "00fd123ced7de3f2970626d007bb54ca1fb7ebb06e02f5789ac2e73bcdc8ee68",
    ".gitignore": "ea5f64c2e8cd86bb97321feda7a6501efe19135acedba368a9627eca8c2158c9",
    ".mcp.json": "c949f604ddfe2640381643d81e2266fbfd24d6e7d89b7fd6af1b0cef720db6bd",
    "ARCHITECTURE.md": "62c7f3f0fb77c1aa71eb52aabb31d807eb838d50928aad848b2ea3a573cdcdce",
    "CHANGELOG.md": "742e0f758178a1583df5e29f63004a1643f528c5080849f19d44a729d83657ab",
    "LICENSE": "fdd380d78d9c7d2f4c0b46c39d13fad47e552a1e7529fe2bcca0f9dbe14704a7",
    "README.md": "ee21246d2c00e7b127f4602c28f324a1249b75f9220a43e5d502708d88fc7f0a",
    "agents/deploy-guardian.md": "a24f993d8401d1898e92974b65c8b3496e7c72971e338e855683941f8361c3b0",
    "agents/incident-investigator.md": "29e715a0a84baf68a23b6e4b3a2d8d1ffd33e545ebc975e88f25128e415c2095",
    "agents/retro-analyst.md": "a6530ec8c8e7448965c09518f2089ecc2db4593a105b7d7de5cd3c3246d73786",
    "assets/logo.png": "5c683651ae6ebf90e799eefd3e79b089511d4fa8e14514b7426e997c03581491",
    "hooks/hooks.json": "007116c414c59ccba773b590cb5f126e3b862a1af3241b135c3268df1690a029",
    "scripts/check-active-incidents.sh": "85d8fc637d4279e341c78fdc832e74a0516eb05a99487e49d2417b6a154bc625",
    "scripts/register-deploy.sh": "89f8377811301f3aee287f11e2778e30edc6c9e774b2f246d58994f43b38d9ec",
    "scripts/validate-token.sh": "2bdc10310eb0419c5f55bb963a83ed7de059f0fec429ba27c20db2c672f46ab8",
    "skills/action/SKILL.md": "b67a346478dc33586a0d2d620b040acb381ecfe554b474596f6f6567527bbc1d",
    "skills/alert/SKILL.md": "0749fd100667c16c7509d9fe3a7303e1052540da12f886985e0647df64065ffe",
    "skills/announce/SKILL.md": "51c8467f1020fbc7ef175aa18243f3c3093f79530834edba2aa5117b649d7f0f",
    "skills/ask/SKILL.md": "1cf818dd5e7f744ec63ffc8862e7dee2ee53e0e08fe4adb74d7ea0b9122a3cd8",
    "skills/brief/SKILL.md": "c68ef7a6c97869744138fc7d7593b2d8b5e7aff724d4ee8113a190b03c476af0",
    "skills/cover/SKILL.md": "9437fb920231d9dfdc66f6c888df4bfe2533d330b9c16be443f845d9252f21cd",
    "skills/deploy-check/SKILL.md": "f93756bd8d26f9f221ff1124092329a0170db66f53dd91ec9a20059e7a5dbb78",
    "skills/handoff/SKILL.md": "cc0f9e8cb99391dd12b707b45d1a168e588097a12cd173d0c9cd1a2f3f249d9b",
    "skills/lookup/SKILL.md": "88d4f004bc66a3756ff9fb866936d48b8042fc39ca15298c9ad7d5a8714041b7",
    "skills/my/SKILL.md": "4674d3cf5e2468d8cdb5a477de353746a07d66b8ec0a3858f5f9aad6cf979cdc",
    "skills/oncall/SKILL.md": "55e998cfeaf1cec9f1e9b0c9c42a4cfb1ceb72bb3090ac86c1bdc80eb7f0fb13",
    "skills/respond/SKILL.md": "066d3fb7a7a3b0e334138001be5f33c009db31cb769b3fe73883363d3e1831b6",
    "skills/retro/SKILL.md": "fcd729a4c54a4b542ed849a47b51eabe07b7024ddffeb899aced34658cb3a072",
    "skills/setup/SKILL.md": "4bbbe15bc3678a81541c5b50115295992cc65c4c7791190ea191b37a1817cf2d",
    "skills/status/SKILL.md": "64a84d9b49e2eb0f98de9989ad3a9c4d3e27a6a43e74b9c934f4a64f7309fdcd",
    "skills/swap/SKILL.md": "f596572840d218ee61bca793de7046688a22b8ed08a39e86885204b4b1e828e3",
    "skills/test/SKILL.md": "bddd8b031b56a934f04797ee4523cc8efda87a8305c90be476a5facf36af6faf",
    "skills/trend/SKILL.md": "23c35da19e65fce9bdc0d53e9ed9910651a9912db812affb61a3524cb735c462"
  },
  "lockfiles": [
    "LOCK.json"
  ],
  "utc_date": "2026-10-19T15:16:13Z",
  "source_date": "2026-10-16",
  "discovered_date": "2026-10-16",
  "retested_date": "2026-10-19",
  "reviewed_date": "2026-10-19",
  "published_date": "2026-10-19",
  "modified_date": "2026-10-19",
  "reviewer": "machine pipeline",
  "harness_version": "toolwitness harness at commit 11dde7217ae6f8e4ac4d18a6380b18ba01450122",
  "claude_code_version": "Not applicable: static source inspection (commands.json).",
  "model_id": "Not applicable: static source inspection (commands.json).",
  "scanner_version": "Not applicable: static source inspection.",
  "rulepack_version": "Not applicable: static source inspection.",
  "agents": [],
  "disclaimer": "This record lists declarations and file hashes from a pinned source tree. Git command results from acquisition and static inspection are retained in commands.json. Scope: acquisition and static inspection. It is not a security or quality verdict. Changed bytes are outside this record.",
  "commands": [
    "Ran 39 git commands; each one's exit status and output hash is in commands.json. Scope: acquisition and static inspection."
  ],
  "prompt_list": [
    "Not applicable: static source inspection (commands.json)."
  ],
  "history": [
    "2026-10-19T15:16:13Z: pinned source inspection"
  ],
  "application": {
    "name": "rootly — 3 hooks",
    "softwareVersion": "65832aa6ff7a7b39c6bd64899a7a64646e3948ed",
    "applicationCategory": "DeveloperApplication",
    "operatingSystem": "Not exercised"
  },
  "artifacts": {
    "transcript": "Ran 39 git commands; each one's exit status and output hash is in commands.json. Scope: acquisition and static inspection.",
    "sinkhole_log": "Not applicable: static source inspection (commands.json).",
    "canary_log": "Not applicable: static source inspection (commands.json).",
    "scanner_output": "Not applicable: static source inspection (commands.json).",
    "normalized_text": "{\n  \"listing\": {\n    \"skills\": [\n      {\n        \"path\": \"skills/action/SKILL.md\",\n        \"name\": \"action\",\n        \"description\": \"Manage incident action items from the terminal. Subcommands - list (default - your open action items) or add <incident> \\\"<summary>\\\" (create one on an incident). Use to capture follow-ups during or after an incident without opening the Rootly UI.\",\n        \"files\": {\n          \"skills/action/SKILL.md\": \"b67a346478dc33586a0d2d620b040acb381ecfe554b474596f6f6567527bbc1d\"\n        }\n      },\n      {\n        \"path\": \"skills/alert/SKILL.md\",\n        \"name\": \"alert\",\n        \"description\": \"Triage a Rootly alert by short ID. Pulls the alert record, its event timeline, related alerts in the same group, and any incident the alert is attached to. Use when a page comes in and you want context before opening Rootly.\",\n        \"files\": {\n          \"skills/alert/SKILL.md\": \"0749fd100667c16c7509d9fe3a7303e1052540da12f886985e0647df64065ffe\"\n        }\n      },\n      {\n        \"path\": \"skills/announce/SKILL.md\",\n        \"name\": \"announce\",\n        \"description\": \"Draft a stakeholder-facing status update for an active incident, then post it after explicit confirmation. Useful for incident commanders pushing public-status-page or internal updates without opening the Rootly UI. Write action - never posts without confirming.\",\n        \"files\": {\n          \"skills/announce/SKILL.md\": \"51c8467f1020fbc7ef175aa18243f3c3093f79530834edba2aa5117b649d7f0f\"\n        }\n      },\n      {\n        \"path\": \"skills/ask/SKILL.md\",\n        \"name\": \"ask\",\n        \"description\": \"Ask natural language questions about incidents, on-call, services, and reliability data. Translates your question into Rootly API calls and returns structured answers.\",\n        \"files\": {\n          \"skills/ask/SKILL.md\": \"1cf818dd5e7f744ec63ffc8862e7dee2ee53e0e08fe4adb74d7ea0b9122a3cd8\"\n        }\n      },\n      {\n        \"path\": \"skills/brief/SKILL.md\",\n        \"name\": \"brief\",\n        \"description\": \"Generate a concise stakeholder brief for an incident. Creates executive summary with key details, impact, timeline, and current status.\",\n        \"files\": {\n          \"skills/brief/SKILL.md\": \"c68ef7a6c97869744138fc7d7593b2d8b5e7aff724d4ee8113a190b03c476af0\"\n        }\n      },\n      {\n        \"path\": \"skills/cover/SKILL.md\",\n        \"name\": \"cover\",\n        \"description\": \"Offer to cover someone else's on-call shift. Lists upcoming shifts on a team or schedule and creates an override placing you on the chosen one after explicit confirmation. Write action - never executes without confirming.\",\n        \"files\": {\n          \"skills/cover/SKILL.md\": \"9437fb920231d9dfdc66f6c888df4bfe2533d330b9c16be443f845d9252f21cd\"\n        }\n      },\n      {\n        \"path\": \"skills/deploy-check/SKILL.md\",\n        \"name\": \"deploy-check\",\n        \"description\": \"[experimental] Evaluate deployment risk by analyzing code changes against incident history, active incidents, and on-call readiness. Forked-subagent flow may not have MCP access in all Claude Code contexts.\",\n        \"files\": {\n          \"skills/deploy-check/SKILL.md\": \"f93756bd8d26f9f221ff1124092329a0170db66f53dd91ec9a20059e7a5dbb78\"\n        }\n      },\n      {\n        \"path\": \"skills/handoff/SKILL.md\",\n        \"name\": \"handoff\",\n        \"description\": \"Prepare an incident or on-call handoff document. Creates structured summary for shift changes or incident commander transitions.\",\n        \"files\": {\n          \"skills/handoff/SKILL.md\": \"cc0f9e8cb99391dd12b707b45d1a168e588097a12cd173d0c9cd1a2f3f249d9b\"\n        }\n      },\n      {\n        \"path\": \"skills/lookup/SKILL.md\",\n        \"name\": \"lookup\",\n        \"description\": \"Look up a service, team, or catalog entity in Rootly. Returns owner, on-call, recent reliability, dependencies, and any active incidents. Use when something breaks and the first question is who owns this.\",\n        \"files\": {\n          \"skills/lookup/SKILL.md\": \"88d4f004bc66a3756ff9fb866936d48b8042fc39ca15298c9ad7d5a8714041b7\"\n        }\n      },\n      {\n        \"path\": \"skills/my/SKILL.md\",\n        \"name\": \"my\",\n        \"description\": \"Personal Rootly dashboard. Shows your open action items, your active incidents (where you're a responder), and your upcoming on-call shifts. Use to start the day or to context-switch back into incident work.\",\n        \"files\": {\n          \"skills/my/SKILL.md\": \"4674d3cf5e2468d8cdb5a477de353746a07d66b8ec0a3858f5f9aad6cf979cdc\"\n        }\n      },\n      {\n        \"path\": \"skills/oncall/SKILL.md\",\n        \"name\": \"oncall\",\n        \"description\": \"Show current on-call status, shift metrics, and health indicators for your team. Use to check who's on-call, handoff context, or on-call workload.\",\n        \"files\": {\n          \"skills/oncall/SKILL.md\": \"55e998cfeaf1cec9f1e9b0c9c42a4cfb1ceb72bb3090ac86c1bdc80eb7f0fb13\"\n        }\n      },\n      {\n        \"path\": \"skills/respond/SKILL.md\",\n        \"name\": \"respond\",\n        \"description\": \"[experimental] Investigate and respond to a production incident. Pulls context, finds similar past incidents, suggests solutions, and enables coordination. Forked-subagent flow may not have MCP access in all Claude Code contexts -- prefer /rootly:status + /rootly:brief for now.\",\n        \"files\": {\n          \"skills/respond/SKILL.md\": \"066d3fb7a7a3b0e334138001be5f33c009db31cb769b3fe73883363d3e1831b6\"\n        }\n      },\n      {\n        \"path\": \"skills/retro/SKILL.md\",\n        \"name\": \"retro\",\n        \"description\": \"[experimental] Generate a structured post-incident retrospective from incident data. Forked-subagent flow may not have MCP access in all Claude Code contexts.\",\n        \"files\": {\n          \"skills/retro/SKILL.md\": \"fcd729a4c54a4b542ed849a47b51eabe07b7024ddffeb899aced34658cb3a072\"\n        }\n      },\n      {\n        \"path\": \"skills/setup/SKILL.md\",\n        \"name\": \"setup\",\n        \"description\": \"Set up the Rootly plugin. Verifies MCP server connection via OAuth2 or API token and guides through configuration. Run this after installing the plugin.\",\n        \"files\": {\n          \"skills/setup/SKILL.md\": \"4bbbe15bc3678a81541c5b50115295992cc65c4c7791190ea191b37a1817cf2d\"\n        }\n      },\n      {\n        \"path\": \"skills/status/SKILL.md\",\n        \"name\": \"status\",\n        \"description\": \"Show a compact service health overview including active incidents by severity. Use for a quick health check of your services.\",\n        \"files\": {\n          \"skills/status/SKILL.md\": \"64a84d9b49e2eb0f98de9989ad3a9c4d3e27a6a43e74b9c934f4a64f7309fdcd\"\n        }\n      },\n      {\n        \"path\": \"skills/swap/SKILL.md\",\n        \"name\": \"swap\",\n        \"description\": \"Request someone to cover one of your upcoming on-call shifts. Lists your shifts, helps identify a candidate based on availability, and creates an override after explicit confirmation. Write action - never executes without confirming.\",\n        \"files\": {\n          \"skills/swap/SKILL.md\": \"f596572840d218ee61bca793de7046688a22b8ed08a39e86885204b4b1e828e3\"\n        }\n      },\n      {\n        \"path\": \"skills/test/SKILL.md\",\n        \"name\": \"test\",\n        \"description\": \"Simple test skill\",\n        \"files\": {\n          \"skills/test/SKILL.md\": \"bddd8b031b56a934f04797ee4523cc8efda87a8305c90be476a5facf36af6faf\"\n        }\n      },\n      {\n        \"path\": \"skills/trend/SKILL.md\",\n        \"name\": \"trend\",\n        \"description\": \"Reliability trend summary for a service, team, or the whole org. Reports incident volume, severity mix, and MTTR direction over a window (default 30 days). Use for standups, 1-on-1s, or quarterly reviews.\",\n        \"files\": {\n          \"skills/trend/SKILL.md\": \"23c35da19e65fce9bdc0d53e9ed9910651a9912db812affb61a3524cb735c462\"\n        }\n      }\n    ],\n    \"hooks\": [\n      {\n        \"path\": \"hooks/hooks.json\",\n        \"sha256\": \"007116c414c59ccba773b590cb5f126e3b862a1af3241b135c3268df1690a029\",\n        \"event\": \"SessionStart\",\n        \"matcher\": null,\n        \"declaration\": {\n          \"type\": \"command\",\n          \"command\": \"${CLAUDE_PLUGIN_ROOT}/scripts/validate-token.sh\"\n        },\n        \"executed\": false\n      },\n      {\n        \"path\": \"hooks/hooks.json\",\n        \"sha256\": \"007116c414c59ccba773b590cb5f126e3b862a1af3241b135c3268df1690a029\",\n        \"event\": \"PreToolUse\",\n        \"matcher\": \"Bash\",\n        \"declaration\": {\n          \"type\": \"command\",\n          \"if\": \"Bash(git commit *)\",\n          \"command\": \"${CLAUDE_PLUGIN_ROOT}/scripts/check-active-incidents.sh\"\n        },\n        \"executed\": false\n      },\n      {\n        \"path\": \"hooks/hooks.json\",\n        \"sha256\": \"007116c414c59ccba773b590cb5f126e3b862a1af3241b135c3268df1690a029\",\n        \"event\": \"PreToolUse\",\n        \"matcher\": \"Bash\",\n        \"declaration\": {\n          \"type\": \"command\",\n          \"if\": \"Bash(git push *)\",\n          \"command\": \"${CLAUDE_PLUGIN_ROOT}/scripts/check-active-incidents.sh\"\n        },\n        \"executed\": false\n      }\n    ],\n    \"executions\": []\n  }\n}"
  },
  "review_input": {
    "identity_artifact": "identity.json",
    "evidence_sha256": {
      "LOCK.json": "30498f68c3f8c118ca5e261b2be4c88c7b808847bf0839e1989e519b02108fee",
      "commands.json": "da899b4cb34c4d0f2488c28cddb93ef0aef52c3674bbc025948fb2ac82e0eb1d",
      "complete.json": "91b504b43905fdc009504d516c45eea831f39a1995b9e7d69987c9756c936d6f",
      "identity.json": "1b467bbf9334f955babc2a0da8512c3302b3f8b6c31393070aac8434a96346a8",
      "listing.json": "22419079069160f0e296b213dce059bce51053bd03ca0fcfcf5eab5355723b15",
      "selection.json": "41766fd4a9c6175d70545cb5ea218f02b12fe89c6528308986313c43799abc62"
    },
    "claims": [
      {
        "id": "acquired",
        "field": "summary",
        "text": "Pinned source declarations and file hashes were listed.",
        "sources": [
          "LOCK.json",
          "listing.json",
          "commands.json"
        ]
      },
      {
        "id": "listed",
        "field": "outcome",
        "text": "Listed 3 hook declarations. Ran 39 git commands; each one's exit status and output hash is in commands.json. Scope: acquisition and static inspection.",
        "sources": [
          "LOCK.json",
          "listing.json",
          "commands.json"
        ]
      },
      {
        "id": "tree",
        "field": "rule_results.0",
        "text": "The retained source tree matches its acquisition manifest.",
        "sources": [
          "LOCK.json",
          "listing.json",
          "commands.json"
        ]
      },
      {
        "id": "declared",
        "field": "rule_results.1",
        "text": "Declared hook names (listing.json): SessionStart; PreToolUse; PreToolUse",
        "sources": [
          "LOCK.json",
          "listing.json",
          "commands.json"
        ]
      }
    ]
  },
  "review": {
    "kind": "machine-checked",
    "date": "2026-10-19",
    "reviewed_sha256": "0e467ef0466c23ca05c8944592ddcb11fc0f102849e72172d6ce41763ef1f916",
    "gates": "787c61990d24e8fce9ef5e7dbde45289a354cf8d811c12fe19cf56f9f923d2bf",
    "codex": "3286b645bcae8791189e6f01220d53699dce4ee471998010bcbda491b04e7360",
    "grok": "523d78d57c9a9c867e7f59bb3506dcff2611a16e8b0cf810da37c6bb6a174698",
    "summary": "Deterministic gates passed; every claim rebuilt from evidence with a reviewed template; Grok reported no standing refutation."
  }
}
