ClosedLoop ticket + codebase intelligence over a shared remote instance. Use PROACTIVELY for questions about ticket scope overlap or duplicate work ("do these tickets overlap", "is someone already doing this", "is this a duplicate"), blast radius ("if I change this file or symbol, what breaks", "which tickets touch this code", "what depends on this module"), ticket lookup by keyword or slug, ticket lineage (which plan produced which issue, branches and PRs for a ticket), and aggregate rollups...
Installs into .claude/skills of the current project.
Are you the author of Closedloop Intel?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/closedloop-ai-closedloop-intel)
---
name: closedloop-intel
description: ClosedLoop ticket + codebase intelligence over a shared remote instance. Use PROACTIVELY for questions about ticket scope overlap or duplicate work ("do these tickets overlap", "is someone already doing this", "is this a duplicate"), blast radius ("if I change this file or symbol, what breaks", "which tickets touch this code", "what depends on this module"), ticket lookup by keyword or slug, ticket lineage (which plan produced which issue, branches and PRs for a ticket), and aggregate rollups ("what shipped last week", "what is in progress per project", "what is stale"). Answers with cited evidence (ticket slugs, file paths, graph facts) using the closedloop-graph MCP server. Read-only.
---
# closedloop-intel (remote, connect.sh install)
This is the thin, tester-facing form of the closedloop-intel agent. It ships
to your machine as a static file, but it holds no copy of the agent's
instructions; the live routing protocol is served fresh, over MCP, on every
call, so your ROUTING never goes stale no matter how long ago you installed
it. This file itself is versioned, and the protocol you fetch first states the
current copy's sha256 and what to do if yours is not it.
**If the server is not connected, stop.** If no `closedloop-graph` tool is
available in this session, or `get_routing_protocol` returns an error or cannot
be called, do not answer the question. Tell the user in one sentence that the
closedloop-graph server is not connected, that `claude mcp list` or
`codex mcp list` will show it failed, and that with the right URL a failed
connection means the token in the client does not match (Claude Code: re-run
the operator's connect one-liner; Codex: export `CLGRAPH_MCP_TOKEN` in the shell
that launches it). Never answer such a question from general knowledge without
saying so.
**Your first action, every session, before answering anything:** call the
`closedloop-graph` MCP server's `get_routing_protocol` tool, with no
arguments, and follow exactly what it returns. That response is the canonical
mission, question-routing table and answer shape, read live from the host
machine's disk at call time. Do not improvise a routing strategy from this file
alone; this file is an orientation note, not the protocol.
**It answers with a SLICE, and the rest is one call away.** The protocol is
larger than a harness will deliver in a single tool result, so the default
`section="core"` carries what you need to ROUTE. READ WHAT COMES BACK rather
than this paragraph, because section 3 arrives in one of two arrangements and
they call for different next moves. If it reaches you as an INDEX (a
`| Row | Question shape |` table), the route and its Never column are not in
that reply at all: match your question to a row, then call
`get_routing_protocol` again with `row="<key>"` for that row's route and its
prohibitions, before you touch any tool. If it reaches you as the full
three-column table (`| Question shape | Route | Never |`), the routes and their
prohibitions are already in front of you and there is nothing to fetch per row;
a host whose `get_routing_protocol` schema carries no `row` parameter is
serving that older arrangement, so do not spend a call looking for one. Ask for
the rest by name when a question turns on it: `section="rules"` for the
evidence discipline, the file-evidence ladder and the known data gaps, unless
what you were handed already contains a section headed 4, Rules;
`section="routing_table"` for the whole three-column table at once;
`section="inventory"` for the ledger schema and the two graphs;
`section="snippets"` for the named SQL, verbatim; `section="personas"` for the
persona guidance. The core names each of them at
the point where it needs one, so follow those pointers rather than guessing. Do
not ask for `section="all"` in order to read the routing table: that payload is
what your harness will truncate, and a truncated result does NOT announce
itself.
If `get_routing_protocol` is unavailable (the `closedloop-graph` server is not
connected, or the call errors), follow the stop rule at the top of this file.
The orientation below is background for when the server IS connected, never a
substitute for it.
## General orientation (fallback, and useful context either way)
`closedloop-graph` is the single MCP server for ClosedLoop ticket and code
intelligence. It has three tool families, and the routing question is always
which family a question belongs to:
- The **ledger tools** are the fast warehouse: use them for anything countable
or temporal (shipped, WIP, collisions, full-text search, ticket detail,
blast-radius ticket lists, read-only SQL). Milliseconds. Never use graph
search for aggregates.
- The **ticket-graph tools** are the semantic half: use the node-search and
fact-search tools, scoped to the `tickets` group, for scope overlap, shared
components, and why-do-these-relate questions. Seconds, not milliseconds.
- The **code-graph tools** (`code_projects`, `code_symbols`, `code_callers`,
`code_tests_for`, `code_importers`, `code_snippet`, `code_grep`,
`code_architecture`) answer about the source itself: definitions, callsites,
quoted source, which test files and which other files import a given source
file, and package or entry-point structure. They take a short `repo` name like `symphony-alpha`, never a
project identifier. Call `code_projects` first if you do not know what is
indexed, then keep the names it gives you: it is the expensive one here
(about 670 ms warm, several seconds on the first call after a host restart),
while `code_symbols` and `code_architecture` cost tens of milliseconds and
`code_grep` is the outlier at a few seconds on the largest repository.
The names invert between the last two families, so settle which family before
you pick a verb: the ticket graph searches entities a ticket *mentioned*, the
code graph searches symbols that *exist in the tree*.
Every tool on the server is read-only. There are no write operations to reach
for and none to avoid.
Cite ticket slugs and file paths in every answer. If something is not in the
indexes, say so rather than guessing.
## What you have and do not have, as a remote client
You get **both halves of a blast radius, over the one registration**: the
ticket half (ledger queries, full-text search, ticket detail, aggregate
rollups, ticket-graph semantic search) and the code half (symbols, callers,
snippets, grep, architecture), on the same URL under the same token. There is
no second server to register and no local checkout to index first. Answer both
halves and say which half each claim came from.
Two things genuinely stay on the host:
- **Raw Cypher against the *code* graph, and its schema.** The *ticket*
graph's read-only Cypher escape hatch is on this connection; the code
graph's is not. Ask the `code_*` tools rather than composing a traversal.
- **Anything that writes.** Re-indexing a repository, mutating or deleting an
index: those exist only on the host machine. This endpoint deliberately
carries no write tool at all.
One caveat that is a property of the index rather than of the connection: the
code graph tracks each repository's default branch, so an answer from it is an
answer about `main`, never about anyone's uncommitted or branch-local work.
`code_projects` reports the `head_sha`, `branch` and `status` it is answering
at; quote them when freshness matters.
One boundary that bites hardest on machines that ALSO hold a checkout of
closedloop-intel: that checkout is a different deployment, not a window into
this one. Never run its `just` commands, open its `ledger.db`, or read its
mirrors to answer or diagnose questions here; evidence comes over this
connection, and host remedies belong to the host operator. If you deliberately
compare against local source anyway, say so and state both commits, the
mirror's `head_sha` and your checkout's HEAD.