AmyDocs

Organization administrator configuration

Amy does not include a hosted AI service. After installing the extension, an Azure DevOps organization administrator connects it to a compatible backend that the organization operates (see DEPLOY.md). Until then, users see "AI features are not configured for this Azure DevOps organization" and the non-AI features keep working.

Configure

  1. In Azure DevOps, open Organization settings > Amy AI, tab Backend settings (or select Admin settings in Amy's logo menu). Azure DevOps decides who can open Organization settings; Amy adds no check of its own.
  2. Enter:
    • Backend URL: https:// only. It must not contain credentials, a query string or a fragment; trailing slashes are removed.
    • Display name.
    • Expected API version: default 1.0. Backends at 1.1 or later of the same major version also pass; features added in 1.1 appear when the backend offers them.
    • Trusted hostnames (optional): an allow-list policy such as *.your-organization.example.
    • Enable AI features.
  3. Select Test connection. Amy calls GET /api/metadata without following redirects. It checks the response status, content type, service identifier, API version, required capabilities and that authentication is required.
  4. Select Save configuration.
    • A backend is enabled only after a successful test.
    • Unreachable backend: a backend that cannot be reached can be saved only by ticking the override, and then stays disabled.
    • Replacing a backend: needs an explicit confirmation. Every user must then confirm the new backend before data is sent to it.

Only non-secret settings are stored. Never enter API keys, client secrets, tokens or Key Vault values; the extension has no fields for them, and the stored document rejects unknown fields. Provider keys belong in your backend's secret store.

Each change records who made it and when. The last 20 changes are listed under Change history.

Where settings are stored

Data Storage Scope
Backend URL, display name, enabled, API version, trusted hostnames, change history Azure DevOps extension data, collection scope This organization only
"I confirm this backend" acknowledgement Azure DevOps extension data, user scope Per user
Backend session token The browser tab's sessionStorage (memory only where the browser blocks it) Until it expires (SESSION_TTL_MINUTES), the tab closes or the backend rejects it
Project templates Azure DevOps extension data, collection scope, one document per project That project; changes need review and approval in Project Templates
Pull-request check settings (repositories, Wiki scope, reviewers) The organization's backend This organization only

Nothing else is stored in the browser: no localStorage and no cookies.

Who can change the configuration: platform limitation

Azure DevOps extension data offers no access control: any user who can run the extension can technically write collection-scoped extension data with their own credentials. The page lives in Organization settings, which Azure DevOps shows according to its own permissions, but that does not restrict the stored document either.

Amy protects users with checks that do not depend on who wrote the configuration:

  1. User confirmation. Before any content is sent, each user sees the backend's name and hostname, plus who configured it and when. They must confirm it the first time and after every change.
  2. The backend authenticates and authorizes every request.
    • Without a separate sign-in (AUTH_MODE=azure-devops, the default), Azure DevOps itself confirms each user in the organization when a session starts; the backend accepts only the configured Azure DevOps organizations.
    • With a Microsoft sign-in (AUTH_MODE=entra), users sign in with the organization's Microsoft Entra ID, and the backend accepts only its own tenant, the configured Azure DevOps organizations, and the configured users, groups or roles. It verifies organization membership with Azure DevOps at sign-in.
    • A rogue URL can't impersonate your backend's sign-in. Restricting user consent to unverified applications in Entra ID blocks look-alike sign-ins.
  3. Trusted hostname policy, stored URL validation and HTTPS are rechecked on every load.
  4. Tamper detection. A malformed or tampered configuration document is rejected.

Recommended: restrict user consent in Entra ID, use a trusted hostname policy, and review the change history regularly.

Pull-request documentation checks

Shown under Organization settings > Amy AI > Pull-request documentation checks when the connected backend offers them; its operator switches them on (see DEPLOY.md). Changing them requires membership in Project Collection Administrators (when the backend has its own Azure DevOps access) or the backend's administrator app role (Amy.Admin by default); everyone else sees them read-only.

Proposals and the pull-request metadata behind them are visible to everyone in the organization who uses Amy. Enable only repositories and Wikis whose documentation impact may be shared that widely.

Sprint documentation

Shown under Organization settings > Amy AI > Sprint documentation when the backend has its own Azure DevOps access. Who may change it is decided as for the pull-request documentation checks above. Nothing runs until you add a team.

Azure DevOps keeps no sprint goal, so the documents mark it TODO. A sprint counts as over when its last day has ended in UTC; set the days to wait if your team closes work later than that. Each team needs its own Wiki folder, because sprints of different teams can have the same names.

Search and diagnosis

Shown under Organization settings > Amy AI > Search and diagnosis when the backend has Azure AI Search (DEPLOY.md). Changing it requires the same administrator rights as the pull-request checks.

Code

Shown to organization administrators under Organization settings > Amy AI > Code when the backend offers Code with Amy (DEPLOY.md).

Repository documentation

Shown under Organization settings > Amy AI > Repository documentation when the backend offers Repository Documentation (DEPLOY.md). Everyone sees the settings; changing them requires the same administrator rights as the pull-request checks. Until they are saved once, no repository is enabled.

Without the hook nothing updates by itself; a merge that was missed is taken up by the next one, or by a run someone starts, because an update starts from the commit the documents follow. Updates are shown as started by Amy (automatic), and only administrators can stop, discard or retry them. They run on what the backend's identity can read, not a person's rights, like the rest: enable only repositories that everyone who uses Amy may read.

The backend reads the repositories with its own identity. It checks that the user who starts a run may read the chosen repositories, and the checks of findings against connected services read only enabled repositories that user may read; quotes from them can appear in the documentation of the repository being documented. Everyone with the Code tab sees every run: repository names, pull-request links and counts of findings by severity (limit that with access by tab). Only who started a run and administrators can stop, discard or retry it or download its files. Enable only repositories that everyone who uses Amy may read. The backend's identity needs Read, Contribute, Create branch and Contribute to pull requests on them, and if your repositories restrict branches to folders, in the amy/docs folder (amy/dev-docs for dev documents). A run asks Azure DevOps about this first, before anything is read or any AI request is made: a repository where something is missing ends as Failed, saying what, and the others go on; grant it and select Retry. If Azure DevOps still refuses the push or the pull request at the end, the repository ends as Needs permission, and its files can be downloaded instead.

Access by tab

Shown under Organization settings > Amy AI > Access by tab when the backend has its own Azure DevOps access (ADO_AUTH_MODE) and, in production, STATE_STORE=blob. Only administrators (Project Collection Administrators or the backend's admin role) see and change it.

Disable AI

Administrator responsibilities