DevCap
Android and iOS screenshots, screen recording, and annotation — straight into your workspace.
A VS Code extension and CLI, built so AI coding agents can read device captures instantly.
Screenshots
The DevCap panel — colorful actions, a live device list, and recent captures in the activity bar:
Annotate a capture — draw arrows, boxes and text on a screenshot, with fit-to-window and zoom:
Demo
If the video does not play inline on GitHub, watch it here.
Why
When you build or debug an app on a phone, emulator or simulator, getting a screenshot to your
AI coding agent (Claude Code, Cursor, Copilot) is slow and manual. DevCap makes it one click:
capture -> lands in device-captures/ -> your agent reads latest.png / latest.mp4.
Features
- Screenshot from an Android device or emulator, an iOS Simulator, and an iOS real device
- Screen recording (start / stop / toggle, auto-pulled to your PC) on Android and iOS Simulator
- Annotate captures: pen, line, arrow, rectangle, ellipse and text; colors, stroke size, undo; fit and zoom; Save or Save copy
- Several entry points: status-bar button, activity-bar panel, Command Palette, keybindings
- Device picker that can start an Android emulator (AVD) or boot an iOS simulator for you
- Choose where captures are saved: the current project folder (default) or any folder you pick
- Recent captures list with open, copy, copy path, reveal and delete
- Doctor: checks
adb, emulator, xcrun simctl, scrcpy and libimobiledevice, and shows the exact install command for anything missing
- Live mirror through
scrcpy (Android)
- A shared CLI for the terminal and for AI agents
Supported targets
| Target |
Screenshot |
Recording |
Tool |
| Android device |
Yes |
Yes |
adb |
| Android emulator |
Yes |
Yes |
adb |
| iOS Simulator |
Yes |
Yes |
xcrun simctl (macOS) |
| iOS real device |
Yes |
No |
libimobiledevice (macOS) |
Requirements
Install only what you need. The Doctor command tells you what is missing and how to fix it.
- Android:
adb — brew install android-platform-tools. Turn on USB debugging on the phone, or start an emulator (optional emulator from Android Studio).
- iOS Simulator: Xcode (
xcrun simctl), macOS only.
- iOS real device (optional):
brew install libimobiledevice (screenshot only).
- Live mirror (optional):
brew install scrcpy.
Install
From a VSIX (works today)
code --install-extension devcap-0.1.1.vsix
Or in VS Code: Extensions view -> the ... menu -> Install from VSIX... -> pick the file. Then reload the window.
From source (for development)
git clone https://github.com/TantraIN/DevCap-Device-Screenshot-Recording
Open the folder in VS Code and press F5 to launch an Extension Development Host with DevCap loaded.
From the Marketplace
After publishing, search for DevCap in the Extensions view and install.
Quick start
- Open the DevCap panel from the activity bar (the phone icon), or click the DevCap button in the status bar.
- Connect a phone with USB debugging on, or click Start emulator / simulator. If a tool is missing, run Doctor.
- Click Screenshot. The image is saved to
device-captures/ and opens in the editor.
- To mark it up, click Annotate in the editor title bar, draw, then Save or Save copy.
- To record, click Toggle recording; click again to stop and pull the video.
- Change where files are saved with Set capture location.
Default shortcuts: Screenshot Cmd/Ctrl+Alt+S, Toggle recording Cmd/Ctrl+Alt+R.
Annotate
Open any PNG or JPG and click Annotate in the editor title bar (or use the Recent-captures menu, or
the quick-action menu). Draw with pen, line, arrow, rectangle, ellipse and text; pick a color, stroke
width and font size. The image fits the window by default; zoom with Fit, +/-, 1:1 or
Ctrl/Cmd + scroll. Then Save (overwrite) or Save copy (writes an -annotated file next to the original).
CLI (terminal and AI agents)
./devcap.sh shot [label] # screenshot -> device-captures/latest.png
./devcap.sh rec-start
./devcap.sh rec-stop # stop and pull -> device-captures/latest.mp4
./devcap.sh rec-toggle
./devcap.sh status
./devcap.sh devices # list connected targets
./devcap.sh emulators # list Android AVDs / iOS simulators
./devcap.sh start <name> # start an AVD or boot a simulator
./devcap.sh use <deviceId> # set the active device
./devcap.sh doctor
Output goes to ./device-captures/ by default; override with DEVCAP_OUT=/path.
Pick a device with DEVCAP_DEVICE=<id> or ./devcap.sh use <id>.
AI-agent workflow
Every capture is saved as a timestamped original and a stable latest.png / latest.mp4. Tell your agent:
Look at device-captures/latest.png
...or let the agent run ./devcap.sh shot and read the path it prints.
Settings
| Setting |
Default |
Description |
devcap.outputDir |
"" |
Where captures are saved. Empty means <workspace>/device-captures. |
devcap.androidBitrateMbps |
8 |
Android screen-recording bitrate. |
devcap.openScreenshotAfterCapture |
true |
Open the screenshot in the editor after capture. |
devcap.copyScreenshotToClipboard |
false |
Also copy every screenshot to the system clipboard (macOS). |
Notes and limits
- Android
screenrecord caps a single clip at about 3 minutes. For longer, use scrcpy.
- iOS real-device recording is not available from the command line — use screenshot instead.
- Multiple devices connected? Pick one in the panel, or set
ANDROID_SERIAL / DEVCAP_DEVICE.
- Some Android devices block
adb screenrecord — see Troubleshooting. DevCap now reports this clearly instead of silently doing nothing.
Troubleshooting
Android recording fails with "Permission denied" (real device)
Some Android phones — typically newer Android versions or OEM builds with SELinux enforcing
(seen on Realme / Oppo / ColorOS) — stop adb screenrecord from writing the video file. The
command dies immediately with:
Unable to open '/sdcard/....mp4': Permission denied
On these devices the shell can create files under /sdcard normally (e.g. touch), but the
screenrecord process itself is denied — the system may even refuse to let adb stop or signal
it. This is the device's own policy, not a DevCap bug: any tool that shells out to
adb screenrecord hits the same wall. DevCap detects the failed start and shows the reason
instead of pretending the recording began.
What to do:
- Record with scrcpy — it captures from your computer, so the device-side restriction does
not apply.
brew install scrcpy, then use Live Mirror (scrcpy) (scrcpy can also record to
a file). This is the reliable way to record such devices.
- Take a screenshot instead — screenshots use
adb exec-out screencap and are unaffected.
- Emulators and the iOS Simulator record fine — only certain real Android devices are affected.
Quick check on your device:
adb shell screenrecord --time-limit 1 /sdcard/test.mp4
If that prints Permission denied, DevCap cannot record to a file on that device either — use scrcpy.
License
MIT. See the LICENSE file.