A transcript ended with an assistant message. Is Claude Code finished?

Not necessarily.

That line may be the end of the current turn. It may belong to an old session. Claude Desktop may have written bookkeeping metadata after it. The user may already have replied. Or the assistant message may actually be an API error carrying a stop reason that looks deceptively final.

This is the awkward part of building a local status monitor: parsing JSONL is easy. Deciding what the evidence means right now is the engineering work.

File activity is evidence, not state