Skip to content

Folder: agents send the Operator to the Launchpad for the GitHub sign-in and for Composio (F19 addendum, base-instructions-20) - #157

Merged
immakermatty merged 3 commits into
mainfrom
claude/DEV-6637-folder-people-guidance
Oct 4, 2026
Merged

immakermatty merged 3 commits into
mainfrom
claude/DEV-6637-folder-people-guidance

Conversation

@immakermatty

Copy link
Copy Markdown
Contributor

Why

On a Remote Environment, people work with their agent through Codex Desktop. Many have no technical background (for example an office team of a client Organization), and they do not know where a sign-in lives.

The Folder told agents how to hand over files (F35). It did not say where to send a person whose GitHub is not signed in, or who wants to connect Outlook. An agent then improvises a terminal flow, or asks for a token in the chat.

Matěj, 2026-10-04: the Environment's generated instructions must tell agents exactly this:

  • a file to download → the Launchpad link;
  • GitHub not signed in → the Launchpad link where the person signs in;
  • connecting an application → Composio.

What changes

launchpadRouting in src/folder/render.ts is the one source for the new lines. It renders only where the Folder records a hosted entry (entry.externalOrigin), into AGENTS.md (How work is done here) and manual/this-machine.md (How the Operator works with you).

  • Launchpad. Its address, and what it holds: applications, Files, and Settings behind the gear beside the Environment's name. Sign-ins and connections are the Operator's own and are made in the Launchpad. The agent sends the link and never asks for a password, token or code.
  • GitHub, by the preset's providerIdentity:
    • Own sign-in (personal and work Environments): when gh auth status reports no account, or ssh -T git@github.com does not greet it, the agent sends <origin>/settings/tools. There the curated F19 sign-in signs gh in and links the Machine's SSH key.
      • Afterwards the agent updates the Organization's and modules' checkouts (git pull --ff-only).
      • It also clones the manifest's modules that are missing and that the Operator can access. The Platform has no command that materializes a module, so this sentence carries it.
    • Team Environment: the line names the brokered Organization identity (Lazurio for GitHub), and no person signs in.
    • Automated Environment: no GitHub line, because the persona has its own account.
  • Applications (Outlook, Teams, a calendar) go through Composio, and the agent builds no integration of its own. When Composio is not enabled, the agent sends the same link: Install and sign in, Used by agents, then a new chat.
  • The template revision moves to base-instructions-20, so existing Folders re-render on lazurio machine folder-refresh after an update.
  • Revision guard. tests/folder-template-revision.test.ts now pins compositions with an entry too. Before, it pinned none, so text that renders only with an entry could have changed under an unchanged revision. That would refuse every existing hosted Folder (the rc.14 changed generated Folder text without a new template revision: folder-refresh answers incomplete-state on Folders rendered by rc.13 #133 failure mode).
  • Decision: F19 addendum 2026-10-04 in docs/decisions.md.

What does not change

  • No new command, route or state. The Launchpad's Tools page and its curated sign-ins are unchanged (F19).
  • Local workstations and Remote Environments without a recorded entry render no Launchpad line.
  • The working rules for builders (worktrees, pull requests, issues) are untouched.

Verification

  • New test with a hosted entry agents send the Operator to the Launchpad for sign-ins and connections (tests/folder-manual.test.ts) covers:
    • every hosted preset in both languages: the Launchpad and Composio lines;
    • the own-sign-in GitHub line on personal and work presets, with the Organization clause only where Organizations are mounted;
    • the brokered line only on the Team preset, and no GitHub line on the Automated preset;
    • no /settings/tools anywhere without an entry.
  • bun test: 1230 pass, 7 skip, 0 fail. Snapshot changes are only the revision header.
  • bun run lint, bun run typecheck and bun run check:public pass.
  • The rendered AGENTS.md of a work Environment shaped like a client's (hosted entry, cs) shows the three lines with the Environment's own https://launchpad.<env>.<org>.lazurio.io/settings/tools. AGENTS.md grows from about 7.2 to 7.8 kB.

Rollout

  • Release as the next rc.
  • lazurio update --version <rc> plus lazurio machine folder-refresh on each Platform Environment, as was done for rc.19 today.

🤖 Generated with Claude Code

…-in and for Composio (F19 addendum, base-instructions-20)

Where the Folder records a hosted entry, AGENTS.md and manual/this-machine.md
now name the Launchpad and route the Operator's own sign-ins there: gh with
the Machine's SSH key (then update the checkouts and clone the missing
modules), Composio for applications. A Team Environment gets the brokered
identity instead, an Automated Environment no GitHub line. The revision guard
now pins compositions with an entry too.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

