ONCALL CLI

Debug your

_

Work with

oncall

across your stack.

Debug from your terminal, no dashboards. Ask a question, and OnCall inspects live logs, services, and code (if allowed) to get you to root cause.

NPM

npm install -g oncall-cli

COPY

Or read the

Purple Ring

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

Auth Service

[auth] verify_token: OK

[auth] uid:8821 scope:write

[auth] refreshing_session

[auth] token_generated

Postgres DB

LOG: statement: SELECT *

LOG: duration: 49.2ms

LOG: duration: 5001ms (SLOW)

LOG: connection_reset

Stripe Worker

[worker] polling queue...

[worker] job#491: PENDING

[worker] job#491: DONE


Frontend Build

wait - compiling...

event - compiled client

info - generating pages

✓ Ready in 120ms

API Gateway

GET /auth 200 OK

GET /products 200 OK

POST /checkout 500 ERR

POST /checkout 500 ERR

GET /health 200 OK

AI Chat // ONCALL

Input: What's bugging you today

Inventory Service

[inv] processing order #9921

[inv] check_stock(sku="991")

[inv] db: acquiring connection...

[inv] warn: pool empty (5/5 busy)

[inv] warn: waiting 5000ms...

[inv] ERROR: GetConnectionTimeout

[inv] FATAL: PoolExhaustedException

[inv] panic at db_client.go:42

[inv] processing order #9921

[inv] check_stock(sku="991")

[inv] db: acquiring connection...

[inv] warn: pool empty (5/5 busy)

[inv] warn: waiting 5000ms...

[inv] ERROR: GetConnectionTimeout

[inv] FATAL: PoolExhaustedException

[inv] panic at db_client.go:42

K8s Infrastructure

pod/api-gateway Running

pod/inv-service Running

warn: probe_failed (tcp)

restarting pod...

Redis Cache

"GET" "product:991"

"SET" "session:8821"

"GET" "cart:active"

"GET" "feature:flags"

Stripe Worker

[worker] polling queue...

[worker] job#491: PENDING

[worker] job#491: DONE


Postgres DB

LOG: statement: SELECT *

LOG: duration: 49.2ms

LOG: duration: 5001ms (SLOW)

LOG: connection_reset

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

Auth Service

[auth] verify_token: OK

[auth] uid:8821 scope:write

[auth] refreshing_session

[auth] token_generated

API Gateway

GET /auth 200 OK

GET /products 200 OK

POST /checkout 500 ERR

POST /checkout 500 ERR

GET /health 200 OK

GET /auth 200 OK

GET /products 200 OK

POST /checkout 500 ERR

POST /checkout 500 ERR

GET /health 200 OK

Stripe Worker

[worker] polling queue...

[worker] job#491: PENDING

[worker] job#491: DONE


Frontend Build

wait - compiling...

event - compiled client

info - generating pages

✓ Ready in 120ms

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

AI Chat // ONCALL

Input: What's bugging you today

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

K8s Infrastructure

pod/api-gateway Running

pod/inv-service Running

warn: probe_failed (tcp)

restarting pod...

Redis Cache

"GET" "product:991"

"SET" "session:8821"

"GET" "cart:active"

"GET" "feature:flags"

Inventory Service

[inv] processing order #9921

[inv] check_stock(sku="991")

[inv] db: acquiring connection...

[inv] warn: pool empty (5/5 busy)

[inv] warn: waiting 5000ms...

[inv] ERROR: GetConnectionTimeout

[inv] FATAL: PoolExhaustedException

[inv] panic at db_client.go:42

[inv] processing order #9921

[inv] check_stock(sku="991")

[inv] db: acquiring connection...

[inv] warn: pool empty (5/5 busy)

[inv] warn: waiting 5000ms...

[inv] ERROR: GetConnectionTimeout

[inv] FATAL: PoolExhaustedException

[inv] panic at db_client.go:42

Postgres DB

LOG: statement: SELECT *

LOG: duration: 49.2ms

LOG: duration: 5001ms (SLOW)

LOG: connection_reset

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

Integrates with

UPCOMING EVENT

OnCall Lab: AI-Driven Systems Investigation

03 Jan

5 PM (GMT +5:30)

Online

23+ attending

HOW IT WORKS

Run → Ask → Review.

OnCall keeps the workflow you already use, then adds investigation and evidence alongside your logs.

Logs stream

LIVE

Ask questions while it’s still running.

$ oncall npm run dev
Starting development server
Ready on http://localhost:3000

Step 1

Run

Start your service — just prefix the command

with

oncall

Step 2

Ask

Ask in plain English—no queries, no copying logs.“Where did this error originate?”

Step 3

Review

OnCall does the hunting. You make the call: evidence + root cause + fix, right next to your logs.

Logs stream

LIVE

Ask questions while it’s still running.

$ oncall npm run dev
Starting development server
Ready on http://localhost:3000

Step 1

Run

Start your service — just prefix the command

with

oncall

Step 2

Ask

Ask in plain English—no queries, no copying logs.“Where did this error originate?”

Step 3

Review

OnCall does the hunting. You make the call: evidence + root cause + fix, right next to your logs.

AI DEBUGGER

Turn your Logs into Answers.

→ Most debugging time is spent (1) figuring out where to look and (2) gathering enough context to be sure. OnCall does both for you.

No grepping. No tab-switching. No “which service is it?”

Root-cause

A clear explanation of why the failure happened—stated in a way you can verify immediately

Evidence + context

The exact log lines with timestamps and service tags, plus the surrounding context needed to trust the conclusion.

Fix steps

Short, concrete steps to resolve the issue and confirm the chain clears.

What you get in seconds

Hypothesis:
payment-service is missing STRIPE_API_KEY in this environment

Evidence:
[payment-service 14:03:12] ERROR StripeAuth: STRIPE_API_KEY missing
[api-service 14:03:11] POST /checkout 500 (stripe.ts:42)

Code location (allowed):
payment-service/stripe.ts:42

Next checks:
- confirm env var / secret mount
- restart payment-service and retry checkout

Which service logged the real cause?

Where did this originate?

Why did this fail?

What happened right before it broke?

What you get in seconds

Hypothesis:
payment-service is missing STRIPE_API_KEY in this environment

Evidence:
[payment-service 14:03:12] ERROR StripeAuth: STRIPE_API_KEY missing
[api-service 14:03:11] POST /checkout 500 (stripe.ts:42)

Code location (allowed):
payment-service/stripe.ts:42

Next checks:
- confirm env var / secret mount
- restart payment-service and retry checkout

Which service logged the real cause?

Where did this originate?

Why did this fail?

What happened right before it broke?

TERMINAL TRUST

No new workflow. Just a better terminal.

→ Most debugging tools assume debugging is code comprehension.


But bugs show up at runtime,in logs, timing, and side effects across services. That’s why OnCall lives in the terminal: it wraps the running command, streams logs live, and investigates in-place.

Run anything

$ oncall npm run dev

No browser tabs. No dashboards. No context switching.

Designed for Incidents

Live logs, not static files

Immediate answers, not handcrafted queries

Follow-ups without resetting context

Ask what just happened — while it’s still happening.

Multi-service

Your system, understood as one app.

→ In real systems, bugs don’t respect service boundaries. Cluster mode lets OnCall route the investigation across services and connect the evidence.

Cluster in one command

$ oncall cluster ✓ Cluster running (project: checkout)

Ask from any service.
Debug the whole system.

ROUTING

web → api → payment

Frontend 500 — where is the real cause?

ONCALL

→ Routing: web → api → payment

web

GET /checkout 500

api

GET /checkout 500

payment

StripeError: No API key

Conclusion:
Root cause originates in payment-service (not the frontend 500)

Active AI

Don’t explain the bug. Let it investigate.

→ OnCall reads logs when errors appear, searches code when stack traces point somewhere, and pulls more context only when needed. You’re the reviewer — not the orchestrator.

Investigation behavior

Reads logs when errors appear

Follows stack traces to code paths

Pulls extra context only when needed

What changes for you

Less log spelunking

Fewer “where do I look?” loops

More confident fixes, faster

WHY CHOOSE ONCALL

Debugging is a race against uncertainty

→ OnCall reduces uncertainty by connecting runtime signals, code, and reasoning into a single investigation surface—so engineers find the truth faster, not just fixes sooner.

SIGNAL → HYPOTHESIS

5x

faster time to first insight

EVIDENCE FIRST

Clarity early changes everything

OnCall surfaces correlated runtime signals and code paths early in the investigation, so engineers form defensible hypotheses instead of guessing their way forward.

SIGNAL → HYPOTHESIS

5x

faster time to first insight

EVIDENCE FIRST

Clarity early changes everything

OnCall surfaces correlated runtime signals and code paths early in the investigation, so engineers form defensible hypotheses instead of guessing their way forward.

SOLVE, DON'T REACT

60%

Mean Time To Resolution

MTTR

Investigate with evidence, not urgency

By connecting logs, services, and execution context, OnCall reduces the time spent stitching data together—cutting resolution time without rushing decisions.

SOLVE, DON'T REACT

60%

Mean Time To Resolution

MTTR

Investigate with evidence, not urgency

By connecting logs, services, and execution context, OnCall reduces the time spent stitching data together—cutting resolution time without rushing decisions.

ONE THREAD

−70%

Context switches

FOCUS

Momentum matters

OnCall keeps logs, code, and reasoning in one surface—so engineers maintain mental flow instead of jumping between tools mid-incident.

ONE THREAD

−70%

Context switches

FOCUS

Momentum matters

OnCall keeps logs, code, and reasoning in one surface—so engineers maintain mental flow instead of jumping between tools mid-incident.

LOGS · CODE · RUNTIME

01

surface Instead of 6 tools

Unified

A single place to reason

OnCall unifies logs, runtime signals, code context, and AI reasoning into one investigation flow—without forcing engineers to reassemble context manually.

LOGS · CODE · RUNTIME

01

surface Instead of 6 tools

Unified

A single place to reason

OnCall unifies logs, runtime signals, code context, and AI reasoning into one investigation flow—without forcing engineers to reassemble context manually.

Safe by design

0

Log scraping or repo indexing

Read-only

Observe without intrusion

OnCall investigates live systems using standard local tools—no background scraping, no indexing, and no persistent access to your repositories or logs.

Safe by design

0

Log scraping or repo indexing

Read-only

Observe without intrusion

OnCall investigates live systems using standard local tools—no background scraping, no indexing, and no persistent access to your repositories or logs.

Confidence > speed

Higher confidence in root cause

RCA

Fix it once. Fix it right.

OnCall helps engineers validate hypotheses against live runtime evidence—reducing guesswork and increasing confidence that the root cause is truly resolved.

Confidence > speed

Higher confidence in root cause

RCA

Fix it once. Fix it right.

OnCall helps engineers validate hypotheses against live runtime evidence—reducing guesswork and increasing confidence that the root cause is truly resolved.

Safety & control

Your code stays where it belongs.

→ All inspections run locally. You decide which services expose logs, which expose code, and when production is log-only.

Permissioned by service

services:
web:
logs_available: true
code_available: true
api:
logs_available: true
code_available: true
payment:
logs_available: true
code_available: false # log-only
production:
mode: log-only

No silent uploads. No surprises.

Operational defaults

Log-only in production when needed

Explicit allowlists for code access

Answers show evidence + next checks

ONCALL CLI

Debug your

_

Work with

oncall

across your stack.

Debug from your terminal, no dashboards. Ask a question, and OnCall inspects live logs, services, and code (if allowed) to get you to root cause.

npm install -g oncall-cli

NPM

COPY

Or read the

Purple Ring

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

Auth Service

[auth] verify_token: OK

[auth] uid:8821 scope:write

[auth] refreshing_session

[auth] token_generated

Postgres DB

LOG: statement: SELECT *

LOG: duration: 49.2ms

LOG: duration: 5001ms (SLOW)

LOG: connection_reset

Stripe Worker

[worker] polling queue...

[worker] job#491: PENDING

[worker] job#491: DONE


Frontend Build

wait - compiling...

event - compiled client

info - generating pages

✓ Ready in 120ms

API Gateway

GET /auth 200 OK

GET /products 200 OK

POST /checkout 500 ERR

POST /checkout 500 ERR

GET /health 200 OK

AI Chat // ONCALL

Input: What's bugging you today

Inventory Service

[inv] processing order #9921

[inv] check_stock(sku="991")

[inv] db: acquiring connection...

[inv] warn: pool empty (5/5 busy)

[inv] warn: waiting 5000ms...

[inv] ERROR: GetConnectionTimeout

[inv] FATAL: PoolExhaustedException

[inv] panic at db_client.go:42

[inv] processing order #9921

[inv] check_stock(sku="991")

[inv] db: acquiring connection...

[inv] warn: pool empty (5/5 busy)

[inv] warn: waiting 5000ms...

[inv] ERROR: GetConnectionTimeout

[inv] FATAL: PoolExhaustedException

[inv] panic at db_client.go:42

K8s Infrastructure

pod/api-gateway Running

pod/inv-service Running

warn: probe_failed (tcp)

restarting pod...

Redis Cache

"GET" "product:991"

"SET" "session:8821"

"GET" "cart:active"

"GET" "feature:flags"

Stripe Worker

[worker] polling queue...

[worker] job#491: PENDING

[worker] job#491: DONE


Postgres DB

LOG: statement: SELECT *

LOG: duration: 49.2ms

LOG: duration: 5001ms (SLOW)

LOG: connection_reset

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

Auth Service

[auth] verify_token: OK

[auth] uid:8821 scope:write

[auth] refreshing_session

[auth] token_generated

API Gateway

GET /auth 200 OK

GET /products 200 OK

POST /checkout 500 ERR

POST /checkout 500 ERR

GET /health 200 OK

GET /auth 200 OK

GET /products 200 OK

POST /checkout 500 ERR

POST /checkout 500 ERR

GET /health 200 OK

Stripe Worker

[worker] polling queue...

[worker] job#491: PENDING

[worker] job#491: DONE


Frontend Build

wait - compiling...

event - compiled client

info - generating pages

✓ Ready in 120ms

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

AI Chat // ONCALL

Input: What's bugging you today

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

K8s Infrastructure

pod/api-gateway Running

pod/inv-service Running

warn: probe_failed (tcp)

restarting pod...

Redis Cache

"GET" "product:991"

"SET" "session:8821"

"GET" "cart:active"

"GET" "feature:flags"

Inventory Service

[inv] processing order #9921

[inv] check_stock(sku="991")

[inv] db: acquiring connection...

[inv] warn: pool empty (5/5 busy)

[inv] warn: waiting 5000ms...

[inv] ERROR: GetConnectionTimeout

[inv] FATAL: PoolExhaustedException

[inv] panic at db_client.go:42

[inv] processing order #9921

[inv] check_stock(sku="991")

[inv] db: acquiring connection...

[inv] warn: pool empty (5/5 busy)

[inv] warn: waiting 5000ms...

[inv] ERROR: GetConnectionTimeout

[inv] FATAL: PoolExhaustedException

[inv] panic at db_client.go:42

Postgres DB

LOG: statement: SELECT *

LOG: duration: 49.2ms

LOG: duration: 5001ms (SLOW)

LOG: connection_reset

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

0x0041: alloc_mem OK

0x0042: init_thread

0x0043: ctx_switch

0x0044: [DEBUG] ack

0x0045: [DEBUG] syn

0x0046: pipe_broken

Integrates with

UPCOMING EVENT

OnCall Lab: AI-Driven Systems Investigation

03 Jan

5 PM (GMT +5:30)

Online

23+ attending

HOW IT WORKS

Run → Ask → Review.

OnCall keeps the workflow you already use, then adds investigation and evidence alongside your logs.

Logs stream

LIVE

Ask questions while it’s still running.

$ oncall npm run dev
Starting development server
Ready on http://localhost:3000

Step 1

Run

Start your service — just prefix the command

with

oncall

Step 2

Ask

Ask “why did this fail?” while the system is running.

Step 3

Review

OnCall does the hunting. You make the call: evidence + root cause + fix, right next to your logs.

AI DEBUGGER

Turn your Logs into Answers.

→ Most debugging time is spent (1) figuring out where to look and (2) gathering enough context to be sure. OnCall does both for you.

No grepping. No tab-switching. No “which service is it?”

Root-cause

A clear explanation of why the failure happened—stated in a way you can verify immediately

Evidence + context

The exact log lines with timestamps and service tags, plus the surrounding context needed to trust the conclusion.

Fix steps

Short, concrete steps to resolve the issue and confirm the chain clears.

What you get in seconds

Hypothesis:
payment-service is missing STRIPE_API_KEY in this environment

Evidence:
[payment-service 14:03:12] ERROR StripeAuth: STRIPE_API_KEY missing
[api-service 14:03:11] POST /checkout 500 (stripe.ts:42)

Code location (allowed):
payment-service/stripe.ts:42

Next checks:
- confirm env var / secret mount
- restart payment-service and retry checkout

Which service logged the real cause?

Where did this originate?

Why did this fail?

What happened right before it broke?

TERMINAL TRUST

No new workflow. Just a better terminal.

→ Most debugging tools assume debugging is code comprehension.


But bugs show up at runtime,in logs, timing, and side effects across services. That’s why OnCall lives in the terminal: it wraps the running command, streams logs live, and investigates in-place.

Run anything

$ oncall npm run dev

No browser tabs. No dashboards. No context switching.

Designed for Incidents

Live logs, not static files

Immediate answers, not handcrafted queries

Follow-ups without resetting context

Ask what just happened — while it’s still happening.

Multi-service

Your system, understood as one app.

→ In real systems, bugs don’t respect service boundaries. Cluster mode lets OnCall route the investigation across services and connect the evidence.

Cluster in one command

$ oncall cluster ✓ Cluster running (project: checkout)

Ask from any service.
Debug the whole system.

ROUTING

web → api → payment

Frontend 500 — where is the real cause?

ONCALL

→ Routing: web → api → payment

web

GET /checkout 500

api

GET /checkout 500

payment

StripeError: No API key

Conclusion:
Root cause originates in payment-service (not the frontend 500)

Active AI

Don’t explain the bug. Let it investigate.

→ OnCall reads logs when errors appear, searches code when stack traces point somewhere, and pulls more context only when needed. You’re the reviewer — not the orchestrator.

Investigation behavior

Reads logs when errors appear

Follows stack traces to code paths

Pulls extra context only when needed

What changes for you

Less log spelunking

Fewer “where do I look?” loops

More confident fixes, faster

WHY CHOOSE ONCALL

Debugging is a race against uncertainty

→ OnCall reduces uncertainty by connecting runtime signals, code, and reasoning into a single investigation surface—so engineers find the truth faster, not just fixes sooner.

SIGNAL → HYPOTHESIS

5x

faster time to first insight

EVIDENCE FIRST

Clarity early changes everything

OnCall surfaces correlated runtime signals and code paths early in the investigation, so engineers form defensible hypotheses instead of guessing their way forward.

SOLVE, DON'T REACT

60%

Mean Time To Resolution

MTTR

Investigate with evidence, not urgency

By connecting logs, services, and execution context, OnCall reduces the time spent stitching data together—cutting resolution time without rushing decisions.

ONE THREAD

−70%

Context switches

FOCUS

Momentum matters

OnCall keeps logs, code, and reasoning in one surface—so engineers maintain mental flow instead of jumping between tools mid-incident.

LOGS · CODE · RUNTIME

01

surface Instead of 6 tools

Unified

A single place to reason

OnCall unifies logs, runtime signals, code context, and AI reasoning into one investigation flow—without forcing engineers to reassemble context manually.

Safe by design

0

Log scraping or repo indexing

Read-only

Observe without intrusion

OnCall investigates live systems using standard local tools—no background scraping, no indexing, and no persistent access to your repositories or logs.

Confidence > speed

Higher confidence in root cause

RCA

Fix it once. Fix it right.

OnCall helps engineers validate hypotheses against live runtime evidence—reducing guesswork and increasing confidence that the root cause is truly resolved.

Safety & control

Your code stays where it belongs.

→ All inspections run locally. You decide which services expose logs, which expose code, and when production is log-only.

Permissioned by service

services:
web:
logs_available: true
code_available: true
api:
logs_available: true
code_available: true
payment:
logs_available: true
code_available: false # log-only
production:
mode: log-only

No silent uploads. No surprises.

Operational defaults

Log-only in production when needed

Explicit allowlists for code access

Answers show evidence + next checks

Ready to install?

Turn your logs into answers

Turn your logs into answers

Install OnCall, run your next command, and ask one question. Then try cluster mode when the bug crosses services.

OnCall

Built for developers who need to debug in real time.

© 2025 OnCall (A Boundless91, Inc. Company)

Go back up!

ONCALL

optimized
realtime
solved
terminal-native
auto-detect
no-context-switch
zero-config

ONCALL

optimized
realtime
solved
terminal-native
auto-detect
no-context-switch
zero-config