From 04c68cdfa97a0457a60cf60be380289baac3677a Mon Sep 17 00:00:00 2001 From: Pat Date: Thu, 12 Mar 2026 20:03:53 -0500 Subject: [PATCH 1/2] fix: update pricing to Trial tier + add dashboard example MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Landing page: Free → Trial (14d), 10K → 500K events, 7d → 30d retention - Landing page FAQ: update credit card answer for trial - README pricing table: Free → Trial, add dashboard events to all tiers - Add examples/dashboard_quickstart.py showing HttpSink integration (the missing funnel from SDK → paid dashboard) Co-Authored-By: Claude Opus 4.6 --- README.md | 12 ++++---- examples/dashboard_quickstart.py | 50 ++++++++++++++++++++++++++++++++ site/index.html | 16 +++++----- 3 files changed, 64 insertions(+), 14 deletions(-) create mode 100644 examples/dashboard_quickstart.py diff --git a/README.md b/README.md index 8f93f79..fd96a09 100644 --- a/README.md +++ b/README.md @@ -294,15 +294,15 @@ tracer = Tracer( ) ``` -| | Free | Pro ($39/mo) | Team ($79/mo) | +| | Trial (14d free) | Pro ($39/mo) | Team ($79/mo) | |---|---|---|---| | SDK + local guards | Unlimited | Unlimited | Unlimited | -| Dashboard traces | - | 100K/mo | 500K/mo | -| Budget alerts (email/webhook) | - | Yes | Yes | -| Remote kill switch | - | Yes | Yes | -| Team members | - | 1 | 10 | +| Dashboard events | 500K/mo | 500K/mo | 5M/mo | +| Budget alerts (email/webhook) | Yes | Yes | Yes | +| Remote kill switch | Yes | Yes | Yes | +| Team members | 1 | 1 | 10 | -[Start free](https://app.agentguard47.com) | [View pricing](https://agentguard47.com/#pricing) +[Start free trial](https://app.agentguard47.com) | [View pricing](https://agentguard47.com/#pricing) ## Architecture diff --git a/examples/dashboard_quickstart.py b/examples/dashboard_quickstart.py new file mode 100644 index 0000000..a84b3f3 --- /dev/null +++ b/examples/dashboard_quickstart.py @@ -0,0 +1,50 @@ +""" +Dashboard quickstart — connect your agent to the AgentGuard dashboard. + +Sign up at https://app.agentguard47.com and grab an API key from Settings. +Then run: AG_API_KEY=ag_... python examples/dashboard_quickstart.py +""" + +import os + +from agentguard import Tracer, BudgetGuard, BudgetExceeded +from agentguard.sinks.http import HttpSink + +api_key = os.environ.get("AG_API_KEY") +if not api_key: + print("Set AG_API_KEY to your AgentGuard API key.") + print(" Sign up free: https://app.agentguard47.com") + print(" Create a key in Settings > API Keys") + raise SystemExit(1) + +# Connect to the dashboard — traces, costs, and kill signals all flow here +tracer = Tracer( + sink=HttpSink( + url="https://app.agentguard47.com/api/ingest", + api_key=api_key, + ), + service="my-agent", + guards=[BudgetGuard(max_cost_usd=5.00, warn_at_pct=0.8)], +) + +print("Connected to AgentGuard dashboard.") +print("Simulating agent calls with a $5.00 budget...\n") + +with tracer.trace("agent.run") as span: + for i in range(1, 50): + try: + with span.span(f"llm.completion", data={"model": "gpt-4o", "call": i}): + # Your real LLM call goes here + span.cost.add("gpt-4o", input_tokens=1000, output_tokens=500) + print(f" Call {i}: ${span.cost.total_usd:.2f} spent") + except BudgetExceeded as e: + print(f"\n STOPPED at call {i}: {e}") + break + +print(f"\nOpen your dashboard to see the trace:") +print(f" https://app.agentguard47.com") +print(f"\nThe dashboard shows:") +print(f" - Full trace timeline with every span") +print(f" - Cost breakdown by model") +print(f" - Budget guard events") +print(f" - Kill switch (stop agents remotely)") diff --git a/site/index.html b/site/index.html index 0c0f8c6..801a085 100644 --- a/site/index.html +++ b/site/index.html @@ -303,16 +303,16 @@

What builders say

Pricing

-

Free

-

For solo builders

+

Trial

+

14-day free trial

$0
    -
  • 10,000 events/month
  • -
  • 7-day history
  • -
  • See your spend, set basic caps
  • -
  • 2 API keys · 1 user
  • +
  • 500,000 events/month
  • +
  • 30-day history
  • +
  • Full features, no credit card
  • +
  • 5 API keys · 1 user
- Start Free + Start Free Trial

Pro

@@ -380,7 +380,7 @@

FAQ

Do I need a credit card? -
No. The free tier gives you 10,000 events/month with no credit card required.
+
No. The 14-day free trial gives you 500,000 events/month with no credit card required.
From 2837cb3f732b821da8ba29a104236b8d3dd34dc6 Mon Sep 17 00:00:00 2001 From: Pat Date: Thu, 12 Mar 2026 21:52:21 -0500 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20dashboard=20example=20=E2=80=94=20us?= =?UTF-8?q?e=20budget.consume()=20and=20correct=20CostTracker=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Use budget.consume(cost_usd=...) to feed BudgetGuard (span.cost.add only tracks metadata, doesn't trigger guards) - Use estimate_cost() for realistic cost simulation - Fix: span.cost.total_usd doesn't exist, use budget.state.cost_used Co-Authored-By: Claude Opus 4.6 --- examples/dashboard_quickstart.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/examples/dashboard_quickstart.py b/examples/dashboard_quickstart.py index a84b3f3..c3e1b6f 100644 --- a/examples/dashboard_quickstart.py +++ b/examples/dashboard_quickstart.py @@ -9,6 +9,7 @@ from agentguard import Tracer, BudgetGuard, BudgetExceeded from agentguard.sinks.http import HttpSink +from agentguard.cost import estimate_cost api_key = os.environ.get("AG_API_KEY") if not api_key: @@ -17,6 +18,13 @@ print(" Create a key in Settings > API Keys") raise SystemExit(1) +# Budget guard — halts at $5, warns at 80% +budget = BudgetGuard( + max_cost_usd=5.00, + warn_at_pct=0.8, + on_warning=lambda msg: print(f" WARNING: {msg}"), +) + # Connect to the dashboard — traces, costs, and kill signals all flow here tracer = Tracer( sink=HttpSink( @@ -24,7 +32,7 @@ api_key=api_key, ), service="my-agent", - guards=[BudgetGuard(max_cost_usd=5.00, warn_at_pct=0.8)], + guards=[budget], ) print("Connected to AgentGuard dashboard.") @@ -33,10 +41,11 @@ with tracer.trace("agent.run") as span: for i in range(1, 50): try: - with span.span(f"llm.completion", data={"model": "gpt-4o", "call": i}): - # Your real LLM call goes here - span.cost.add("gpt-4o", input_tokens=1000, output_tokens=500) - print(f" Call {i}: ${span.cost.total_usd:.2f} spent") + with span.span("llm.completion", data={"model": "gpt-4o", "call": i}): + # Your real LLM call goes here — we simulate cost + cost = estimate_cost("gpt-4o", input_tokens=1000, output_tokens=500) + budget.consume(cost_usd=cost) + print(f" Call {i}: ${budget.state.cost_used:.2f} spent") except BudgetExceeded as e: print(f"\n STOPPED at call {i}: {e}") break