@agentrozjedemeai agentrozjedemeai left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review of exact head 81e2f55. Two blocking findings (both in this scope):

  1. The new missing-module instruction contradicts the generated worktree rules. src/folder/render.ts:375-376 orders an agent to clone manifest-declared, accessible missing modules into their places under the Organization checkout; but src/folder/manual.ts:295-296 renders "Never clone another repository into a primary checkout, or into this Folder's organizations/" and tells the agent to move nested repositories out during alignment (src/folder/manual.ts:799-801). A nontechnical Operator's agent now receives mutually exclusive instructions, and following the new one can create a nested checkout that the existing alignment rule later treats as unsafe. Add a narrow, explicit exception for declared module mounts (with live repository access, vacant exact destination and expected remote/branch checks) to the existing generated discipline/alignment guidance; keep ad-hoc clones forbidden. Update the bilingual test and decision text accordingly. There is no Platform materialization command to defer to, so the agent fallback itself is appropriate once internally consistent.

  2. tests/folder-template-revision.test.ts:58-65 adds entry compositions only for hosted-personal and hosted-organization-personal. Entry-only text for the brokered Team and persona presets (src/folder/render.ts:378-383) is still outside the digest guard. A future edit to that text can retain base-instructions-20 and pass the digest check, reproducing the stale-revision refusal the guard is meant to prevent. Add hosted entry compositions for Team and Steward (both locales and output paths already flow through compositions()).

The shared renderer, entry gate, provider-identity routing, bilingual behavior assertions and F19 addendum otherwise match the intended flow. Local focused test: 74 passed, 0 failed. The local broad test invocation timed out without a result; exact-head macOS and Ubuntu CI checks both passed. No merge performed.

…the rule on clones; the revision guard pins Team and Automated entries too (review of #157)

working-here's rule on clones and the current checkouts section now name the
same exception: a module declared in the Organization's manifest that is
missing is cloned into its declared place only with live access and an absent
or empty destination, then its remote and default branch are verified;
otherwise nothing is cloned. A nested repository that is not a declared module
is still moved out. The digest guard adds hosted entry compositions for the
Team and Automated presets.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@immakermatty

Copy link
Copy Markdown
Contributor Author

Both findings fixed in ed91d47:

  1. Rule on clones. The rule in manual/working-here.md and the current checkouts section of manual/troubleshooting.md now name the same single exception. A module declared in the Organization's manifest that is missing here is cloned into its declared place only when:

    • the Operator has live access to its repository (gh repo view);
    • the destination is absent or empty.

    Afterwards the agent verifies git remote get-url origin and the default branch. When either condition fails, it clones nothing and tells the Operator. A nested repository that is not a declared module is still moved out. The AGENTS.md GitHub line points to that section.

    Tests: a new bilingual test (a missing module of the manifest is the one exception to the rule on clones, with its checks) covers both manuals, present on Organization presets and absent on the personal one. The existing nested-repository fragments in checkout-alignment.test.ts follow the narrower sentence. The F19 addendum says the same.

  2. Digest guard. tests/folder-template-revision.test.ts adds hosted entry compositions for hosted-organization-team and hosted-organization-steward (fixtures teamEntry and automatedEntry). The digest is re-pinned under base-instructions-20.

Checks:

  • bun test: 1230 pass, 1 fail. The failure is module-declared-preparation hitting its 20 s timeout under load; the file alone passes 6/6. It is unrelated: it re-downloads packages because the Mac's bun cache was cleared for disk space.
  • lint, typecheck and check:public pass.
  • The snapshot diff is only the changed rules.

🤖 Generated with Claude Code

@agentrozjedemeai agentrozjedemeai left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@immakermatty Exact-head re-review of ed91d47: APPROVED. Both blockers from my review of 81e2f55 are resolved. The generated working-here and troubleshooting guidance now shares a single declared-but-missing module exception; it gates cloning on live repository access and a vacant destination, requires remote/default-branch verification, retains the move-out rule for undeclared nested repositories, and has bilingual assertions plus the F19 decision update. The revision digest now includes hosted Team and Steward entry fixtures as well as personal/work entries. No remaining findings in this scope.

Validation: detached exact-head diff --check clean; local focused tests 61 passed, 0 failed (including the bilingual rule and digest guard); lint, typecheck and check:public passed. The local broad bun test run exceeded my 300-second review time limit without a final result (its module-declared-preparation file completed 6/6); both exact-head Ubuntu and macOS Platform checks completed successfully. Zero unresolved review threads. The PR is currently BEHIND the live main; no merge performed.

@immakermatty
immakermatty merged commit 857438f into main Oct 4, 2026
3 checks passed
agentrozjedemeai added a commit that referenced this pull request Oct 4, 2026
…-in and for Composio (F19 addendum, base-instructions-20) (#157) (#162)

* Folder: agents send the Operator to the Launchpad for the GitHub sign-in and for Composio (F19 addendum, base-instructions-20)

Where the Folder records a hosted entry, AGENTS.md and manual/this-machine.md
now name the Launchpad and route the Operator's own sign-ins there: gh with
the Machine's SSH key (then update the checkouts and clone the missing
modules), Composio for applications. A Team Environment gets the brokered
identity instead, an Automated Environment no GitHub line. The revision guard
now pins compositions with an entry too.



* Folder: a declared module missing here is the one named exception to the rule on clones; the revision guard pins Team and Automated entries too (review of #157)

working-here's rule on clones and the current checkouts section now name the
same exception: a module declared in the Organization's manifest that is
missing is cloned into its declared place only with live access and an absent
or empty destination, then its remote and default branch are verified;
otherwise nothing is cloned. A nested repository that is not a declared module
is still moved out. The digest guard adds hosted entry compositions for the
Team and Automated presets.



---------

Co-authored-by: Matěj Suchánek <matej@spectoda.com>
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants