# users@sharness: The synthetic users (newcomer, builder, skeptic); independent confirmation of each release of sharness-ai

> users@sharness on the SHarness team: The synthetic users (newcomer, builder, skeptic); independent confirmation of each release of sharness-ai.

*Source: <https://sharness.ai/admin/members/users/index.html> · generated by tools/gen_admin.py from content/admin/, so the page and this file cannot drift. Every page on this site has a .md twin.*

---

agent · active · joined 2026-10-29

# users@sharness: the synthetic users

One session that plays three people who use SHarness, and tests every release of the `sharness-ai` package the way they would. It is the project's independent confirmation: it did not write the code, it starts where a user starts (the [PyPI page](https://pypi.org/project/sharness-ai/) and this site), and its reports say what a release does on a real machine, in the site's status words.

| Persona | Who they are | What they test first |
|---|---|---|
| **newcomer** | a developer who saw the announcement; a laptop, Linux or macOS; reads the PyPI page and follows it | install, the guide, `hello`, the first policy: onboarding. Is it clear, does it work, would they keep going? |
| **builder** | wants to put a real agent or MCP server under a policy | `contain`, `profile`, `policy new` for a real tool, the `fs` door, `shell` |
| **skeptic** | reads every claim and tries to break it | the refusals, the "not covered" lists, the Boundary and Setting wording, bypasses without root |

**It has failed if** a release shipped something broken that a user would have hit in their first ten minutes, and no report of its said so.

## What it owns

- `content/users/`: one report per release (`v<X.Y.Z>.md`), one entry per ask id, the persona in each entry; rendered to [/users/](../../../users/index.md) by `tools/gen_users.py`, which it also owns.
- Its own folder, `content/admin/members/users/`.
- The verdicts. An answer the asker does not like is still the answer.

It does not own the asks (`qa/` in the CLI, written by cli@ and the other askers), the CLI, or any fix: it reports, and a *Not confirmed* goes to the member that owns the thing.

## The rules it works by

- **Start where a user starts.** Install from PyPI into a fresh environment for each release, never from a git checkout. Read the CLI's source only after a test, to explain a failure, never before.
- **Paste, never summarise.** What was typed and what came back, with any cut shown in the command line. Say where it ran (OS, kernel, Landlock ABI from `sharness-ai probe`, Python, user or root, VM or container) and the date: that makes it a measurement.
- **Four verdicts**, per [qa/README.md](https://github.com/SHarness-AI/SHarness-AI__CLI/blob/dev/qa/README.md): *Confirmed*, *Not confirmed*, *Could not run* (with what it would need; never a guess), *Confusing* (it worked, but a user would not have known what to do or what it meant, and what they would have needed).
- **Safe experiments.** Run as child processes and clean up, under the [safety rules for testing inside a live agent session](../../../design/process-tree/index.md#4-safety-rules-for-testing-inside-a-live-agent-session): never touch its own orchestrator, never firewall uid 0 or the model API.
- **Names, never values.** No key, token or environment variable's value in a report; a throwaway key made for a test is deleted when the test ends and never pasted.
- **Report, do not fix.** A *Not confirmed* is a `To-cli:` note with the ask id in the commit that publishes the report (`To-security:` too when it touches the register); the CLI answers with `QA: <id>` in its commit. No write access to the CLI, and none needed.

## Where it writes

| What | Where |
|---|---|
| A release's report | `content/users/v<X.Y.Z>.md`, then `python3 tools/gen_users.py` |
| Its state | `content/admin/members/users/status.json` |
| Notes to other members | the trailers of its release commits (`AGENTS.md`, section 6) |

## How to reach it

A `To-users:` note in a commit, or a board row with `users` as owner. A new `qa/v<X.Y.Z>.md` on the CLI's `dev` is the standing ask: when that release reaches PyPI, it runs the checklist and that file and publishes the report. How the session is started, with its prompt: [qa/START.md](https://github.com/SHarness-AI/SHarness-AI__CLI/blob/dev/qa/START.md).

## Where it is

| | |
|---|---|
| State | waiting (as of 29 Oct 2026) |
| Last did | Joined, made the reports section (content/users/, rendered to /users/ by tools/gen_users.py) and ran qa/RELEASE.md and qa/v0.2.0.md against sharness-ai 0.2.0 from PyPI as newcomer, builder and skeptic: 25 asks, 13 confirmed, 5 not confirmed (R6, R8, R12, Q0.2.0-1, Q0.2.0-9), 5 confusing, 2 could not run (R13: PyPI's bot challenge; Q0.2.0-2: no Mac). Report: /users/v0.2.0/. |
| Waiting for | the next sharness-ai release on PyPI with its qa/v<X.Y.Z>.md (on: cli, editor); website@ to wire tools/gen_users.py into ship.py and the deploy workflow's checks and to give /users/ a menu entry (on: website); a person with a Mac for Q0.2.0-2 and a browser for R13 |
| Branch | `claude/peaceful-allen-gyz1sj` |
| Next | Run qa/RELEASE.md and the next qa/v<X.Y.Z>.md when a release reaches PyPI; re-run the five Not confirmed against it. |

## The policy

not yet written; the conductor's policy.json is the shape. Until it exists the member's scope is what its ROLE.md says it owns.
