Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Build transparent, observable AI agents using AgentScope — agents you can see, understand, and trust with full execution tracing and debugging. Use when: building production agents that need observability, debugging complex agent behaviors, creating agents with audit trails.
.claude/skills/terminalskills-agentscope/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | -29% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -12% | 0% |
| case-01 | ✗→✓ | ▲ Improved | -28% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 5% | 0% |
| case-05 | ✗→✓ | ▲ Improved | -21% | 0% |
Build transparent, observable AI agents using AgentScope — a framework for creating agents you can see, understand, and trust with full execution tracing and debugging.
AgentScope provides three pillars of observability for AI agents: execution tracing (every step recorded with inputs, outputs, timing), decision logging (why the agent chose action A over B), and live debugging (inspect, pause, and replay agent executions). It integrates with monitoring stacks like OpenTelemetry, Prometheus, Datadog, and Grafana.
bashpip install agentscope
Or with Node.js:
bashnpm install agentscope
pythonfrom agentscope import Agent, Tracer tracer = Tracer(output="./traces/") agent = Agent( name="research-assistant", model="claude-sonnet-4-20250514", tracer=tracer, ) result = agent.run("Summarize the key findings from this paper") trace = tracer.latest() print(f"Steps: {trace.step_count}") print(f"Duration: {trace.duration_ms}ms") print(f"Tokens used: {trace.total_tokens}") for step in trace.steps: print(f" [{step.type}] {step.name}: {step.duration_ms}ms") print(f" Input: {step.input[:100]}...") print(f" Output: {step.output[:100]}...")
Track why an agent made specific choices:
pythonfrom agentscope import Agent, DecisionLogger logger = DecisionLogger( log_alternatives=True, log_reasoning=True, ) agent = Agent( name="trading-agent", model="claude-sonnet-4-20250514", decision_logger=logger, tools=["market-data", "portfolio", "trade-executor"], ) result = agent.run("Review portfolio and suggest rebalancing") for decision in logger.decisions: print(f"Decision: {decision.action}") print(f"Reasoning: {decision.reasoning}") for alt in decision.alternatives: print(f" - {alt.action} (score: {alt.score:.2f}, rejected: {alt.rejection_reason})")
pythonfrom agentscope import AgentTeam, Tracer, Dashboard tracer = Tracer(output="./traces/") team = AgentTeam( agents=[ Agent(name="researcher", model="claude-sonnet-4-20250514", role="research"), Agent(name="analyst", model="claude-sonnet-4-20250514", role="analysis"), Agent(name="writer", model="claude-sonnet-4-20250514", role="writing"), ], tracer=tracer, coordination="sequential", ) result = team.run("Create a market analysis report for Q4 2025") for message in tracer.messages(): print(f"[{message.sender} → {message.receiver}] {message.content[:80]}...") dashboard = Dashboard(tracer) dashboard.serve(port=8080)
pythonfrom agentscope import Agent, AuditTrail audit = AuditTrail( storage="./audit_logs/", format="jsonl", include_timestamps=True, redact_pii=True, ) agent = Agent( name="claims-processor", model="claude-sonnet-4-20250514", audit_trail=audit, ) result = agent.run("Process insurance claim #12345") report = audit.export( trace_id=result.trace_id, format="pdf", include_decisions=True, ) report.save("audit-claim-12345.pdf")
pythonfrom agentscope import Agent, Tracer from agentscope.exporters import OTelExporter exporter = OTelExporter( endpoint="http://localhost:4317", service_name="my-agent-service", ) tracer = Tracer(exporters=[exporter]) agent = Agent(name="support-agent", model="claude-sonnet-4-20250514", tracer=tracer) # Traces automatically appear in Jaeger/Grafana/Datadog
pythonfrom agentscope import AgentTeam, Tracer, Replayer tracer = Tracer(output="./traces/") team = AgentTeam( agents=[ Agent(name="researcher", model="claude-sonnet-4-20250514", role="research"), Agent(name="analyst", model="claude-sonnet-4-20250514", role="analysis"), ], tracer=tracer, ) result = team.run("Analyze Q4 revenue trends for FAANG companies") # Replay and inspect each step trace = tracer.latest() replayer = Replayer(trace) for step in replayer: print(f"Step {step.index}: {step.name} — {step.duration_ms}ms") if step.is_decision: print(f" Chose: {step.decision.action}, Alternatives: {len(step.decision.alternatives)}")
pythonfrom agentscope import Agent, AuditTrail from agentscope.exporters import PrometheusExporter audit = AuditTrail(storage="./audit_logs/", format="jsonl", redact_pii=True) metrics = PrometheusExporter(port=9090) agent = Agent( name="claims-processor", model="claude-sonnet-4-20250514", audit_trail=audit, tracer=Tracer(exporters=[metrics]), ) result = agent.run("Process insurance claim #67890 for water damage — $12,400") report = audit.export(trace_id=result.trace_id, format="pdf", include_decisions=True) report.save("audit-claim-67890.pdf") # Prometheus exposes: agent_step_duration_seconds, agent_total_tokens, agent_error_count
log_alternatives=True during development to understand agent decision-makingredact_pii=True in production to avoid logging sensitive data| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-03 | fail→pass | 21,715 | 13,857 | -36% | 1 | 1 | 0% | 5,005 | 3,543 | -29% | 0 | 0 | — |
case-04 | fail→pass | 22,149 | 6,326 | -71% | 1 | 1 | 0% | 3,511 | 3,098 | -12% | 0 | 0 | — |
case-01 | fail→pass | 19,960 | 7,582 | -62% | 1 | 1 | 0% | 4,594 | 3,306 | -28% | 0 | 0 | — |
case-02 | fail→pass | 14,417 | 6,752 | -53% | 1 | 1 | 0% | 2,969 | 3,104 | +5% | 0 | 0 | — |
case-05 | fail→pass | 14,859 | 4,225 | -72% | 1 | 1 | 0% | 3,295 | 2,589 | -21% | 0 | 0 | — |
case-06 | fail→pass | 12,634 | 3,824 | -70% | 1 | 1 | 0% | 2,302 | 2,486 | +8% | 0 | 0 | — |
case-07 | fail→pass | 6,262 | 3,207 | -49% | 1 | 1 | 0% | 1,222 | 2,297 | +88% | 0 | 0 | — |
case-08 | fail→pass | 11,037 | 2,846 | -74% | 1 | 1 | 0% | 2,282 | 2,241 | -2% | 0 | 0 | — |
case-09 | fail→pass | 10,806 | 3,854 | -64% | 1 | 1 | 0% | 2,316 | 2,492 | +8% | 0 | 0 | — |
case-10 | fail→pass | 11,887 | 3,638 | -69% | 1 | 1 | 0% | 1,901 | 2,512 | +32% | 0 | 0 | — |
case-11 | fail→pass | 13,622 | 2,919 | -79% | 1 | 1 | 0% | 3,092 | 2,292 | -26% | 0 | 0 | — |
case-12 | fail→pass | 14,650 | 3,839 | -74% | 1 | 1 | 0% | 3,014 | 2,483 | -18% | 0 | 0 | — |
case-13 | fail→pass | 8,018 | 1,727 | -78% | 1 | 1 | 0% | 1,492 | 1,962 | +32% | 0 | 0 | — |
case-14 | fail→pass | 18,030 | 2,867 | -84% | 1 | 1 | 0% | 3,234 | 2,267 | -30% | 0 | 0 | — |
case-15 | fail→pass | 6,748 | 3,290 | -51% | 1 | 1 | 0% | 1,361 | 2,329 | +71% | 0 | 0 | — |
case-16 | fail→pass | 11,237 | 3,549 | -68% | 1 | 1 | 0% | 2,275 | 2,387 | +5% | 0 | 0 | — |
case-17 | fail→pass | 13,051 | 2,837 | -78% | 1 | 1 | 0% | 2,520 | 2,216 | -12% | 0 | 0 | — |
case-18 | fail→pass | 15,968 | 4,027 | -75% | 1 | 1 | 0% | 2,948 | 2,453 | -17% | 0 | 0 | — |
case-19 | pass→pass | 13,532 | 1,653 | -88% | 1 | 1 | 0% | 1,881 | 1,933 | +3% | 0 | 0 | — |
case-20 | pass→pass | 3,911 | 1,960 | -50% | 1 | 1 | 0% | 600 | 1,961 | +227% | 0 | 0 | — |
case-21 | fail→pass | 10,230 | 3,119 | -70% | 1 | 1 | 0% | 1,647 | 1,919 | +17% | 0 | 0 | — |
case-22 | fail→pass | 26,504 | 2,799 | -89% | 1 | 1 | 0% | 2,528 | 2,198 | -13% | 0 | 0 | — |
case-23 | pass→pass | 8,602 | 10,901 | +27% | 1 | 1 | 0% | 1,794 | 3,973 | +121% | 0 | 0 | — |
case-24 | pass→pass | 9,306 | 5,543 | -40% | 1 | 1 | 0% | 1,904 | 2,800 | +47% | 0 | 0 | — |
case-25 | pass→pass | 17,292 | 12,016 | -31% | 1 | 1 | 0% | 2,867 | 4,122 | +44% | 0 | 0 | — |
case-26 | pass→pass | 14,411 | 14,898 | +3% | 1 | 1 | 0% | 2,396 | 4,469 | +87% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 26 cases were attempted. The headline lift of +77 percentage points is the difference between those two pass rates over the 26 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.