ghost-env
Deterministic, in-process fake HTTP APIs for testing agents and tools. Swap real network calls for canned GitHub, Stripe, Postgres-shaped data, OpenAI / Anthropic-style LLM JSON, S3-like objects, Slack Web API responses—while recording traffic, exporting JSON / Markdown / HAR, running eval scenarios, and optionally injecting chaos (latency, random failures).
Same ideas in TypeScript (npm) and Python (PyPI / local install).
Install
JavaScript / TypeScript (npm)
npm install ghost-env
Requires Node.js ≥ 18. No runtime npm dependencies.
Python
pip install ghost-env
From a clone (editable):
pip install -e ./python
Requires Python ≥ 3.10.
Quick start
TypeScript
import { GhostEnv, github, exportRecordingJSON } from "ghost-env";
const env = new GhostEnv({
seed: 42,
providers: [github({ issues: [{ repo: "acme/api", title: "Bug" }] })],
});
const res = await env.fetch("https://api.github.com/repos/acme/api/issues");
console.log(await res.json());
console.log(exportRecordingJSON(env.calls()));
Python
from ghost_env import GhostEnv, github, export_recording_json
env = GhostEnv(
{"seed": 1, "providers": [github({"issues": [{"repo": "acme/api", "title": "Bug"}]})]}
)
status, text = env.fetch("https://api.github.com/repos/acme/api/issues")
assert status == 200
print(export_recording_json(env.calls()))
Features
| Area | What you get |
|---|---|
| Presets | GitHub issues, Stripe customers, Postgres db().query(), OpenAI chat, Anthropic messages, S3 GET/list, Slack auth.test / chat.postMessage |
GhostEnv.fetch |
Same shape as globalThis.fetch; routes to the first matching provider |
| Recording | calls(), wasCalled(), exportRecordingJSON / Markdown / HAR |
| Eval | runEval + defineScenario for scripted agent tests |
| Replay | ReplayFixture replays canned responses in order |
| Chaos | chaos: { minLatencyMs, failureRate } on config |
Documentation
| Doc | Contents |
|---|---|
| Getting started | Providers, fetch, recording |
| Presets | URLs, config shapes, matching rules |
| API reference | GhostEnv, Provider, eval, replay, exports |
| Testing & chaos | runEval, chaos options, failure recording |
| Python notes | Node vs Python differences |
License
Apache-2.0
Release files for ghost-env 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ghost_env-0.1.0.tar.gz | 7.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ghost_env-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 16.7 kB
Release files / ghost_env-0.1.0.tar.gz
| Download URL | ghost_env-0.1.0.tar.gz |
|---|---|
| Size | 7.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2327f184488aadb1d326f9425ab4061eae3a2e99a3482f62bb9bb12351f3d045
|
|
BLAKE2b-256 checksum How to use checksums |
86ca14a332253947d36db543b5113af5e8cd3f6b52bc8399d5d4b541d9a29dc6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
Hatch/1.16.5 cpython/3.14.3 HTTPX/0.28.1
|
Release files / ghost_env-0.1.0-py3-none-any.whl
| Download URL | ghost_env-0.1.0-py3-none-any.whl |
|---|---|
| Size | 9.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e444e4f1a269809025c117d1d235aa211a34b69ac54a9f57416d3d20c93bb422
|
|
BLAKE2b-256 checksum How to use checksums |
0f0edaca6e3bd630d75ac1c0f2d125c481d15fe7a01b2b16d7236fab1aa43af1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
Hatch/1.16.5 cpython/3.14.3 HTTPX/0.28.1
|