easycat is a fast terminal UI for Android logcat debugging through ADB.
It helps you:
- list connected Android devices
- list installed packages for the selected device
- stream
logcatin real time - detect common Android error patterns while logs are streaming
- write incident reports with surrounding context
- expose the current context through an embedded read-only MCP server
- filter apps by typing in the Apps panel
- filter logs by text, level, and selected app PID
- navigate filters from the keyboard
- read wrapped log lines inside the terminal viewport
- pause, clear, scroll, and follow logs without leaving the terminal
- Go 1.25 or newer
- ADB available in your
PATH - An Android device or emulator with USB debugging enabled
Check ADB:
adb devices -lInstall with Go:
go install github.com/c1r5/easycat@latestMake sure $(go env GOPATH)/bin is available in your PATH.
Install dependencies:
make depsBuild the binary:
make buildThe binary will be created at:
bin/easycatRun from source:
go run .Run the built binary:
./bin/easycatWhen a device and app are selected, easycat starts streaming logcat and
captures only lines from the resolved app PID. It observes captured lines
asynchronously and writes detected incidents to:
.easycat/incidents/Development mode with hot reload:
make devmake dev uses cargo watch, so install it first if needed:
cargo install cargo-watchIf .easycat/rules.yaml is missing, easycat uses built-in rules for common
Android failures, including fatal exceptions, NullPointerException, SQLite
database locks, and ANR messages.
Create .easycat/rules.yaml to customize detection:
rules:
- id: fatal_exception
description: Android fatal exception
match:
level: E
contains:
- "FATAL EXCEPTION"
threshold:
count: 1
window: 30s
cooldown: 5m
action:
type: write_incidentMatching supports:
contains: case-insensitive match against the raw log/messagelevel: exact log level such asE,W,I, orDpid: optional exact PID matchthreshold.count,threshold.window, andthreshold.cooldown
Incident Markdown files include device/app/PID metadata, the trigger line, matching logs, recent context logs, and a suggested prompt for read-only analysis.
The MCP server starts enabled by default inside the TUI:
127.0.0.1:8765/mcp
Use ctrl+s to toggle MCP on or off. The server is read-only and exposes:
get_active_contextget_recent_logslist_incidentsget_incident
If the port is already in use, the TUI keeps running and reports the MCP error in the footer/status line.
Turning PID only off suspends capture and clears recent logs from both the
TUI and MCP. Previously created incidents remain available for the session.
If the selected app PID cannot be resolved, no logs are captured.
| Key | Action |
|---|---|
tab / shift+tab |
Change focused panel |
enter |
Select the focused device/app or edit/toggle the selected filter |
/ |
Focus the text log filter directly |
esc |
Leave text filter editing or clear the app search |
up / down |
Move selection, scroll logs, or choose a filter field |
j / k |
Choose the next/previous filter field while Filters is focused |
left / right / space |
Toggle the selected filter option while Filters is focused |
| typing while Apps is focused | Filter apps incrementally |
backspace while Apps is focused |
Remove one character from the app search |
pgup / pgdown |
Scroll logcat |
g / G |
Go to top / bottom while Logcat is focused |
ctrl+l |
Cycle log level filter: all, E, W, I, D |
ctrl+o |
Toggle selected app PID-only capture; turning it off clears recent logs |
ctrl+s |
Toggle the embedded MCP server |
ctrl+r |
Refresh devices |
ctrl+k |
Clear logs |
ctrl+p |
Pause / resume rendering |
ctrl+q / ctrl+c |
Quit |
