
Catpane Logcat
- 1 installs
- Updated April 28, 2026
- crockalet/catpane
Helps with ai & agent building tasks.
About
catpane-logcat is a Claude Code skill for ai & agent building. It helps developers move faster with AI-assisted coding.
- catpane-logcat
- AI & Agent Building
- AI-coding skill
Catpane Logcat by the numbers
- 1 all-time installs (skills.sh)
- Ranked #14,102 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Jul 7, 2026 (Skillselion catalog sync)
npx skills add https://github.com/crockalet/catpane --skill catpane-logcatAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 1 |
|---|---|
| Last updated | April 28, 2026 |
| Repository | crockalet/catpane ↗ |
What it does
Helps with ai & agent building tasks.
Files
CatPane Android logcat MCP
Use this skill when you need Android logcat output from CatPane's MCP runtime. It is for live debugging, reproductions, and incremental monitoring of Android device logs.
Use it when
- you need to discover whether a useful capture already exists
- you need to start a scoped capture for one Android device, app, or PID
- you need focused log queries instead of dumping raw logcat
- you need to poll for new Android logs during an investigation
Tool surface
get_status— inspect captures and optionally include all currently available capture deviceslist_devices— list all currently available capture devices; focus on Android entriesstart_capture— start buffering logcat for a device; usepackageorpidto scopeget_logs— read buffered logs with filters and cursor paginationclear_logs— reset the buffered window for a capture without stopping itstop_capture— stop and remove a capture
Supporting docs:
- tools/status.md —
get_status - tools/list-devices.md —
list_devices - tools/capture.md —
start_capture,clear_logs,stop_capture - tools/get-logs.md —
get_logs
Recommended workflow
1. Check runtime state first.
- Call
get_statuswith{"includeDevices": true}. - If a suitable capture already exists and is
running, reuse it. - If you only need device identifiers,
list_devicesis the lighter call. - Both calls can include iOS simulators too, so filter to
platform: "Android"for this skill.
2. Start capture only when needed.
- Call
start_capturewithdevicewhen multiple devices may be connected. - Use either
packageorpidto scope the capture to one app. - Use
restart: trueonly when replacing an existing capture on the same device.
3. Query with focused filters.
- Start with
limit,minLevel,tagQuery, andtext. - Prefer targeted queries over large unfiltered pulls.
4. Page with cursors.
get_logsis cursor-based.- Reuse the same
order, passpage.nextCursoras the nextcursor, and stop whenpage.hasMoreis false.
5. Use `since` for incremental polling.
- Keep the last processed threadtime timestamp.
- Pass it back as
sinceon the next call. sinceis inclusive, so expect one boundary overlap and dedupe byseqif needed.
6. Clear logs for a fresh observation window.
- Use
clear_logsbefore reproducing an issue when you want a clean buffer. - Use
stop_captureonly when the capture is no longer needed.
Query rules
- Always prefer
captureIdordeviceonce more than one capture exists. Unqualified calls only auto-resolve when exactly one capture is registered. get_logsreads the in-memory ring buffer for a capture. Older entries can age out when the buffer reaches capacity.cursoris exclusive:order: "desc"returns older entries withseq < cursororder: "asc"returns newer entries withseq > cursor- Use
page.hasMoreto decide whether to continue paging.page.nextCursoris still the correct next anchor. minLevelis a threshold, not an exact match. Example:warnreturnswarn,error, andfatal.tagQueryuses CatPane syntax:tag:ActivityManager— exact includetag-:chatty— exact excludetag~:^(MyApp|Auth)— regex includetextis a case-insensitive substring filter over tag and message.sincemust use logcat threadtime format:MM-DD HH:MM:SS.mmm
Quick start
get_status
{
"includeDevices": true
}start_capture
{
"device": "emulator-5554",
"package": "com.example.app"
}get_logs
{
"device": "emulator-5554",
"order": "desc",
"limit": 100,
"minLevel": "error",
"tagQuery": "tag~:^(MyApp|Auth) tag-:OkHttp",
"text": "timeout"
}Capture lifecycle tools
start_capture
Use start_capture to begin buffering Android logcat for later get_logs calls.
Key arguments
device— strongly recommended when more than one adb device could be connectedpackage— resolve a package name to a PID before capture startspid— explicit PID filtercapacity— ring-buffer size for this capturerestart— replace an existing capture for the same device
Example: capture a device
{
"device": "emulator-5554"
}Example: capture one package
{
"device": "emulator-5554",
"package": "com.example.app",
"capacity": 20000
}Example: capture one PID and replace an existing capture
{
"device": "emulator-5554",
"pid": 12345,
"restart": true
}Notes
- If
deviceis omitted, auto-selection only works when exactly one adb device is connected. - Use either
pidorpackage, not both. packageis resolved to a PID at start time; it is not a live package subscription.- If a capture is already running for the same device and
restartis nottrue, the tool can fail with a conflict. capacityis the per-capture ring-buffer size; older logs fall out when the buffer fills.
clear_logs
Use clear_logs when you want a clean window for a reproduction but want to keep the capture running.
Example
{
"captureId": "capture-1"
}Notes
- This clears the buffered entries only.
- The capture keeps running and new logs continue to arrive.
- Prefer this over
stop_capturewhen you only want to reset the observation window.
stop_capture
Use stop_capture when you are done with a capture and want to remove it from runtime state.
Example
{
"captureId": "capture-1"
}Alternative selector
{
"device": "emulator-5554"
}Notes
- After
stop_capture, laterget_logsorclear_logscalls for that capture will fail until a new capture is started. - Use
stop_captureto free the runtime state; useclear_logsto keep streaming but reset the buffer.
get_logs
Use get_logs to query buffered Android logcat entries from an existing capture. It is optimized for targeted retrieval, not bulk dumping.
Core arguments
captureIdordevice— select the capture to queryorder—desc(newest first, default) orasc(forward paging)limit— default100, maximum1000cursor— exclusive sequence anchor for paginationminLevel— minimum level thresholdtagQuery— CatPane tag filterstext— case-insensitive substring across tag and messagesince— inclusive threadtime lower bound inMM-DD HH:MM:SS.mmm
Log level filtering
minLevel is a threshold, not an exact match.
Accepted values:
- full names:
verbose,debug,info,warn,error,fatal - aliases:
V,D,I,W,E,F
Examples:
minLevel: "warn"returnswarn,error, andfatalminLevel: "E"returnserrorandfatal
Tag filter syntax
tagQuery uses CatPane's tag syntax. Multiple filters are space-separated.
tag:MyTag— include exact tagtag-:NoiseTag— exclude exact tagtag~:^(MyApp|Auth)— regex include
Examples:
tag:ActivityManagertag:MyApp tag-:OkHttptag~:^(MyApp|Auth) tag-:chatty
These tag filters combine with minLevel, text, and since using AND semantics.
Example: focused error query
{
"device": "emulator-5554",
"order": "desc",
"limit": 100,
"minLevel": "error",
"tagQuery": "tag~:^(MyApp|Auth) tag-:OkHttp",
"text": "timeout"
}Example: page older results with the returned cursor
{
"captureId": "capture-1",
"order": "desc",
"cursor": 8421,
"limit": 200
}Example: incremental polling with since
{
"captureId": "capture-1",
"order": "asc",
"since": "03-10 06:30:47.000",
"minLevel": "info",
"tagQuery": "tag~:^(MyApp|Auth)"
}Pagination behavior
get_logsuses cursor-based pagination.- With no
cursor,order: "desc"starts at the newest buffered entries andorder: "asc"starts at the oldest buffered entries. cursoris exclusive.- For
order: "desc", passpage.nextCursorback to fetch older entries. - For
order: "asc", passpage.nextCursorback to fetch newer entries after the last seen sequence. - Keep the same filters and the same
orderwhile paging one result set. - Use
page.hasMoreto decide whether to continue paging. page.nextCursorremains the correct next anchor even whenpage.hasMoreis false.
Incremental polling behavior
sinceis inclusive: entries at exactly that timestamp are returned again.- Keep the last processed timestamp and dedupe the boundary entry by
seqif you need strict once-only processing. - Use
sincewhen you want time-based polling across repeated calls, especially afterclear_logsor when you do not want to keep cursor state indefinitely.
Notes
- If more than one capture exists, do not rely on an unqualified call; pass
captureIdordevice. entries[]are buffered logs only. Ifcapture.buffer.droppedgrows or the buffer is near capacity, older logs may already be gone.- Response pagination fields live under
page:returned,firstSeq,lastSeq,nextCursor,hasMore.
list_devices
Use list_devices when you need current capture-device identifiers before starting a capture, or when get_status was called without includeDevices.
Arguments
{}What to read from the response
deviceCountdevices[].serial— pass this tostart_capture.deviceor as adeviceselector in other toolsdevices[].friendlyNameanddevices[].description— useful when choosing between similar devicesdevices[].platform— use"Android"entries for this skilldevices[].isTcp— useful when both USB and TCP devices are present
Operational notes
list_devicesdoes not create a capture.- If
deviceCountis0,start_capturewill fail until adb sees a device. - This shared tool can also return iOS capture targets such as booted simulators and wired physical devices; ignore non-Android entries for this skill.
- If you also need capture state, prefer
get_statuswith{"includeDevices": true}so you can inspect both captures and devices in one call.
get_status
Use get_status as the default first call. It shows what captures exist, whether they are running, and how full each buffer is.
Common arguments
All captures
{}All captures plus currently available devices
{
"includeDevices": true
}One capture by ID
{
"captureId": "capture-1"
}One capture by device
{
"device": "emulator-5554"
}What to inspect
captureCountandrunningCaptureCountcaptures[].runningcaptures[].deviceandcaptures[].captureIdcaptures[].packageorcaptures[].pidFiltercaptures[].buffer.len,captures[].buffer.capacity, andcaptures[].buffer.droppedcaptures[].parsedEntriesandcaptures[].parseErrorsdevices[]whenincludeDevicesistruedevices[].platform— use"Android"entries for this skilldevices[].isTcp— useful when both USB and TCP Android devices are present
Operational notes
- With no selector,
capturesincludes every registered capture. - With
captureIdordevice,capturesis narrowed to that capture, but the top-level counts still describe the whole runtime. includeDevicesreturns both connected Android devices and any iOS capture targets CatPane can currently use.- Use this before
start_captureto avoid duplicate captures. - Use this before
get_logsto learn the rightcaptureIdordeviceselector.