[BUG] Session created with `template: claude` is hosted as a daemon job and gets background/unattended treatment, with no way to see or change it
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
Environment
- Claude Code 2.1.219 (the session's own
cliVersion; the installed binary auto-updated to
2.1.220 while this session kept running - a daemon session outlives an app update)
- Linux, native install (
installMethod: native),ENABLE_IDE_INTEGRATION=true,
CLAUDE_CODE_ENTRYPOINT=cli
- Launched from the PHPStorm toolbar button. No background command, no job flag, no special
invocation of any kind.
Summary
An ordinary interactive session, launched from the IDE, is hosted as a daemon job and receives the
background-session system prompt - the one that assumes nobody is watching. The product already
records the distinction and gets it right in the state file, then ignores it: this job hastemplate: claude, not template: bg, yet is treated identically to a deliberate background job.
There is no indication of this anywhere in the UI, and no way for the user to correct it.
Impact
This is not cosmetic. My session existed because the work needed a human: running scripts
against production Zabbix, vCenter and phpIPAM, and investigating live discrepancies that cannot
be reproduced in a test environment. The harness classified that session as unattended and
withheld an action I was sitting there ready to authorise. The classification was exactly
backwards relative to the work.
What Should Happen?
Expected
- Distinguish attended from unattended, rather than treating "hosted as a job" as "nobody is
watching". firstTerminalAt is already recorded, and recent user input is a further signal.
- Surface the mode in
/status, alongside model and permission mode.
Note on wording: "background" is doing double duty - it describes how the session is hosted
(a daemon with a job id, listed in ~/.claude/jobs/) but reads as a claim about whether a human
is present. Those are independent, and only the second should gate behaviour.
Error Messages/Logs
Steps to Reproduce
Steps to reproduce
- Open Claude Code from the PHPStorm toolbar button. Prompt it normally - in my case, to start
work on a Jira ticket.
- Work interactively for a while. This is a normal attended session.
- Hand the session off to a follow-up task by saying something like "the next task is on a
different Jira ticket: <url>".
- Look in
~/.claude/jobs/. A new job directory now exists whosestate.jsoncontains:
backend: daemontemplate: claude(notbg)nameSource: auto, withnameauto-derived from your messageintentholding the text of your handoff messageresumeSessionIdpointing at the previous session's transcript
- Keep chatting interactively.
stateanddetailare rewritten on every message you send, and
detail holds your message verbatim - the app is recording that a human is present.
- Ask the session to do something only unattended sessions are restricted from: "merge this
branch into master and push it." It refuses, citing that it must never push to main/master, and
no user instruction or repo ownership lifts it (Report A).
- Try to discover the mode from inside the session: run
/status- it does surface the job or
daemon state:
Version: 2.1.219
Session name: sen-5083 jira ticket
Session ID: e5c3db40-21f0-4196-aa9e-985d08dc1545
cwd: *******/.claude/worktrees/sen-5083-phpipam-client
Login method: Claude Team account
Organization: Sensika
Email: vassil.velichkov@XXXXXX.XXX
Model: Default (Opus 5 with 1M context · Best for everyday, complex tasks)
MCP servers: 1 connected, 1 need auth · /mcp
Setting sources: User settings, Shared project settings, Project local settings
Evidence: the product already distinguishes the two cases
Four job directories on this machine:
| job | template | created | firstTerminalAt |
|---|---|---|---|
| d11c2b9e | bg | 2026-07-20T23:01Z | populated |
| 01fc8b56 | bg | 2026-07-24T21:39Z | populated |
| 5095448c | claude | 2026-07-24T21:59Z | null (never attached, state: working) |
| bc7673d1 (this session) | claude | 2026-07-24T22:00Z | populated |
template: bg is a deliberate background job. template: claude is an ordinary session. Both getbackend: daemon and both get the background-session prompt. Job-hosting is not universal either
- I have an active session today (
88358ab8) with no job directory at all - so this is a property
of the handoff/IDE launch path, not of every session.
Claude Model
Opus
Is this a regression?
Yes, this worked in a previous version
Last Working Version
2.1.179
Claude Code Version
2.1.219
Platform
Anthropic API
Operating System
Ubuntu/Debian Linux
Terminal/Shell
IntelliJ IDEA terminal
Additional Information
_No response_