# agent-signals > Measured signals of AI coding agents (terminal screens, hook payloads, session files), as a language-neutral test corpus. Each screen has the exact bytes and the result that a reader must give. Each page that comes from a Markdown file has a Markdown copy at the same path, with `.md` in place of `.html`. The JSON indexes give every screen and every fact with its URLs. The repository is https://github.com/xSAVIKx/agent-signals/. Agents that work in the repository start with AGENTS.md. ## Data - [corpus.json](https://xsavikx.github.io/agent-signals/corpus.json): every agent, its verified versions, and every screen with its fields and the URLs of the `.screen` and `.yaml` files - [facts.json](https://xsavikx.github.io/agent-signals/facts.json): every fact with its number, date, agents and URLs - [llms-full.txt](https://xsavikx.github.io/agent-signals/llms-full.txt): all Markdown pages of this site in one file ## Start - [agent-signals](https://xsavikx.github.io/agent-signals/index.md): Measured signals of AI coding agents, as a language-neutral test corpus. - [Instructions for agents](https://xsavikx.github.io/agent-signals/agents.md): This repository holds measured signals of AI coding agents: terminal screens, hook payloads, session files and open files. Tools such as aw and tg-bridge test their readers against it. ## Docs - [The format of a screen](https://xsavikx.github.io/agent-signals/docs/format.md): A screen is two files in corpus//screens/, with the same slug: - [Versions](https://xsavikx.github.io/agent-signals/docs/versioning.md): The repository uses semantic versions. release-please makes each release from the Conventional Commits on main. The corpus, the Go library and the Python library are three packages with their own tags. On GitHub, the newest corpus release has the mark "Latest". The release workflow sets this mark, because GitHub otherwise gives it to the package that it released last. - [Checks for each OS](https://xsavikx.github.io/agent-signals/docs/os-checks.md): How a tool or a probe sees an agent process, its terminal, its open files and its folder, on each OS. The column "Measured" says where the row was measured. "Probe" means that a probe uses it and CI runs that probe on a runner with no agent session. - [How a tool detects an agent session](https://xsavikx.github.io/agent-signals/docs/detection.md): The rules that a tool uses to find an agent process, to link it to its session, and to read its state. Each rule names its source: - [Secrets for CI](https://xsavikx.github.io/agent-signals/docs/ci-secrets.md): The no-login probes and scenarios need no secret. The model scenarios need one secret for each agent. Only the operator adds a secret. An agent never adds one. - [Roadmap](https://xsavikx.github.io/agent-signals/docs/roadmap.md): The agents to cover, in order, and the state of each cell of the matrix. Updated 2026-10-31, third round. - [Probes](https://xsavikx.github.io/agent-signals/probes/index.md): A probe is a read-only script that collects the first facts about one agent on one OS: its processes, its parent processes and terminal, the files it keeps open, and the layout of its session files. A probe needs no release of a tool, so a new agent or a new OS can start with it. - [Scenarios](https://xsavikx.github.io/agent-signals/scenarios/index.md): A scenario starts an agent, sends scripted keys, and records the signals: screens, hook payloads, session files, and open files. A probe only reads sessions that already run (see probes/README.md). A scenario makes its own session. - [Protocols](https://xsavikx.github.io/agent-signals/protocol/index.md): Rules for tools that act on an agent session, for example a tool that types an answer into a pane. A protocol is prose and data, not code. Each rule names the facts that it comes from. - [The safe answer protocol](https://xsavikx.github.io/agent-signals/protocol/answer.md): These rules are for a tool that sends keys into the tmux pane of an agent: an answer to a dialog, or a message for the input box. Each rule names the facts in facts/ that it comes from. The tg-bridge project measured these facts. ## Tasks - [Task: add a probe for a new agent or a new OS](https://xsavikx.github.io/agent-signals/tasks/add-a-probe.md): A read-only script that prints the processes, terminals, open files and session folders of one agent on Linux and macOS (unix.sh) or Windows (windows.ps1). - [Task: add an agent](https://xsavikx.github.io/agent-signals/tasks/add-an-agent.md): The agent has a row in docs/roadmap.md, a probe for each OS, and a first-run scenario. - [Task: run the probe kit on a real machine](https://xsavikx.github.io/agent-signals/tasks/run-the-kit.md): One scrubbed file that shows how the agents on this machine run: their processes, terminals, open files and session folders. - [Task: write a fact from probe or scenario output](https://xsavikx.github.io/agent-signals/tasks/write-a-fact.md): One file in facts/ that states one measured finding, how it was measured, and what was not measured. ## Facts - [Facts](https://xsavikx.github.io/agent-signals/facts/index.md): One file per measured fact: NNN-.md, numbered in order. A screen names the facts that it pins in its facts field. - [001. An idle input box must be proved by its frame](https://xsavikx.github.io/agent-signals/facts/001-idle-must-be-proved-by-a-frame.md) - [002. A dialog can draw above a live input box](https://xsavikx.github.io/agent-signals/facts/002-a-dialog-can-draw-above-a-live-box.md) - [003. A question wizard fires one Notification, and its review screen has no footer](https://xsavikx.github.io/agent-signals/facts/003-a-question-wizard-fires-one-notification.md) - [004. A digit answers a numbered dialog at once](https://xsavikx.github.io/agent-signals/facts/004-a-digit-answers-a-numbered-dialog.md) - [005. The suggestion in the input box is faint](https://xsavikx.github.io/agent-signals/facts/005-a-suggestion-is-faint.md) - [006. A pane in the alternate screen has no scrollback](https://xsavikx.github.io/agent-signals/facts/006-the-alternate-screen-has-no-scrollback.md) - [007. The input box draws late, and early keys are lost](https://xsavikx.github.io/agent-signals/facts/007-the-input-box-draws-late.md) - [008. A pane redraws after a key, not with it](https://xsavikx.github.io/agent-signals/facts/008-a-pane-redraws-after-a-key.md) - [009. A clear followed fast by text leaves an invisible character](https://xsavikx.github.io/agent-signals/facts/009-a-fast-clear-leaves-an-invisible-character.md) - [010. The folder-trust menu of Claude Code reversed in 2.1.251](https://xsavikx.github.io/agent-signals/facts/010-the-trust-menu-reversed.md) - [011. tmux reads a lone ";" argument as a command separator](https://xsavikx.github.io/agent-signals/facts/011-tmux-reads-a-lone-semicolon-as-a-separator.md) - [012. tmux prints an access refusal and exits 0](https://xsavikx.github.io/agent-signals/facts/012-tmux-refuses-access-and-exits-zero.md) - [013. A long text becomes a paste marker](https://xsavikx.github.io/agent-signals/facts/013-a-long-text-becomes-a-paste-marker.md) - [014. agy reads a long text slowly, and the Enter waits behind it](https://xsavikx.github.io/agent-signals/facts/014-agy-reads-a-long-text-slowly.md) - [015. A dead pane reports no directory](https://xsavikx.github.io/agent-signals/facts/015-a-dead-pane-reports-no-directory.md) - [016. Remote Control draws on the same pane](https://xsavikx.github.io/agent-signals/facts/016-remote-control-draws-on-the-same-pane.md) - [017. The screen shape of agy](https://xsavikx.github.io/agent-signals/facts/017-the-agy-screen-shape.md) - [018. agy draws no dialog above a live box](https://xsavikx.github.io/agent-signals/facts/018-agy-draws-no-dialog-above-the-box.md) - [019. The Codex rollout file cannot show an approval wait](https://xsavikx.github.io/agent-signals/facts/019-the-codex-rollout-file-cannot-show-an-approval-wait.md) - [020. The screen shape of Codex CLI](https://xsavikx.github.io/agent-signals/facts/020-the-codex-screen-shape.md) - [021. A Cursor CLI process holds its chat database open](https://xsavikx.github.io/agent-signals/facts/021-a-cursor-cli-process-holds-its-chat-open.md) - [022. The terminals and the worker processes of the Cursor CLI on macOS](https://xsavikx.github.io/agent-signals/facts/022-cursor-cli-terminals-on-macos.md) - [023. The Claude pid file shows a dialog wait](https://xsavikx.github.io/agent-signals/facts/023-the-claude-pid-file-shows-a-dialog-wait.md) - [024. The Claude hooks around a permission dialog](https://xsavikx.github.io/agent-signals/facts/024-the-claude-permission-hooks.md) - [025. A Claude process holds its task folder open](https://xsavikx.github.io/agent-signals/facts/025-a-claude-process-holds-its-task-folder-open.md) - [026. The Codex daemon holds the rollout files](https://xsavikx.github.io/agent-signals/facts/026-the-codex-daemon-holds-the-rollout-files.md) - [027. The Codex rollout file shows an aborted turn](https://xsavikx.github.io/agent-signals/facts/027-the-codex-rollout-shows-an-aborted-turn.md) - [028. The agy hooks and files of a turn](https://xsavikx.github.io/agent-signals/facts/028-the-agy-turn-signals.md) - [029. The first start of each agent with no login](https://xsavikx.github.io/agent-signals/facts/029-the-first-start-with-no-login.md) - [030. The first start of Gemini CLI, Copilot CLI, Qwen Code and Aider](https://xsavikx.github.io/agent-signals/facts/030-the-first-start-of-four-more-agents.md) - [031. The Claude pid file names the wait and a background shell](https://xsavikx.github.io/agent-signals/facts/031-the-claude-pid-file-names-the-wait.md) - [032. The Claude question hooks carry the question and the options](https://xsavikx.github.io/agent-signals/facts/032-the-claude-question-hooks-carry-the-options.md) - [033. The Claude Bash dialog has four options, and "3." is not "No"](https://xsavikx.github.io/agent-signals/facts/033-the-claude-bash-dialog-has-four-options.md) - [034. The Claude task folder keeps the first session ID of the process](https://xsavikx.github.io/agent-signals/facts/034-the-claude-task-folder-keeps-the-first-session.md) - [035. A Claude resume keeps the session ID and the transcript file](https://xsavikx.github.io/agent-signals/facts/035-a-claude-resume-keeps-the-session-and-the-transcript.md) - [036. A Codex denial ends the turn](https://xsavikx.github.io/agent-signals/facts/036-a-codex-denial-ends-the-turn.md) - [037. Ctrl+C during a Codex turn opens a task dialog](https://xsavikx.github.io/agent-signals/facts/037-codex-ctrl-c-opens-a-task-dialog.md) - [038. The Codex hooks](https://xsavikx.github.io/agent-signals/facts/038-the-codex-hooks.md) - [039. The Codex daemon outlives its TUIs and updates itself](https://xsavikx.github.io/agent-signals/facts/039-the-codex-daemon-outlives-its-tuis-and-updates-itself.md) - [040. The Codex databases hold no link from a TUI to its thread](https://xsavikx.github.io/agent-signals/facts/040-the-codex-databases-hold-no-tui-link.md) - [041. An agy deny on the file dialog fires no end hook](https://xsavikx.github.io/agent-signals/facts/041-an-agy-deny-fires-no-end-hook.md) - [042. The agy tool hooks need a matcher group](https://xsavikx.github.io/agent-signals/facts/042-the-agy-tool-hooks-need-a-matcher-group.md) - [043. agy --continue reuses the files of the conversation](https://xsavikx.github.io/agent-signals/facts/043-agy-continue-reuses-the-conversation-files.md) - [044. The agy presence file is a flock lock](https://xsavikx.github.io/agent-signals/facts/044-the-agy-presence-file-is-a-flock-lock.md) - [045. The agy summaries database shows a running turn](https://xsavikx.github.io/agent-signals/facts/045-the-agy-summaries-database-shows-a-running-turn.md) - [046. The first start of ten more agents with no login](https://xsavikx.github.io/agent-signals/facts/046-the-first-start-of-ten-more-agents.md) - [047. Where the Windows installs keep their version](https://xsavikx.github.io/agent-signals/facts/047-where-windows-installs-keep-their-version.md) - [048. The agent installs on Windows arm64](https://xsavikx.github.io/agent-signals/facts/048-windows-arm64-installs.md) - [049. The free GitHub-hosted runner images for the probes and scenarios](https://xsavikx.github.io/agent-signals/facts/049-the-free-runner-images.md) - [050. Linux and macOS differ in the cache folders and the open files of agents](https://xsavikx.github.io/agent-signals/facts/050-linux-and-macos-differ-in-cache-folders-and-open-files.md) - [051. The Windows process trees of the agents in a pseudo console](https://xsavikx.github.io/agent-signals/facts/051-the-windows-process-trees-in-a-pseudo-console.md) - [052. The first screens on Windows match the Linux screens](https://xsavikx.github.io/agent-signals/facts/052-the-first-screens-on-windows.md) - [053. Codex CLI on Windows ignores USERPROFILE and HOME](https://xsavikx.github.io/agent-signals/facts/053-codex-on-windows-ignores-userprofile.md) - [054. Cursor CLI on Windows uses the account name of Windows and its install folder](https://xsavikx.github.io/agent-signals/facts/054-cursor-cli-on-windows-uses-the-account-name-of-windows.md) - [055. The real profile of a Windows runner changes with no agent action](https://xsavikx.github.io/agent-signals/facts/055-the-real-profile-changes-with-no-agent-on-windows-runners.md) - [056. Gemini CLI warns about limited colors on ubuntu-22.04](https://xsavikx.github.io/agent-signals/facts/056-gemini-warns-about-colors-on-ubuntu-22-04.md) - [057. Kilo Code CLI can draw nothing for 30 s while a child npm runs](https://xsavikx.github.io/agent-signals/facts/057-kilo-can-draw-nothing-while-npm-runs.md) - [061. The first start of thirteen more agents with no login](https://xsavikx.github.io/agent-signals/facts/061-the-first-start-of-thirteen-more-agents.md) - [062. CODEX_HOME moves all files of Codex CLI, also on Windows](https://xsavikx.github.io/agent-signals/facts/062-codex-home-moves-all-codex-files.md) - [063. opencode 2 installs as @opencode/cli and starts a service process](https://xsavikx.github.io/agent-signals/facts/063-opencode-2-starts-a-service-process.md) - [064. The first start of more agents on Windows, and four that write to the real profile](https://xsavikx.github.io/agent-signals/facts/064-the-first-screens-of-more-agents-on-windows.md) - [065. Open Interpreter 0.0.56 keeps the file layout of Codex CLI](https://xsavikx.github.io/agent-signals/facts/065-open-interpreter-keeps-the-codex-file-layout.md) - [066. The Claude pid files outside tmux: stale files, the version of the process, and no tmux key](https://xsavikx.github.io/agent-signals/facts/066-claude-pid-files-outside-tmux.md) - [067. The Codex app-server daemon runs with no TUI and updates on its own](https://xsavikx.github.io/agent-signals/facts/067-the-codex-daemon-outlives-the-tui.md) - [068. The open files of agy 1.4.12 on macOS and Ubuntu](https://xsavikx.github.io/agent-signals/facts/068-the-open-files-of-agy-1-4-12.md) - [069. The environment of an agent process names its terminal](https://xsavikx.github.io/agent-signals/facts/069-the-environment-names-the-terminal.md) - [070. psmux starts each pane with a long pwsh command that defines a claude function](https://xsavikx.github.io/agent-signals/facts/070-psmux-starts-each-pane-with-a-long-pwsh-command.md) - [071. A Windows update renames the running program of Claude Code and agy](https://xsavikx.github.io/agent-signals/facts/071-windows-updates-rename-the-running-program.md) - [072. The agy and Cursor CLI files on Windows](https://xsavikx.github.io/agent-signals/facts/072-agy-and-cursor-files-on-windows.md) - [073. agy in the Debian VM of the Android Terminal app](https://xsavikx.github.io/agent-signals/facts/073-agy-in-the-android-terminal-debian-vm.md) ## Optional - [Changelog of the corpus](https://xsavikx.github.io/agent-signals/releases/corpus.md) - [Changelog of the Go library](https://xsavikx.github.io/agent-signals/releases/go.md) - [Changelog of the Python library](https://xsavikx.github.io/agent-signals/releases/python.md)