How to Debug Channel Failures Using Verbose Logging in Agent Reach
Enable the -v or --verbose flag on any Agent Reach CLI command to surface Loguru debug logs from the BaseChannel methods and reveal the exact request URLs, HTTP status codes, and exception traces that caused a channel failure.
Agent Reach routes every request to a channel (e.g., Twitter, YouTube, Reddit) through a common CLI entry point that silences Loguru output by default to keep the console clean. When you need to debug channel failures using verbose logging in Agent Reach, the -v flag reconfigures the logger to emit detailed diagnostic information on stderr, including internal call stacks, request payloads, and parsing errors from the BaseChannel implementation.
How Verbose Logging Works Internally
Understanding the three-stage logging pipeline helps you interpret the output when tracing failures.
CLI Configuration in agent_reach/cli.py
When you invoke the CLI with -v, the _configure_logging() function removes Loguru’s default handler and installs a new sink that writes to stderr. This happens only when verbose=True, ensuring that debug noise stays hidden during normal operation.
Channel Base Class in agent_reach/channels/base.py
Every channel inherits from BaseChannel, which initializes a shared self.logger = logger reference. This instance is the same Loguru logger used across all channel implementations, meaning debug statements you add to any platform-specific file automatically respect the verbose setting.
Central Error Handling in agent_reach/core.py
The core routing logic wraps each channel request in a try/except block. When a channel raises an exception, core.py calls logger.error before re-raising the exception. Without verbose mode, these logs are suppressed; with -v, you see the full stack trace and the specific method (can_handle, read, search, or check) that triggered the failure.
Enabling Verbose Mode from the Command Line
Pass -v or --verbose to any Agent Reach command to activate detailed logging. This works for both diagnostic checks and content retrieval operations.
# Run health checks with full debug output
agent-reach doctor -v
# Debug a specific channel request
agent-reach read https://twitter.com/example/status/12345 -v
# Search with verbose logging
agent-reach search "python tutorials" --channel youtube -v
When active, the CLI prints timestamps, log levels, and source locations for every internal operation.
Adding Custom Debug Statements to Channels
You can instrument your own channels or patch existing ones to capture intermediate state. Because all channels share the same Loguru instance, any logger.debug call appears immediately when -v is used.
# agent_reach/channels/twitter.py
from loguru import logger
class TwitterChannel(BaseChannel):
def read(self, url: str) -> str:
logger.debug("TwitterChannel.read called with URL {}", url)
response = self._http_get(url)
logger.debug("HTTP status: {}", response.status_code)
logger.debug("Response snippet: {}", response.text[:200])
# Existing parsing logic...
return cleaned_text
Running the command with -v produces output like:
2026-07-15 12:34:56.789 | DEBUG | __main__:TwitterChannel.read:42 - TwitterChannel.read called with URL https://twitter.com/example/status/12345
2026-07-15 12:34:56.791 | DEBUG | __main__:TwitterChannel.read:44 - HTTP status: 200
2026-07-15 12:34:56.792 | DEBUG | __main__:TwitterChannel.read:45 - Response snippet: {"data":{...
If a failure occurs, the error trace appears:
2026-07-15 12:34:56.800 | ERROR | __main__:BaseChannel.check:78 - Channel check failed: ConnectionError(...)
Interpreting Verbose Output for Root Cause Analysis
When debugging channel failures, scan the verbose output for these specific diagnostic elements:
- Request URLs: Verify the exact endpoint being called (e.g., Twitter API v2 vs. legacy endpoints).
- HTTP status codes: Identify authentication failures (401), rate limits (429), or missing resources (404).
- Response snippets: Inspect raw JSON or HTML to detect schema changes that break parsing logic.
- Exception traces: Follow the stack trace from
core.pyback to the specific channel method that raised the error.
The doctor.py module also respects the verbose flag, making it useful for verifying that environment variables and network connectivity are configured correctly before testing specific channels.
Summary
- Use
-vor--verboseon any Agent Reach CLI command to expose Loguru debug logs that are suppressed by default. - Key files involved:
agent_reach/cli.pyconfigures logging,agent_reach/channels/base.pyprovides the shared logger, andagent_reach/core.pyhandles error propagation. - Diagnostic data exposed: Request URLs, HTTP status codes, response payloads, and full exception traces from
BaseChannelmethods (can_handle,read,search,check). - Extensible: Add
logger.debugcalls to any channel file; they appear automatically when verbose mode is active.
Frequently Asked Questions
What is the verbose flag in Agent Reach?
The -v or --verbose flag is a CLI option that reconfigures the Loguru logger to output DEBUG and ERROR level messages to stderr. According to the agent_reach/cli.py source code, this flag triggers _configure_logging() to remove the default handler and add a visible sink, allowing you to see internal operations from BaseChannel methods and network requests.
Why don't I see debug logs without the verbose flag?
By default, Agent Reach removes Loguru’s default handler during CLI startup to keep the console clean for end users. The logger instance in agent_reach/channels/base.py still emits debug messages, but without a configured sink, they are discarded. Passing -v restores the handler so logs appear on stderr.
Which Agent Reach commands support verbose logging?
All commands that use the standard CLI entry point support the flag, including doctor, read, and search. The agent_reach/doctor.py module specifically checks the verbose setting to provide detailed health check output, while agent_reach/core.py ensures that channel exceptions are logged regardless of which command triggered them.
How do I add debug logging to a custom channel?
Import logger from loguru and call logger.debug() with your message and variables. Since BaseChannel initializes self.logger as the shared Loguru instance, your custom channel inherits this reference automatically. When you run any command with -v, your custom debug statements will appear alongside the framework’s internal logs, making it easy to trace data flow through your implementation.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →