Skip to content

setup.sh in an AI assistant's shell (no terminal) refuses with "Re-run with --yes", the flag AGENTS.md's first rule forbids the assistant, and AGENTS.md gives no other route #476

Closed

Description

@brettheap

Lane: openreposhape-3 (openRepoShape-3)

(lane openRepoShape-3, 2026-10-12T21:54Z) Found by lane 3's v1.0.0 acceptance pass: an assistant following AGENTS.md literally, on Linux, standard at 36538fd. Lane 3 claims it.

What is wrong. AGENTS.md's first rule says: "Run ./setup.sh (or the one-liner) WITHOUT --yes and let it ask. The human types yes at its prompt; you never answer it for them." Section 2 says the same (AGENTS.md:22-24, 76-81; README.md:440-443). But an AI assistant's shell almost never has a terminal: Claude Code's Bash tool, Codex and CI-style runners give the command no tty. So the assistant runs setup exactly as told and gets the plan, then:

REFUSED: this will create THREE repositories and there is no terminal to confirm on. Re-run with --yes if you mean it.

That is exit 2, from setup-project.py:1616-1618 (the not sys.stdin.isatty() branch). The prompt the human was to answer never appears. The only way forward the refusal offers is --yes, the flag rule 1 forbids the assistant to pass. AGENTS.md has no route for this case, so an assistant that obeys stops, and one that follows the refusal breaks the rule that outranks the rest. The same holds for the one-liner and the openRepoShape <Project> command, which hand over to the same code.

tests/test_setup_project_py.py:349 asserts the refusal deliberately, so the code behaves as designed. The gap is that nothing tells the assistant what to do instead.

Proposed fix. It keeps the rule: the human's own yes creates repositories.

  • AGENTS.md section 2, within the cap: when the shell has no terminal, the assistant shows the plan from a run without --yes, then gives the human the exact command to run in THEIR OWN terminal, where the prompt can ask. It never passes --yes itself. Mirror it in README's setup section.
  • setup-project.py's no-terminal refusal: name that exit first, along the lines of "run this command in a terminal so it can ask, or, if you are the person deciding, re-run with --yes". It must not read as an instruction an agent can take.
  • Keep tests/test_setup_project_py.py:349's refusal. Assert the new wording, and that it never invites the assistant to pass --yes on its own.

Why v1.0.0. This is the first procedure in AGENTS.md, for the readers AGENTS.md is written for. As written, it cannot be completed by an assistant that obeys it. Proposed P1.

Parent: #459 (setup, scaffold, family and the shared helpers).

Activity

  1. added this to the v1.0.0 milestone on Oct 12, 2026
  2. brettheap commented on Oct 12, 2026

    @brettheap
    ContributorAuthor

    CLAIMED — lane openRepoShape-3, session 20b4ae33-927d-4b5d-a856-e7e467ea11b2@Eagle, 2026-10-12T22:01:52Z, for #476

    Logged in lanes/log/openRepoShape-3.md at 60a6f2bbf8d0e13210b58b44e83243630dccc1c0.

    The three reads (lane-collision-protocol Rule 1):

    1. existing `CLAIMED —` comments on opensoft/openRepoShape#476:
       none
    2. `gh pr list --repo opensoft/openRepoShape --state all --search "#476"`, kept where the row or its body names `#476`:
       none
    3. `git ls-remote --heads git@github.com:opensoft/openRepoShape` branches naming `476` as a whole token:
       none
    
  3. added 3 commits that reference this issue on Oct 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions