LLM-powered testing, traces, and live chat for agent workflows
Goose is a Python library, CLI, and web dashboard for testing and debugging LLM agents.
Scaffold a gooseapp/, point Goose at your real query function, write
goose.case(...) tests, then expose tools and live chat when you want the full dashboard loop.
- Natural-language expectations – Describe the behavior you want and let Goose validate it.
- Tool call assertions – Check what your agent actually did, not just what it said.
- Full execution traces – Inspect messages, tool calls, tool outputs, and validation results.
- Live chat for iteration – Try agents in the dashboard while you develop.
- Hot reload – Re-run against updated code without restarting the app.
- Framework-agnostic quickstart – integrate Goose into an existing Python app, regardless of framework:
docs/getting-started.md - LangChain / LangGraph integration – keep your existing LangChain-style agent and add Goose around it:
docs/integrations/langchain.md
If you are starting from zero, the framework-agnostic quickstart is the default path.
- Scaffold the app with
goose init - Point Goose at
query(...) -> AgentResponseingooseapp/conftest.py - Write cases in
gooseapp/tests/withgoose.case(...) - Run the first loop with
goose test listandgoose test run - Expand into tools, chat, and hot reload through
gooseapp/app.py
Required for the first test run:
pip install llm-goose
Optional for the browser UI:
npm install -g @llm-goose/dashboard-cli
goose init
gooseapp/
├── README.md
├── __init__.py
├── app.py
├── conftest.py
└── tests/
├── __init__.py
└── test_example.py
app.pyconfigures tools, live chat agents, and hot reloadconftest.pywires the Goose fixture to your real query functiontests/holds the cases you run from the CLI or dashboard
See docs/goose-init.md for the full scaffold contract.
from goose.testing import Goose
def test_agent_responds(goose: Goose) -> None:
goose.case(
query="Hello, what can you help me with?",
expectations=[
"Agent responds with a greeting or acknowledgment",
"Agent describes its capabilities or offers assistance",
],
)
goose is injected from the fixture you register in gooseapp/conftest.py. The full query -> fixture -> test path is
documented in docs/getting-started.md.
goose init # scaffold gooseapp/
goose test list gooseapp.tests
goose test run gooseapp.tests
goose api
goose-dashboard
- Framework-agnostic quickstart:
docs/getting-started.md - LangChain / LangGraph integration:
docs/integrations/langchain.md - Scaffold details:
docs/goose-init.md - Writing tests:
docs/testing.md - Running the API and CLI loop:
docs/running-goose.md - Using the dashboard:
docs/dashboard.md
MIT License – see LICENSE for full text.

