Conversation
The agenteye-evaluator skill taught two things: deciding what is worth measuring, and scaffolding the v1 "server-push" evaluator service the server POSTed finished transcripts to. That service no longer exists — scoring is Evaluator v2, either a hosted evaluation authored in the dashboard or a worker built on failproofai-sdk — so the skill has been pointing people at something they cannot build, and its upstream source was deleted. The deciding half did not retire with it. It is the half only someone looking at real sessions can do, and it is now its own skill: skills/failproofai-eval-brainstorm/ Scan the population, check what is already defined, confirm the signal is really in the telemetry, check it separates good runs from bad, converge on two to four proposals. Each ends in the plain-English prompt that authors it, and it stops there — composing, backtesting and deploying belong to the dashboard's eval authoring page. The trap it exists to prevent, stated in the skill and worth stating here: event payloads are free-form, so an evaluation reading a key nobody emits does not fail. It reads nothing on every session, scores them all identically, and looks like it is working. Also re-points every sibling that routed to the old name — the three NOT-for lines that must partition the space, the umbrella skill's routing table, and its literals / skill-directory / sessions / product-verticals references. A stale routing table is worse than a stale doc: an agent follows it. Mentions of the agenteye-evaluator DISTRIBUTION and the agenteye_evaluator module are left alone. Those names were never renamed and are still correct where they appear; only the skill retired. Mirrored from FailproofAI/agenteye (agent/skills/failproofai-eval-brainstorm/), where the assistant reads the same folder at runtime. references/dashboard.md is not mirrored here: it describes the in-dashboard assistant's tools, and a reader with `fp` on their own machine has references/cli.md instead. validate-skills.py: 6 skills, 0 errors, 0 warnings. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
… PR opened)
This PR was opened on 2026-09-18. The skill is synced from
FailproofAI/agenteye → agent/skills/failproofai-eval-brainstorm/, and four fixes
landed there after that, each found by running the skill for real rather than
reading it. All three changed files are now byte-identical to the source of
truth; patterns.md was already current.
SKILL.md — two behaviour fixes, both verified live on the dashboard:
- The considered-and-rejected list is now a required part of the answer,
not a note to self. Without it a slate is unfalsifiable: three confident
proposals read the same whether ten candidates were tested or three.
- Step 8 builds the authoring link for every proposal in the same reply,
instead of offering to. And it no longer names a dashboard-only tool as the
only way to do it — from a machine with `fp` that tool does not exist, and
the same step forbids writing "link" without one.
references/cli.md — two fixes:
- Reading a payload key in SQL. The store is ClickHouse and `payload` is a
String of JSON, so `payload->>'key'` and `::float` are syntax errors, not
empty results. Gate B goes through `fp query run --sql`, and every worked
example read promoted columns only.
- Building the authoring link: org slug from `fp --json whoami`
(`.active_org`, both auth modes), base from FP_DASHBOARD_URL or
app.befailproof.ai, prompt encoded with `jq @uri`. It REFUSES when
`active_org` is null — an instance-scoped key then resolves to the default
org, so a guessed link would open the wrong tenant.
references/writing-the-prompt.md — state the agreed key in the prose. The
link carries the intent and nothing else, so a key left out is one the page
invents, and the name the user just signed off on is lost.
dashboard.md is deliberately NOT shipped here: it is the dashboard assistant's
palette, and a shell-less tool list is only something to recite at a user with
a terminal. The skill says so itself.
Validated: scripts/validate-skills.py — 6 skills, 0 errors, 0 warnings.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
agenteye-evaluatortaught two things: deciding what is worth measuring, and scaffolding the v1 "server-push" evaluator service the server POSTed finished transcripts to.That service no longer exists. Scoring is Evaluator v2 — a hosted evaluation authored in the dashboard, or a worker built on
failproofai-sdk. So the skill has been walking people through building something they cannot deploy, against a private SDK artifact they cannot obtain, and its upstream source folder was deleted. It is already declared retired in the enterprise docs; this repo was still serving it.The deciding half did not retire with it. It is the half only someone looking at real sessions can do, and it is the half people actually stall on.
What changes
New:
skills/failproofai-eval-brainstorm/Scan the population → check what is already defined → confirm the signal is really in the telemetry → read 5–8 sessions against one fixed checklist → two gates each carrying a number → converge on 2–4 proposals. Each ends in the plain-English prompt that authors it, and it stops there: composing, backtesting and deploying belong to the dashboard's eval authoring page.
The trap it exists to prevent, and the reason the "confirm the signal" step is not optional:
Two more rules worth naming, because both are ways a good slate goes wrong:
Removed:
skills/agenteye-evaluator/— with a migration block in the README, the same shape as theagenteye-cli→fp-cloud-clirename. An existing installation keeps working; it is just no longer served, and what it teaches no longer resolves to anything deployable.Re-pointed: every sibling that routed to the old name. The three
NOT forlines that must partition the space (fp-cloud-cli,failproofai-sdk,failproofai-policy-author), the umbrella skill's routing table, and itsliterals/skill-directory/sessions/product-verticalsreferences. A stale routing table is worse than a stale doc — an agent follows it to a skill that is not there.What is deliberately left alone
Mentions of the
agenteye-evaluatordistribution and theagenteye_evaluatormodule. Those names were never renamed and are still correct wherever they appear in the legacy-literals tables; only the skill retired. The README's naming table now says exactly that, so the next reader does not "fix" one into the other.Source of truth
Mirrored from the private
FailproofAI/agenteyerepo (agent/skills/failproofai-eval-brainstorm/), where the dashboard assistant reads the same folder at runtime — companion PR: FailproofAI/agenteye#826. Marked do-not-hand-edit here, like the other mirrors.references/dashboard.mdexists upstream and is not mirrored: it describes the in-dashboard assistant's tools, and a reader withfpon their own machine hasreferences/cli.mdinstead. The method is one text; only the grounding mechanics differ, and the SKILL.md says so rather than referencing a file that is not there.Synced since this PR opened —
9731c49Opened 2026-09-18; four fixes landed upstream after that, each found by running the skill for real rather than reading it.
SKILL.md,cli.mdandwriting-the-prompt.mdare now byte-identical to agenteye (checked, not eyeballed);patterns.mdwas already current.build_eval_authoring_linkas the only way: that is a dashboard tool, and fromfpit does not exist — while the same step forbade writing "link" without one. That was a contradiction a CLI agent could only resolve by skipping the link or inventing one.cli.mdshows how to read a payload key in SQL. The store is ClickHouse andpayloadis a String of JSON, sopayload->>'key'is a syntax error, not an empty result. Every worked example read promoted columns only, and Gate B is exactly a payload-key query.cli.mdbuilds the link fromfp—.active_orgfromfp --json whoami(both auth modes, read fromfp_cli/commands/auth_cmds.py), base fromFP_DASHBOARD_URLorapp.befailproof.ai, prompt throughjq @uri(round-trip checked). It refuses whenactive_orgis null: an instance-scoped key then resolves to the default org, so a guessed link would open the wrong tenant.writing-the-prompt.md: state the agreed key in the prose. The link carries the intent and nothing else, so an omitted key is one the page invents.Checks
python3 scripts/validate-skills.py→ 6 skills checked · 0 errors · 0 warnings.Every description is under the 1024-char truncation limit and under the 1000-char warning line — including
failproofai's andfailproofai-policy-author's, which my edits pushed up and I trimmed back. That cap matters here more than most: what truncation eats first is the trailingNOT for …scope, so an over-long description does not fail, it misfires.fpcommands and flags inreferences/cli.mdwere verified against the current CLI source rather than carried over on trust — the--sinceenum,query run/query schema,evals --aggregate'sscore_stats, and the--allstops-at-50 footgun.🤖 Generated with Claude Code