Ok, there’s a bunch.
Tessl is a tool that developers use alongside their coding agent. As such the tessl CLI requires very broad access, due to the variety of coding agents that are in use and supported by the tool.
Locating binaries
Tessl looks for binaries on the filesystem such as cursor, codex, and claude, in order to configure a software repo for use of tessl with them. Tessl is unable to find those binaries when strictly confined, so presumes they don’t exist, and will not do one of the primary “init” steps of configuring itself in the repo.
e.g:
$ tessl init
✓ Authenticated as alan@tessl.io
⚠ Creating empty tessl.json...
Detected 6 agent(s) needing setup: Claude Code, Cursor, Gemini cli, Codex, GitHub Copilot CLI, GitHub Copilot for VS Code
✔ Created MCP client configuration for 6 agent(s):
- Claude Code: .mcp.json
- Cursor: .cursor/mcp.json
- Gemini cli: .gemini/settings.json
- Codex: .codex/config.toml
- GitHub Copilot CLI: .vscode/mcp.json
- GitHub Copilot for VS Code: .vscode/mcp.json
✓ Init complete!
That entire section in the middle fails when strictly confined because tessl is unable to find any of those binaries.
Manipulating global configuration
Beyond detecting the binaries, tessl init and tessl install can write configuration files into the home directories of those agents:
- ~/.claude/CLAUDE.md, ~/.claude/commands/tessl/, ~/.claude/skills/tessl__*
- ~/.cursor/commands/, ~/.cursor/skills/
- ~/.gemini/commands/, ~/.gemini/skills/
- ~/.codex/commands/, ~/.codex/skills/
- ~/.openhands/agent_settings.json
- ~/.tessl - tessl’s own global configuration
Spawning external agent processes
tessl run spawns the agent binaries directly (e.g. spawn(‘claude’, …), spawn(‘codex’, …)). Even if confinement allowed detecting them, executing them is separately blocked.
Source access
tessl init, tessl install, and related commands write files into the user’s current working directory; wherever their project lives. Because that can be any path on the filesystem (e.g. ~/Documents/myproject/, /srv/code/, etc.), strict confinement’s filesystem isolation breaks this entirely. The snap can only write to its own $SNAP_USER_DATA path.
Agent log harvesting
tessl agent-logs sync reads agent session logs from ~/.claude/projects/ (Claude Code JSONL transcripts) and ~/.cursor/chats/ (Cursor SQLite database transcripts). Strict confinement blocks all of these reads.
All of the above breaks in strict confinement. We cannot control where source code lives, nor where all the agents stash their config and chat logs, but need access to those locations in order to do what tessl does.