krzysztofdudek/grain
Mine an architecture graph out of a repository that has none: grain propose reads the code and the full git history and writes node types, nodes, relations, cycles and the rules the repository's own code can prove, each one carrying the evidence that produced it and the count of places that already break it, as a tree Yggdrasil loads and accepts with one command. The agent-facing questions it has always answered still work from the same model: where <intent> (where such things live, what is expected there, exemplars to copy), what <term>, how <query>, check <file> (how a change sits against the local norm), review, completeness, status/report/rules, export, decide steer|boundary|waive — plus hooks that speak unbidden and an MCP server exposing every command as a tool to any MCP client. Statistical answers mined from syntax trees and git history; no model calls, no network, never blocks.
MCP servers
Declared configuration, as published in mcp.json. The directory shows indexed content; it never connects to or executes these servers.
{
"type": "stdio",
"command": "node",
"args": [
"-e",
"const f=process.argv[1];if(!require('fs').existsSync(f)){console.error('grain: '+f+' is not reachable from this environment (a host path inside a container?), so grain did not run');process.exit(0)}const r=require('child_process').spawnSync(process.execPath,process.argv.slice(1),{stdio:'inherit'});process.exit(r.status===null?1:r.status)",
"${PLUGIN_ROOT}/bin/grain-mcp.mjs"
]
}What this package declares
The files a client reads when it loads this plugin, exactly as this revision carries them.
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
"name": "grain",
"version": "6.1.0",
"description": "Mine an architecture graph out of a repository that has none: grain propose reads the code and the full git history and writes node types, nodes, relations, cycles and the rules the repository's own code can prove, each one carrying the evidence that produced it and the count of places that already break it, as a tree Yggdrasil loads and accepts with one command. The agent-facing questions it has always answered still work from the same model: where <intent> (where such things live, what is expected there, exemplars to copy), what <term>, how <query>, check <file> (how a change sits against the local norm), review, completeness, status/report/rules, export, decide steer|boundary|waive — plus hooks that speak unbidden and an MCP server exposing every command as a tool to any MCP client. Statistical answers mined from syntax trees and git history; no model calls, no network, never blocks.",
"author": {
"name": "Krzysztof Dudek",
"url": "https://github.com/krzysztofdudek"
},
"homepage": "https://github.com/krzysztofdudek/Grain",
"repository": "https://github.com/krzysztofdudek/Grain.git",
"license": "MIT",
"keywords": [
"conventions",
"codebase-analysis",
"tree-sitter",
"coding-agents",
"context-engineering",
"claude-code-plugin",
"repo-conventions"
],
"extensions": {
"com.openai": {
"hooks": "./hooks/codex-hooks.json",
"interface": {
"displayName": "grain"
}
}
}
}
What else this package ships
These files come with the package and this site does not publish them. They are listed so you know what is there before you install it.
- hooks.json
Client extensions
Data this package carries for particular clients. The directory lists the clients named and never reads what is addressed to them.
- com.github.copilotships a directory of files
- com.openai