Roo is a browser extension for quickly searching known AWS accounts and IAM role destinations. Its primary workflow is Search → Highlight → Jump. Roo core defines no built-in IAM roles; all searchable destinations come from the one current Configuration.
Roo's toolbar action is enabled only on supported commercial AWS Console tabs.
| Browser | Manifest |
|---|---|
| Chrome / Chromium | MV3 |
| Microsoft Edge | MV3 |
| Mozilla Firefox desktop | MV2, Firefox 140+ |
Roo supports the standard commercial AWS partition only. Browser profiles store Roo data separately; Roo does not synchronize data between browsers.
- Build the target for your browser.
- Load its output directory as an unpacked extension.
- Open Roo Settings. Create a New configuration, Upload YAML / JSON, or Edit the current configuration. Review canonical YAML and select Save configuration.
- Open a supported commercial AWS Console tab.
- Click Roo, search in the Popup, and click a result or press Enter.
Chrome and Edge load .output/chrome-mv3 or .output/edge-mv3 from their
extension developer pages. Firefox desktop loads manifest.json from
.output/firefox-mv2 through about:debugging.
Roo owns exactly one current local configuration. There is no catalog list, catalog history, catalog switching, or catalog merge. Configuration entry points depend on the current lifecycle state:
- Empty: New configuration or Upload YAML / JSON.
- Ready: Edit configuration or Replace file.
- Created: Clear is available inside Edit and requires Save configuration.
- Uploaded: Delete is available from Settings.
Delete removes Roo's persisted copy only. It does not remove the user's original local file.
YAML and JSON are accepted upload formats. Valid YAML or JSON is normalized
into RooConfigDocument and shown as canonical YAML. JSON is an import format,
not an editor format. Raw imported YAML/JSON is not persisted, and uploaded
comments and source formatting are not preserved.
Unsaved drafts are memory-only. Format YAML modifies only the in-memory draft. Save configuration atomically replaces the one current catalog only after successful validation. Invalid, cancelled, failed, and stale-unreviewed drafts do not replace it. Roo has no separate destination store or account editor.
Roo performs no file watching, directory scanning, document merge, Git config, or remote config loading.
version: 1
defaults:
roles:
- platform/example-readonly
projects:
atlas:
accounts:
dev: "111111111121"
prod: "111111111122"
roles:
platform/data-engineer:
environments:
- proddefaults is optional. Roo core defines no built-in IAM roles. A role's
environments references keys from the same project's accounts map. If
environments is omitted, that role applies to every account/environment in
the project. An imported account with no applicable role is legal and
contributes zero JumpTargets.
version: 2
organizations:
engineering:
base_accounts:
- account_id: "111111111111"
account_alias: engineering-root
- account_id: "111111111112"
account_alias: engineering-sso
defaults:
roles:
- platform/example-readonly
projects:
atlas:
accounts:
dev: "111111111121"
prod: "111111111122"
roles:
platform/data-engineer:
environments:
- prodorganizations and organisations are accepted as input; Roo normalizes to
organizations. projects and organizations are mutually exclusive.
All base_accounts inside one organization are equivalent identity anchors:
matching any configured base account ID or alias resolves the same organization
scope and Search corpus. A base account does not become a destination merely by
appearing in base_accounts; its account ID must also be explicitly declared
under that organization's projects.accounts.
At runtime, Roo resolves:
base login ID/alias → organization
already switched member account → account ownership → same organization
conflicting evidence → fail closed
Active organization is per-tab, not browser-global. Unknown or ambiguous ownership also fails closed, so another organization's targets are not shown.
Search is local, case-insensitive, and available after three characters. The
Popup shows <accounts> accounts · <roles> roles; each result is one account-
role destination. The normal flow starts from a supported AWS Console tab, whose
tab-scoped context is consumed by Organization Mode. AWS multi-session Console
URLs include a session-specific hostname prefix; Prism removes only the current
session prefix from redirectUri, then navigates to the validated destination
returned by AWS.
Legacy submits a transient form POST; Prism submits the session-switch JSON
request. The Popup closes only after the page-local activation path reports
success. Controlled failures keep the Popup open and show a safe diagnostic
code, never session metadata, URLs, credentials, CSRF, or response bodies.
Roo does not configure an AWS Region. Jump submission derives the display name
as <project>-<environment> | <account-id> and does not send a Region field.
npm install
npm test
npm run typecheck
npm run build:chrome
npm run build:edge
npm run build:firefox
npm run test:e2e:chrome
npm run test:e2e:edge-target
npm run test:releaseChrome-target and Edge-target MV3 built-extension E2E run in Playwright Chromium. The Edge-target run loads the independently generated .output/edge-mv3 artifact and does not claim branded Microsoft Edge automation. Firefox automated release evidence is MV2 build, strict web-ext lint, ZIP, and generated-manifest/artifact verification. Firefox runtime smoke remains a separate manual browser check.
Release artifacts are derived from the package version:
roo-<version>-chrome-mv3.zip
roo-<version>-edge-mv3.zip
roo-<version>-firefox-mv2.zip
<version> is the current package.json version.
Author: nova
Repository: https://github.com/bibace/Roo
The generated named permissions are exactly storage + scripting.
The only host access is the exact four-pattern commercial AWS allowlist used by one static
AWS content lifecycle and the background snapshot boundary. scripting supports
explicit Popup navigation. Roo reads only
sanitized account identity context, never credentials, from supported AWS
Console tabs. It has no broad host access, cookies, AWS SDK, STS, or network
catalog. Extension contexts do not perform AWS network requests; the only
runtime exception is the explicit user-initiated Prism Switch Role request in
the active AWS Console MAIN world, using the page's existing authenticated
session with credentials: include.