Solvewright connector
Practise live technical interviews in Solvewright Interview Lab with the Claude Code or Codex you already use. The interviewer runs on your computer, under your own sign-in and plan. Solvewright provides the room: the problem, the editor, the tests, the conversation, your history and your skill profile.
uvx solvewright
No uv? pipx run solvewright works the same way, or python3 -m pip install --user solvewright and
then solvewright. Python 3.10 or newer. The package has no dependencies.
What happens when you run it
- The terminal lists this computer, the agents it found and where interviews are kept.
- It prints a short code and opens
solvewright.app/connect. Check that the page shows the same code, then press Connect this computer. You must be signed in to Solvewright. - The terminal says which account it joined. Keep the window open while you practise; it prints one line for each thing it does (a round prepared, a reply, tests recorded).
- Press Ctrl+C to stop. Nothing keeps running in the background, and nothing starts again by itself.
Next time, run the same command again: it reconnects without a new code, and the terminal reminds you
which command that is. uvx and pipx run keep the package in a cache and add no solvewright
command to your shell, so with them, put uvx or pipx run in front of the commands below (for
example uvx solvewright status). Removing this computer from Interview Lab stops its key at once.
| Command | Does |
|---|---|
solvewright |
Connect if needed, then wait for rounds |
solvewright connect |
Approve this computer again, with a new key |
solvewright status |
Show the connection and the agents found here |
solvewright disconnect |
Remove this computer from your account |
solvewright doctor |
Check Python, Claude Code, Codex and the sandbox |
What it can and cannot do
The connector is deliberately small. Every request it accepts is one of a fixed list: report its status, start a round, pass your message to the interviewer, save your files, record a test result, stop the interviewer, and sync your history. There is no request that runs a command.
- It opens no port. It connects out to Solvewright over HTTPS and asks for work.
- It only takes requests from your account. This computer's key is issued after you approve it
in the browser, is stored only here (
connection.json, readable by you alone), and the service keeps a hash of it. - It never sees your Claude or ChatGPT credentials. It starts the official
claudeorcodexprogram, unmodified, which signs in the way it always does. Usage counts against your own plan. - It never runs your code. Public tests and the interviewer's private checks run in your browser, in Pyodide for Python or Clang for C++ (compiled to WebAssembly); the page shows each check's label and result, never its code. The connector only stores the files you tested and the results.
- It reports progress, not content. While the interviewer works, the page learns which kind of step it is on (reading your code, writing its notes, running its checks), never what it reads, writes or says. It also passes on your plan's usage when the agent reports it (Codex's usage windows, Claude Code's rate-limit events), read without a model call, so replies can use less effort when your window is nearly spent.
- It does not update itself. What runs is the version you installed from PyPI. The interviewer's
instructions ship inside the package (
src/solvewright/interviewer/), so you can read exactly what your agent is told.
C++ rounds (0.1.7)
The computer reports C++ only after c++, g++ or clang++ compiles and runs a small C++20
probe. Install Xcode Command Line Tools on macOS (xcode-select --install) or build-essential
on Linux, then restart the connector. Native Windows supports Codex with a working GNU-style
clang++ or g++ C++20 toolchain (LLVM/MinGW); MSVC cl.exe is not supported. Claude Code needs
a command sandbox on macOS, Linux or WSL2 and cannot verify C++ on native Windows.
The candidate writes solution.hpp. Tests in tests/test_*.cpp and private checks in
.examiner/checks/test_*.cpp use the bundled check.hpp (identical to the page's header), with
TEST, CHECK and CHECK_EQ. Checks retain their labels and notes in checks.json. The agent
verifies each part natively in its sandbox with C++20, -fno-exceptions -O1 -Wall -I. -I.sw, proving
that the reference passes and a wrong solution fails before releasing it. Only the browser runs
candidate code. Its one-time compiler download is about 17.5 MB from jsDelivr.
Rounds use one thread and no exceptions: a library operation that would throw aborts; explicit
throw/try/catch cannot compile. Cost requirements use counted allocations, comparisons or copies,
never wall-clock timing. Allocation checks use strings longer than 22 characters to avoid differing
inline-string capacities between the browser and macOS. Each browser test has a fresh instance and
a 5 second safety limit. Run file accepts a C++ source with its own main().
The interviewer's sandbox
The interviewer writes the problem and checks its own reference solution, so it needs to run code. It does that inside its own agent's sandbox, confined to the folder of the current round. C++ verification adds read access only to the discovered compiler, SDK, include and library folders and the folders needed to resolve their symbolic links. It adds no write or network access:
| Commands | Files | Network | |
|---|---|---|---|
| Claude Code, macOS and Linux | Claude Code's OS sandbox | Read and write only in the round folder; the rest of your home folder is unreadable | None |
| Codex, macOS and Linux | Codex's sandbox with a Solvewright permission profile | Read and write in your interview folders; read the folders Codex itself is installed in; the rest of your home folder is unreadable | None |
| Claude Code, native Windows | No command tool at all: its sandbox needs macOS, Linux or WSL2 | The file tools stay in the round folder | None |
Claude Code runs with --restricted --safe-mode --strict-mcp-config: your own CLAUDE.md, hooks,
plugins and MCP servers are not loaded. Codex runs through its documented app-server with its plugins,
apps, hooks, web search, memories and every MCP server you configured switched off for the interview.
If a platform cannot provide one of these limits, the connector removes the capability rather than the
limit, and says so in the terminal and in Interview Lab. On Linux, Claude Code's sandbox needs
bubblewrap and socat.
What is stored where
On this computer, in one folder (solvewright status prints it):
| System | Folder |
|---|---|
| macOS | ~/Library/Application Support/Solvewright |
| Windows | %LOCALAPPDATA%\Solvewright |
| Linux | $XDG_DATA_HOME/solvewright, by default ~/.local/share/solvewright |
Each round is a folder holding the candidate files, the interviewer's private files, snapshots of what you submitted, and the conversation. When you are signed in, Interview Lab also keeps a copy in your Solvewright account so you can continue on another computer; deleting your account deletes it. Your agent sends what it reads to its own provider (Anthropic or OpenAI) under your account's terms, as it does in any other session. Details: solvewright.app/privacy.
Read the code
About 1,800 lines of Python in src/solvewright/:
| File | Role |
|---|---|
cli.py |
The commands and everything the terminal prints |
connection.py |
The browser approval and the saved key |
service.py |
The only network calls: HTTPS to Solvewright's account service |
worker.py |
The fixed list of requests and the loop that fetches them |
agents.py |
How Claude Code and Codex are started, and their sandbox settings |
runtime.py |
Rounds on disk, account-history sync, the interviewer's turns |
interviewer/ |
The instructions and references the interviewer reads |
The account service address and its publishable key are in settings.py. They are the same public
values every visitor's browser receives from solvewright.app.
Run the tests from this folder with PYTHONPATH=src python -m unittest discover -s tests (on Windows, set PYTHONPATH=src first).
Licence
MIT. Solvewright is not affiliated with Anthropic or OpenAI. Claude Code and Codex are their respective owners' products; this program runs the versions you installed.
Finished Python and C++ rounds can be kept as reusable exercises. The read-only
/sessions/<id>/pack operation reads frozen assets from .examiner/pack/, in the
library's solvewright-round-v1 JSON format. It excludes the candidate workspace,
conversation and personal assessment. The examiner maintains a small manifest
and a reference for each part as described in interviewer/references/round-pack.txt.
Older rounds without these assets fail with a specific explanation; the connector
does not infer a starter or a contract from candidate code or chat. The page stores
kept rounds per reader in IndexedDB, and can export or import one JSON file.
Metadata
Release files for solvewright 0.1.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| solvewright-0.1.7.tar.gz | 113.1 kB | With provenance | Details for solvewright-0.1.7.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| solvewright-0.1.7-py3-none-any.whl | Python 3 | none | any | Details for solvewright-0.1.7-py3-none-any.whl |
Total release size: 222.3 kB
Release files / solvewright-0.1.7.tar.gz
| Download URL | solvewright-0.1.7.tar.gz |
|---|---|
| Size | 113.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f3027663288aa8621ce00018f6c5c8e737e6ff4e3fe72fa341b3f5444ccb856c
|
|
BLAKE2b-256 checksum How to use checksums |
7c2bf149f46dbad79091a22e99d71ae8598c5372017bcde83852532151f11bdf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 11, 2026.
Transparency logRelease files / solvewright-0.1.7-py3-none-any.whl
| Download URL | solvewright-0.1.7-py3-none-any.whl |
|---|---|
| Size | 109.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5c300f3db3da62201e51ee2b82eeeb503c31137f906382816902d487e4f889f8
|
|
BLAKE2b-256 checksum How to use checksums |
4b8a19984c33a0c73d2f074ec9a2509e19002916f89950f442b535f91ba811c3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 11, 2026.
Transparency logSecurity for solvewright 0.1.7
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for solvewright-0.1.7.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 11, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.