Notes on tracking down the cause through logs and task history when Cline stops responding mid-command — stuck on "Resume Task", buttons doing nothing, and so on.
Devin (a VS Code fork) keeps logs and extension storage under its own app-name folder, using the same layout as stock VS Code.
~/Library/Application Support/Devin/logs/<session-id>/
main.log … the app as a whole
window1/exthost/exthost.log … extension host log (per window)
window1/exthost/output_logging_*/1-Cline.log … Cline output panel log
ptyhost.log, terminal.log … terminal layer
~/Library/Application Support/Devin/User/globalStorage/saoudrizwan.claude-dev/
tasks/<task-id>/ui_messages.json … every message shown in the UI
tasks/<task-id>/api_conversation_history.json … model exchanges (per API request)
For stock VS Code, replace Devin with Code. Other forks follow the same structure — just look for the app name under ~/Library/Application Support/.
Locate the most recently modified task ID under tasks/ and read the tail of ui_messages.json.
ls -lat ~/Library/Application\ Support/Devin/User/globalStorage/saoudrizwan.claude-dev/tasks | head
python3 -c "
import json, datetime
with open('.../ui_messages.json') as f:
data = json.load(f)
for m in data[-10:]:
ts = m.get('ts')
t = datetime.datetime.fromtimestamp(ts/1000) if ts else None
print(t, m.get('type'), m.get('say') or m.get('ask'), str(m.get('text',''))[:200])
"
Pay attention to the type of the last message before the freeze.
ask: resume_task … the classic case: the task session was cut off and is waiting to be resumed.say: command with nothing after it … a command was sent but no result came back.say: api_req_started … the model request itself never returned.The UI may look frozen while the command has in fact completed underneath. Don't judge from logs alone — check the real artifacts.
/tmp/xxx.log).ps aux | grep <name>.which or ls.If nothing was appended to exthost.log / terminal.log / ptyhost.log during the frozen window, the extension host probably did not crash. More likely it's a sync gap: the terminal's completion signal never reached Cline.
# commentsInteractive zsh does not treat # as a comment by default (setopt interactive_comments is off). When AI-generated commands include lines like # explanation, you get errors such as zsh: parse error near ')', and terminal integration can be left in a bad state.
Fix: add setopt interactive_comments to ~/.zshrc.
The timing of streaming in the command string can race with the shell becoming ready, duplicating leading characters (echo → eecho). That garbling breaks shell integration's command-boundary detection, leaving the session waiting for completion forever.
Fix: add custom instructions (e.g. in .clinerules) telling the agent to split work into short commands with few lines each.
Cmd+Shift+P → Developer: Reload Window. Task history lives on disk (globalStorage/tasks/), so nothing is lost.setopt interactive_comments to ~/.zshrc..clinerules at the project root that explicitly says: don't send large multi-line commands at once, split them into short ones.