Skip to main content

failecho-autoreport

Automatic failure reporting for agents that are not Claude Code.

Claude Code reports tool failures through a hook that fires after every call, with no model deciding anything. Everywhere else -- LangChain, LlamaIndex, a cron job, a local model driving a scraper -- reporting depends on the model choosing to call a tool, and a small model reliably will not. This removes the decision: wrap the call site once.

from failecho_autoreport import FailEcho

fe = FailEcho()

tools = fe.wrap(tools, service="github-mcp")          # a framework's tool list

@fe.watch(service="api.github.com", operation="create_issue")
def create_issue(title):                              # or one call site
    ...

fe.recovered("api.github.com", "create_issue", "refresh_schema")  # what fixed it

What it sends is a failure's shape: service, operation, a short error class, an HTTP-ish code when there is one, and duration. Never arguments, never return values, never the prompt, never a credential. Error text is off unless FAILECHO_SEND_ERRORS=1.

Three properties it has, each with a test rather than a promise:

  • Never raises. A reporting bug cannot become your application's exception.
  • Never blocks. Reports go to a worker thread; an unreachable FailEcho costs the caller about 3 ms, not a timeout. (Advice, below, is the opt-in exception.)
  • Never changes behaviour. Returns and re-raises exactly what your code did.

Advice for the agent that failed (opt-in)

Reporting helps the next agent. With advise=True (or FAILECHO_ADVISE=1), a failure in a watched call is also followed by one read of the network -- /v1/query, which stores nothing -- and the answer is attached to the exception before it goes on up:

fe = FailEcho(advise=True)

try:
    create_issue("...")
except Exception as exc:
    exc.failecho          # the network's answer, a dict, or None
    fe.advice_text(exc)   # one line, e.g. "FailEcho: try <action>, worked n/m ..."

Put that line in the tool error your model sees and the model has the evidence when it decides whether to retry, without having to think of asking. Nothing is acted on for you; the exception's type and message are unchanged (on Python 3.11+ the line is also added as a note). The read waits at most 3 seconds, on failures only -- the one place this package waits, which is why it is off by default.

The recovered() line is the one worth bothering with. Failures alone give the network a failure rate; only an outcome records what fixed it, which is the half another agent can act on. It cannot be inferred, so it stays one explicit call.

Zero dependencies. FAILECHO_DISABLED=1 turns it off. Point endpoint= at your own server to send nothing to anyone else. The network at failecho.com is public and, as of this release, has no independent reporters yet -- the front page says so. Works on your own history alone from five recoveries.

MIT. Source: https://github.com/FailEcho/failecho

Metadata

Release files for failecho-autoreport 0.1.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for failecho-autoreport 0.1.5
File Size Uploaded
failecho_autoreport-0.1.5.tar.gz 15.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for failecho-autoreport 0.1.5
File Interpreter ABI Platform
failecho_autoreport-0.1.5-py3-none-any.whl Python 3 none any Details

Total release size: 33.2 kB

Release files / failecho_autoreport-0.1.5.tar.gz

Download URL failecho_autoreport-0.1.5.tar.gz
Size 15.5 kB
Tags Source
SHA-256 checksum
How to use checksums
7569bdbc2316ea560a5546e8914cb6c05a72b82034f898008be9c983c47342a4
BLAKE2b-256 checksum
How to use checksums
8935ce346792b67383d599e7cd35299d0bb81c5e06a73023446a2265e8e26b25
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / failecho_autoreport-0.1.5-py3-none-any.whl

Download URL failecho_autoreport-0.1.5-py3-none-any.whl
Size 17.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
093b4353b6773dc7baffccf74a46e86fa209d26df991c6ef4c3bc819e3e3ba1e
BLAKE2b-256 checksum
How to use checksums
c3474f3ce0ccb51bdec766a0e4c126685d6cc10fe0fbf15f7bd3e8162d52800d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release history Release notifications | RSS feed

0.1.7

2 release files

0.1.6

2 release files

This release

0.1.5 This release

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page