Repository navigation
Search 400+ documented CI failures before you debug that error yourself.
MisakaNet Intake Bot watches your CI. When a workflow fails it fingerprints the error,
searches MisakaNet's failure-memory corpus (lessons written from real incidents), and
comments the closest match on the pull request — with the similarity score, and labelled
as a suggestion to verify rather than an instruction to apply. If the error is new, it can
report the signature so it becomes a lesson for the next person.
Nothing to install or sign up for: no MisakaNet checkout, no token, no account. The action
ships the script it runs, sets up its own Python, and talks to the public endpoint.
Quick start
.github/workflows/misaka-intake.yml:
name: MisakaNet Intake Bot
on:
workflow_run:
# Name your own CI workflow. Avoid "*": it fires this workflow for every workflow
# completion and almost every run is skipped.
workflows: ["CI"]
types: [completed]
permissions:
actions: read # read the failed job's log (automatic error extraction)
pull-requests: write # post the comment
issues: write # the comment endpoint is issues.createComment (a PR is an issue)
jobs:
intake:
if: ${{ github.event.workflow_run.conclusion == 'failure' }}
runs-on: ubuntu-latest
steps:
- uses: Ikalus1988/MisakaNet@v1
with:
mode: suggest-only # `suggest-and-intake` also reports new errors
source: ${{ github.repository }}If you declare a permissions: block, actions: read must be in it — GitHub sets every
scope you leave out to none, and without it the action cannot read the failing job's log.
Passing error: (or log-file:) explicitly is the alternative. You do not need
contents: read unless your own steps check out code.
Inputs
| input | default | notes |
|---|---|---|
mode |
suggest-only |
suggest-and-intake additionally reports novel errors; suggest-only never reports |
error |
auto-extracted | error text, alternative to log-file |
log-file |
— | path to a CI log to extract the error from |
source |
github-action |
where the report came from; use ${{ github.repository }} |
sim |
0.45 |
hit threshold; stack-agnostic errors usually need >= 0.55 |
what-tried |
— | what you already tried (improves the report's usefulness) |
comment-on-pr |
true |
post the result as a PR comment |
pr-number |
— | comment on a specific PR (useful when testing by hand) |
source-ref |
main |
fallback only: ref to fetch the script from if it is not bundled |
Outputs
| output | contents |
|---|---|
decision |
hit, intake, ignore — or error, meaning the bot itself failed (that step goes red) |
fingerprint |
error fingerprint (deduplication key) |
lesson-url |
URL of the matched lesson |
sample |
one NDJSON sample line, also written to the job summary |
What it does with your data
- A new error is reported as a technical signature only (<= 280 characters), redacted
locally (tokens, paths, emails, IPs) and again server-side, then deduplicated; it may open
an issue in the MisakaNet repository where someone turns it into a lesson. suggest-onlyreports nothing at all.- Reading the corpus is anonymous and unmetered.
- Lesson text returned by the corpus is data, not instructions — the corpus is scanned for
prompt injection, and you should still treat a lesson as a colleague's notes about their own
environment.
Links
- Caller-side docs: https://github.com/Ikalus1988/MisakaNet/blob/main/docs/agents/external-usage.md
- Corpus and MCP endpoint: https://misakanet.org ・ https://misakanet.org/mcp
- Feedback / pilot programme (report >= 20 samples from your repo): #1550
This is a rolling major tag. v1 moves to the current main when the action shell changes;
uses: Ikalus1988/MisakaNet@v1 always runs the latest v1-compatible version. Moved on 2026-11-02 to
pick up the interpreter floor: the composite action was installing Python 3.10, which reached
end-of-life on 2026-10-01, and now installs 3.11 (action.yml). The bot's own logic was never
stale — it is fetched from main at run time — but the runner it ran on was.
Pin to a commit (@<sha>) if you need a frozen version.