Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Sponsor button for the repo. This file is a template: every line is commented,
# so no sponsor button renders until a maintainer opts in.
#
# To turn it on, uncomment one line and set the real handle. The GitHub Sponsors
# handle below is a placeholder, not an active account: confirm the org has a
# Sponsors profile before uncommenting.
#
# github: [attenlabs]
# custom: ["https://hotato.dev/"]
3 changes: 3 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
blank_issues_enabled: true
contact_links:
- name: Ask a question or share a catch
url: https://github.com/attenlabs/hotato/discussions
about: Questions, a moment hotato caught, an integration you wired up, or an idea. Lower friction than an issue, and others can chime in.
- name: Documentation
url: https://hotato.dev/docs/
about: Guides for capture, scoring, CI gating, and the MCP server.
18 changes: 13 additions & 5 deletions .github/ISSUE_TEMPLATE/first_catch.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,10 @@ body:
id: command
attributes:
label: Command you ran
description: The exact invocation, credentials removed.
description: The exact invocation, credentials removed. Optional, but it helps us reproduce.
placeholder: "hotato investigate --stack vapi --call-id <id>"
validations:
required: true
required: false
- type: textarea
id: what_was_caught
attributes:
Expand Down Expand Up @@ -68,19 +68,27 @@ body:
- Gating a branch in CI (contract verify)
- Still a candidate, deciding
validations:
required: true
required: false
- type: input
id: version
attributes:
label: hotato version
description: Output of `hotato --version`.
description: Output of `hotato --version`. Optional.
placeholder: "hotato x.y.z"
validations:
required: true
required: false
- type: checkboxes
id: share_safe
attributes:
label: Share-safe
description: The card and the text report carry timings and measurements only. Keep it that way.
options:
- label: No audio is attached, and the paste carries no call id, phone number, or name of any call participant.
required: true
- type: markdown
attributes:
value: >-
Thank you. A first catch from a stack we did not operate is the
clearest signal this tool works. If it earned a place in your loop,
a [star on the repo](https://github.com/attenlabs/hotato) helps the
next person find it.
14 changes: 14 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,20 @@ ever a single blended score.
Every kind of contribution is welcome. This guide gets your first one merged with
the least friction, then points you at the contribution that helps most.

## The 30-second contribution

The smallest useful change, start to finish:

- **A one-line doc fix.** A typo, a stale flag, a command that reads wrong.
Edit the file on GitHub, open the PR. Done.
- **A labeled synthetic fixture.** One JSON scenario that stresses a timing
edge the suites miss. Copy an existing label under
[`corpus/suites/`](corpus/suites/), change the timings, run
`python3 corpus/validate.py your_label.json` until it prints PASS.

Both are reviewed quickly and merge without a release. If you have more time,
read on.

## Ways to help

Pick whatever fits the time you have:
Expand Down
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,18 @@
<a href="https://pypi.org/project/hotato/"><img src="https://img.shields.io/pypi/v/hotato?style=flat-square&color=c23c07&label=pypi" alt="PyPI version"></a>
<a href="https://pypistats.org/packages/hotato"><img src="https://img.shields.io/pypi/dm/hotato?style=flat-square&color=c23c07&label=downloads" alt="Downloads per month"></a>
<a href="https://pypi.org/project/hotato/"><img src="https://img.shields.io/pypi/pyversions/hotato?style=flat-square&color=6f5d44" alt="Python versions"></a>
<a href="https://github.com/attenlabs/hotato/actions/workflows/tests.yml"><img src="https://github.com/attenlabs/hotato/actions/workflows/tests.yml/badge.svg?branch=main" alt="CI status"></a></p>
<a href="https://github.com/attenlabs/hotato/actions/workflows/tests.yml"><img src="https://github.com/attenlabs/hotato/actions/workflows/tests.yml/badge.svg?branch=main" alt="CI status"></a>
<a href="https://github.com/attenlabs/hotato/blob/main/LICENSE"><img src="https://img.shields.io/pypi/l/hotato?style=flat-square&color=6f5d44" alt="MIT license"></a></p>
<!-- Add a stars badge (shields.io github/stars/attenlabs/hotato) here once the repo reaches ~25 stars; below that it advertises the low number. -->

# hotato

**Local-first testing and observability for AI agents.**

Your evals are green. Your agent still ships bugs they can't see: talk-over, dead air, a tool it swore it ran. hotato catches them on your machine and gates CI so they stay fixed.

<img src="docs/assets/hotato-demo-cast.svg" alt="uvx hotato start --demo catches a 2.66s talk-over and returns exit 1" width="680" style="max-width:100%;height:auto;">

**[hotato.dev](https://hotato.dev)**

</div>
Expand Down
6 changes: 5 additions & 1 deletion README.pypi.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

79 changes: 79 additions & 0 deletions docs/assets/hotato-demo-cast.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 5 additions & 1 deletion llms-full.txt

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading