Research Notes: Session Presence — Harness Capability Gaps
Status: Open — items below require investigation before implementation
Owner: Architect Alphonso
Last updated: 2026-06-07
Related ADR: adr/2026-06-07-1-session-presence-multi-harness-architecture.md
Related issue: https://github.com/Priivacy-ai/spec-kitty/issues/1760
These harnesses are classified as Pattern E (Unknown / stub) in the ADR. Each has a NullWriter placeholder in the implementation. Before each harness can be promoted to Pattern B, C, or D, the question below must be answered and the finding recorded here.
When a question is resolved, update the entry: fill in the finding, set status to resolved, and open a follow-on issue to implement the writer.
Qwen Code (qwen, .qwen/)
Question: Does Qwen Code read a project-level persistent instruction file analogous to .cursorrules or AGENTS.md? If so, what is the path and format?
What we know:
- Spec-kitty deploys commands to
.qwen/commands/(TOML format with{{args}}placeholders) - Skills root:
.qwen/skills/(SKILL_CLASS_NATIVE) - Qwen Code is a CLI agent — it likely has a context/rules file, but the path is undocumented in public sources as of 2026-06-07
Workaround candidates:
- If Qwen reads
AGENTS.md(common among CLI agents), promote to Pattern C — no new class needed - If Qwen has a
.qwenrulesor.qwen/instructions.md, promote to Pattern B withMarkdownRulesWriter
Status: open
Research required: Read Qwen Code CLI docs or source; test with a sample project
Kilocode (kilocode, .kilocode/)
Question: Does Kilocode have a persistent instruction file? Kilocode is architecturally derived from Roo Cline — does it inherit .kilocode/rules/ or .clinerules?
What we know:
- Spec-kitty deploys to
.kilocode/workflows/ - Skills root:
.kilocode/skills/(SKILL_CLASS_NATIVE) - Roo (the upstream) reads
.roo/rules/*.mdand.clinerules - Kilocode may read
.kilocode/rules/by analogy, but this is unverified
Workaround candidates:
- If
.kilocode/rules/is confirmed, promote to Pattern B — sameMarkdownRulesWriteras Roo withrules_path=".kilocode/rules/spec-kitty.md" - If it reads
.clinerules(shared with Roo), a single.clinerulesfile would need a section for both agents — risky for projects running both
Status: open
Research required: Check Kilocode documentation or source for context-file loading
Augment Code (auggie, .augment/)
Question: What is the path and format of Augment Code's workspace-level persistent instructions? The VS Code extension has a "workspace instructions" concept but the file path is unclear.
What we know:
- Spec-kitty deploys to
.augment/commands/ - Skills root:
.agents/skills/,.augment/skills/(SKILL_CLASS_SHARED) - Augment Code (VS Code extension) is documented to support workspace context — the file may be
.augment/instructions.mdor injected via workspace settings
Workaround candidates:
- If
.augment/instructions.mdis confirmed, promote to Pattern B - If instructions are only configurable via VS Code workspace settings JSON, static injection is not viable — mark as
no-mechanismand document
Status: open
Research required: Inspect Augment Code VS Code extension settings or VSIX; check for any CLI companion
Amazon Q (q, .amazonq/)
Question: Does Amazon Q Developer read a project-level instruction file from .amazonq/? The .amazonq/prompts/ directory receives spec-kitty command prompts, but it is unclear if Amazon Q reads any file unconditionally at session start.
What we know:
- Spec-kitty deploys to
.amazonq/prompts/ SKILL_CLASS_WRAPPER(no skill_roots — Amazon Q uses a wrapper pattern, not native skills)- Amazon Q Developer (IDE extension) is documented to support "workspace context" but the mechanism is through the IDE, not a file path
Workaround candidates:
- Amazon Q CLI (
q chat) may readAGENTS.md— if so, promote to Pattern C - If context is only available through IDE workspace settings, static injection is not viable
Status: open
Research required: Test q chat in a directory containing AGENTS.md; check if content is included in context
Mistral Vibe (vibe, .agents/skills/)
Question: Does Mistral Vibe read a persistent project-level instruction file? The .vibe/config.toml configures skill routing but it is unclear if any file is loaded into the LLM context unconditionally.
What we know:
- Spec-kitty deploys skills to
.agents/skills/(shared with Codex, Pi, Letta) - Config:
.vibe/config.toml - Skills class:
SKILL_CLASS_SHARED
Workaround candidates:
- If
.vibe/rules.mdor asystem_promptfield in.vibe/config.tomlexists, promote to Pattern B/D - If Vibe reads
AGENTS.md, promote to Pattern C — sameAgentsMdWriteras Codex/OpenCode
Status: open
Research required: Read Mistral Vibe documentation; inspect .vibe/config.toml schema
Pi (pi, .agents/skills/, .pi/skills/)
Question: Does the Pi agent have a persistent instruction/context file that is loaded at session start?
What we know:
- Spec-kitty deploys to
.agents/skills/and.pi/skills/ - Runtime state in
.pi/(auth, logs, session state) - Skills class:
SKILL_CLASS_SHARED
Workaround candidates:
- If Pi reads
AGENTS.md, promote to Pattern C - If Pi has a
.pi/instructions.mdor similar, promote to Pattern B
Status: open
Research required: Check Pi agent documentation or source
Letta Code (letta, .agents/skills/)
Question: Does Letta Code have a project-level persistent instruction file loaded into agent memory/context at session start?
What we know:
- Spec-kitty deploys to
.agents/skills/ - Runtime state in
.letta/(auth, memory — Letta has persistent memory architecture) - Skills class:
SKILL_CLASS_SHARED
Workaround candidate:
- Letta's memory architecture is agent-side (the agent stores context internally), not file-side. A static file injection may not be the right model — Letta may need a one-time "remember this" injection via the Letta API at project init rather than a file write.
- This is architecturally different from all other patterns and may warrant its own Pattern F.
Status: open — possible new pattern
Research required: Confirm whether Letta reads any file at session start vs relying solely on agent-internal memory; if memory-only, design Pattern F (API injection at init)
Session Hook Gaps (all harnesses except Claude Code)
Question: Is there any harness other than Claude Code that exposes a session-start hook (i.e., the ability to run a shell command at the start of each AI session)?
Known:
- Claude Code:
SessionStartin.claude/settings.json✅ - All others: no documented hook mechanism as of 2026-06-07
Impact: For harnesses without a hook, the upgrade check can only be delivered as static text in the orientation file — e.g., "run spec-kitty upgrade --cli to check for updates." This is a soft hint, not a live check.
Future candidates to monitor:
- Cursor: VS Code extension hooks may become available
- Windsurf: Windsurf IDE may expose session hooks in future versions
- OpenCode: Open-source; could accept a PR to add hook support
Status: open — monitoring
Action: When a new harness gains hook support, implement HookRegistrar for it and update the ADR.
How to Resolve an Entry
- Research the question (docs, source inspection, or live test)
- Update the entry: add Finding, change Status to
resolvedorno-mechanism - If resolved with a viable mechanism: open a follow-on issue to implement the writer and update the registry in
src/specify_cli/session_presence/writers/registry.py - If
no-mechanism: theNullWriterstub remains; document the limitation in user-facing docs