← The evidence ledger
Evidence row 295230
Observed , by probe.mcp/1.
- Kind
- mcp.tools
- About
- endpoint eacf0b1c-a12f-4b67-9f5d-260cef8ec22b
- Recorded
- Previous row
- None: the first of its kind about this subject
- Body SHA-256
- 09733a79188661b3a76b0a112af337c994166d7c40fba3e6a08dda0fd29e7ad4
- Leaf
- 0xe1eebc1e837d2b444acc224d83a5450d40e2d88a247df3a9339225c33d876b59
What was observed
{
"count": 10,
"tools": [
{
"description": "Disclose what an agent Skill or worklore story CAN DO before you run it: a capability tier T0-T4 bound to a content sha256, with findings that carry file:line evidence, PLUS a separate list of behavioral red flags (prompt-injection / deception / exfiltration-intent / safety-bypass phrasings) for a human to review. This is blast-radius disclosure and triage, never a 'safe' verdict. Prefer a `url` over pasting a file: a skill on GitHub (github.com or raw.githubusercontent.com, up to 200 KB) needs no sign-in, and you do not have to copy the whole file into the call. Other URLs need a signed-in session. If you paste `text`, also pass `expected_sha256` (the file's sha256, e.g. `shasum -a 256 SKILL.md`): a copy that changed on the way is reported instead of scanned. `received` says exactly what was scanned.",
"inputSchema": {
"properties": {
"expected_sha256": {
"description": "sha256 (hex) of the file you mean, when you paste `text`. A mismatch is an error, not a scan.",
"type": "string"
},
"text": {
"description": "The skill/story text to scan.",
"type": "string"
},
"url": {
"description": "A URL to fetch and scan. GitHub URLs need no sign-in; a github.com/…/blob/… link works.",
"type": "string"
}
},
"type": "object"
},
"name": "check_capability"
},
{
"description": "Revise a worklore story the signed-in account PUBLISHED — only its author can edit it. Call get_story first, then show the human a before/after diff of your change and get their EXPLICIT approval before calling this; never edit on your own initiative. Send the COMPLETE revised story as `markdown` (frontmatter + '# title' + narrative + '## Reproduce this'), not a fragment. Keep the frontmatter `date` exactly as it is: it records when the work happened, and a revision never moves it. Say what kind of edit this is: 'rephrase' (same claims, better wording), 'addition' (new detail, nothing was wrong), or 'correction' (something in the story was WRONG — a step, a claim, a result). If anything was wrong, it is a correction: never hide a correction as a rephrase. A correction requires a one-line `note` saying what was wrong, and notifies everyone who reported reproducing the story. `source` optionally credits what prompted the revision (an https URL). The new text REPLACES the old (worklore keeps no copy of earlier text), while a record of this revision — when, what kind, the note — is appended to the story's public history.",
"inputSchema": {
"properties": {
"kind": {
"default": "rephrase",
"description": "rephrase (default) — same claims, reworded; addition — new detail, nothing was wrong; correction — something was wrong (requires `note`, notifies reproducers).",
"enum": [
"rephrase",
"addition",
"correction"
],
"type": "string"
},
"markdown": {
"description": "The complete revised story markdown, frontmatter included, with the original `date` unchanged.",
"type": "string"
},
"note": {
"description": "One line on what changed (max 500 chars). Required for a correction: what was wrong.",
"type": "string"
},
"slug": {
"description": "The slug of the story to revise (one the signed-in account wrote).",
"type": "string"
},
"source": {
"description": "Optional https URL crediting what prompted the revision (a comment, an issue, an article).",
"type": "string"
}
},
"required": [
"slug",
"markdown"
],
"type": "object"
},
"name": "edit_story"
},
{
"description": "The worklore keyword map: every story tag with its story count, in four editorial groups (tools and agents, building blocks, practices, off the clock), plus the stories under one keyword when you name it. Use it when the user asks what worklore has on a topic, or wants to browse rather than search. Clients that render MCP Apps show it as an interactive explorer (filter, pick a keyword, read a story into the chat); every client gets the same data as text. The same map is https://worklore.dev/ and each keyword is https://worklore.dev/t/<keyword>.",
"inputSchema": {
"properties": {
"group": {
"description": "Limit the list to one group by name (tools and agents | building blocks | practices | off the clock).",
"type": "string"
},
"keyword": {
"description": "One keyword (a story tag, e.g. oauth): its stories are returned, newest first.",
"type": "string"
},
"query": {
"description": "Filter the keyword list to names containing this text.",
"type": "string"
}
},
"type": "object"
},
"name": "explore_keywords"
},
{
"description": "Fetch one worklore story by slug — its full markdown (narrative + the 'Reproduce this' contract your agent would run) WITH its capability disclosure attached (tier + findings), so you see what it can do before applying it. Read the capability first; run check_capability on the live artifacts before executing. After you apply the story to the user's task, call report_reproduction with an honest result to record it.",
"inputSchema": {
"properties": {
"slug": {
"description": "The story slug (from search_stories / a worklore URL).",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_story"
},
{
"description": "Publish a NEW worklore story as the signed-in account. worklore stories are PUBLIC and honest, so before you call this you MUST show the human the complete draft — the title, the first-person narrative, and the 'Reproduce this' contract — and get their EXPLICIT approval. Never publish on your own initiative and never invent details. Provide the full story as `markdown` (frontmatter with title/date/tags/type/reproducible, then '# title', the narrative, then '## Reproduce this' with prerequisites/inputs/steps/verify) — call get_story on an existing story first to match the format — OR provide the structured fields title + narrative (+ reproduce, tags, type, stack) and the server assembles it. SANITIZE: no secrets, employer internals, client names, or private URLs. Returns the live URL and capability tier.",
"inputSchema": {
"properties": {
"markdown": {
"description": "The complete story markdown (frontmatter + '# title' + narrative + '## Reproduce this' contract). Preferred.",
"type": "string"
},
"narrative": {
"description": "First-person narrative, ~150-400 words, honest (used if no `markdown`).",
"type": "string"
},
"reproduce": {
"description": "The 'Reproduce this' contract body: prerequisites, inputs, ordered steps, verify.",
"type": "string"
},
"stack": {
"description": "Optional: the ecosystem this story is about.",
"type": "string"
},
"tags": {
"description": "3-6 lowercase kebab tags.",
"items": {
"type": "string"
},
"type": "array"
},
"title": {
"description": "Story title (used only if `markdown` is not given).",
"type": "string"
},
"type": {
"description": "success (default), fail, or proposal — a proposal is work the author believes is right but cannot prove yet, published to get evidence or review rather than to claim a result.",
"enum": [
"success",
"fail",
"proposal"
],
"type": "string"
},
"visibility": {
"description": "public (default) — anyone can read and reproduce it; private — only the author can, and it appears in no feed, search, badge or link. Ask the human which they want if the draft contains anything they may not want public.",
"enum": [
"public",
"private"
],
"type": "string"
}
},
"type": "object"
},
"name": "publish_story"
},
{
"description": "Record the result of a story's read-only 'Check if this applies to you' section, run in the user's own project (attributed to the signed-in account). Run ONLY that check — change nothing, apply no fix. First decide whether it applies at all: if the project does not match the check's preconditions, do NOT call this — 'not applicable' is never recorded. Otherwise report 'has_problem' or 'no_problem', honestly. One counted result per person per story; a later report replaces the earlier one. Only stories whose get_story result has has_check: true can be checked.",
"inputSchema": {
"properties": {
"note": {
"description": "Optional short note: the evidence (max 300 chars).",
"type": "string"
},
"result": {
"description": "What the check found in the user's project.",
"enum": [
"has_problem",
"no_problem"
],
"type": "string"
},
"slug": {
"description": "The story slug whose check you ran.",
"type": "string"
}
},
"required": [
"slug",
"result"
],
"type": "object"
},
"name": "report_check"
},
{
"description": "Call this right after you apply a worklore story's steps to the user's own task, to record the reproduction (attributed to the signed-in account). Use an honest result: 'worked', 'partial' (you produced the output but it isn't verified yet), or 'failed' — all are useful. One counted report per person per story; repeats are acknowledged, not doubled. Never report a story you did not apply.",
"inputSchema": {
"properties": {
"note": {
"description": "Short note (max 500 chars): which parts of the story applied to this project and which did not, plus what broke if anything. The author reads it to learn which paragraphs do work.",
"type": "string"
},
"result": {
"description": "How it honestly went.",
"enum": [
"worked",
"partial",
"failed"
],
"type": "string"
},
"slug": {
"description": "The story slug you reproduced.",
"type": "string"
}
},
"required": [
"slug",
"result"
],
"type": "object"
},
"name": "report_reproduction"
},
{
"description": "Search worklore stories by keyword across title, summary, tags and stack. Returns matches with their capability tier.",
"inputSchema": {
"properties": {
"query": {
"description": "Keywords (space-separated; all must match).",
"type": "string"
}
},
"type": "object"
},
"name": "search_stories"
},
{
"description": "Propose a revision of a worklore story written by SOMEONE ELSE, for its author to accept or decline — worklore's pull request. Use it when, while reproducing a story, a step turned out wrong, outdated or missing (a library changed, the docs caught up, a command no longer exists). Call get_story first, make the change in the COMPLETE markdown (frontmatter + '# title' + narrative + '## Reproduce this'; keep the frontmatter `date` exactly as it is), show the human a before/after diff and the rationale, and send it only with their EXPLICIT approval. The story does NOT change: the author is notified, reviews the diff, and either accepts it as a revision (the signed-in account is credited on the story) or declines it, in which case they may hand the text back as a draft of the signed-in account's own, adapted from theirs. One open suggestion per person per story; sending another replaces it. For the user's OWN story use edit_story instead.",
"inputSchema": {
"properties": {
"markdown": {
"description": "The complete story markdown as you propose it, frontmatter included, with the original `date` unchanged.",
"type": "string"
},
"rationale": {
"description": "One or two lines (max 500 chars): what was wrong or outdated, and what you changed. The author reads this first.",
"type": "string"
},
"slug": {
"description": "The slug of the story (by another author) to propose a revision of.",
"type": "string"
}
},
"required": [
"slug",
"markdown",
"rationale"
],
"type": "object"
},
"name": "suggest_edit"
},
{
"description": "Given a short description of the current project (stack, what you're building, recent problems), suggest up to 3 worklore stories worth reproducing here, with why each fits and its tier.",
"inputSchema": {
"properties": {
"context": {
"description": "Project context: stack, goal, recent TODOs/problems.",
"type": "string"
}
},
"required": [
"context"
],
"type": "object"
},
"name": "suggest_for_project"
}
]
}What the leaf hashes
{"body":"09733a79188661b3a76b0a112af337c994166d7c40fba3e6a08dda0fd29e7ad4","id":295230,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793050743072883,"prev":null,"subject":"eacf0b1c-a12f-4b67-9f5d-260cef8ec22b","subject_kind":"endpoint"}Proof
Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (296695 rows).
- 0xe1ef302b0314fef09b03754d8c9278d19a0d63a2ee98f8225c35cb2ebf691d98
- 0x6ec61f4e476af7b423eb45139910f2980996b0b4c1f503d9eb0ea41d4d4012cf
- 0x0e1ac7dcdf87ab774574ab931af26dc9f7f2035edee1c174c60f07409b99cdd0
- 0xd644f1f473c2bf4728c70abdc88bbcc5a7763839e5b6a05e3922491a4f2dbf89
- 0x6e52f4efa6d23619777d5e5eb74acd8c65b0385fc44a3ce9e05a5d5965b21802
- 0x6afbf2fc3dc1173f7bc87d868d442a18ff7086f82408c5210bfe1aefad3691e4
- 0xe4223ab417591887ea4f11dce71c8f3c50288139b076cf6a6f05820caae9bac1
- 0x36e26922e4044a7dd870215c0396050ed14b0f8d2265a2b0ede5a62690f7ab7a
- 0xe063f5fccc9cbc21acabf9481af1cf1a69302a8ff004733c8d05c188c56f3cbe
- 0x49d720e73d446e1def3567153233c121c2d3097da1088aec52da97cc45a1a260
- 0xce35ce45ef8f8ea3dfabeeed3d2069f34fb82c77d0d8f31e3429b7d6deb0a351
- 0x714c96bd488ccf4af927c8bc83397404f7f6f1b165b622d0e8216290209825e4
- 0x3fcdf7fa32ccefe771eb57ae3015142065d64e3ce732fea7d11b9a3c99dde44f
- 0x0b7541c75cc482a7134110311d7dbd02095d969ba21177de9b21a52a55981718
- 0x6dc40f983a3840a0ad927a9ca17f4ff1e3b649a6c735e2a09b140db7c2caf13b
- 0x703f95866af09c5e5d6ead7411e9a10f964a41a2aff64d4a55ff0053c023a023
- 0xd0651cb9bc8155eb52b5247d506e74b8a935057dc190ba52091702ac25ed3a40
- 0x9a9024edb5069d88a324facb310a5ce8e495214bbaa968f077bede437390194f
- 0x9b9ce5b74b9bab5121612ef6b64920a8d453cbf311096a423eef9702747e868a
- Day root
- 0xf43e8dcc3d451a4788b26be904c55e8c4c0fa75c9666796c51db38d37e2c0df8
- Chained
- 0x702d5ac508f08b0d1accf36af25822d8e5660367494edd17a642fb61e158a57a
- Published
- On Arc Testnet, block 69251483: 0x495162f8936e19f0039918feebe6c307f327cd6bf8c37219620b1970041fa9ae