Skip to main content

Tenx assessment CLI

Project description

cli

CLI client for Tenx hiring assessments.

Highlights

  • Uses the Claude Agent SDK for local interactive coding sessions.
  • Appends each REPL turn to .tenx/assessment_turns.jsonl (when a session id is present).
  • tenx-submit uploads pending turns to proxy, then runs the FRQ phase and saves free-response rows.

Setup

python -m venv .venv
.venv\Scripts\activate
pip install -e ".[dev]"
copy .env.example .env

Set ANTHROPIC_API_KEY in .env before running.

Run

tenx-ai

The CLI starts a 60-minute assessment timer when the process starts. Use /time to display the remaining time.

Set TENX_ASSESSMENT_DURATION_SECONDS in .env to override the timer length.

Or:

python -m assessment_cli

Edit approval mode

Set TENX_EDIT_APPROVAL=true in .env to review proposed Write, Edit, and Bash tool actions before they run.

  • TENX_EDIT_APPROVAL=false (default): similar to Claude Code acceptEdits for file edits.
  • TENX_EDIT_APPROVAL=true: similar to Claude Code default mode for these tools.

Approval keys:

  • y accept
  • n reject
  • d show full diff
  • ? show key help

Compared to Claude Code, this is a focused terminal subset of the same permission model concepts. For full Claude Code mode controls, see the CLI reference.

Submit changes

Run this from your assessment workspace to stage, commit, and push:

tenx-submit

Optional commit message:

tenx-submit --message "Assessment submission"

By default, after a successful push, tenx-submit:

  • Uploads any pending lines from .tenx/assessment_turns.jsonl to the proxy (then clears that file on success).
  • Starts an FRQ phase: generates questions from your most recent commit (HEAD), prompts for answers, and saves rows to proxy.

For local development, set ENV=local in .env to skip git add / commit / push and go straight to upload + FRQ (workspace must still be a git repository for FRQ context).

Chat history persistence

Set these in .env to enable persistence:

  • ASSESSMENT_PROXY_URL (for example http://localhost:8000)
  • ASSESSMENT_PROXY_TOKEN (must match the proxy’s PROXY_BEARER_SECRET)

When ASSESSMENT_PROXY_URL is unset, there is no session id and no JSONL logging to the proxy. FRQ persistence also requires the URL and token.

With ASSESSMENT_PROXY_URL set, the first tenx-ai run creates a session and writes .tenx/assessment_session_id; later runs reuse it until tenx-submit succeeds (which clears the JSONL upload and that file so the next assessment gets a new session).

Breaking change (Phase 0)

The proxy path and JSON shape changed: see proxy/README.md.

Security notes for Codespaces

  • Do not store the Supabase secret API key in the CLI.
  • Use only proxy URL and bearer token in CLI env.
  • Treat ASSESSMENT_PROXY_TOKEN as sensitive and rotate if leaked.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tenx_ai-0.3.0.tar.gz (48.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tenx_ai-0.3.0-py3-none-any.whl (55.9 kB view details)

Uploaded Python 3

File details

Details for the file tenx_ai-0.3.0.tar.gz.

File metadata

  • Download URL: tenx_ai-0.3.0.tar.gz
  • Upload date:
  • Size: 48.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.6

File hashes

Hashes for tenx_ai-0.3.0.tar.gz
Algorithm Hash digest
SHA256 847ecd9fff59bb1a29782e557d4ce8006092dfe7e01a685e65f323d688a41bb9
MD5 279bb3e68e97314b458af0f32698ce6c
BLAKE2b-256 ff95974a746133cb93fb19a25f92cdd8aa53ba7f06318d05f142f47d0956b860

See more details on using hashes here.

File details

Details for the file tenx_ai-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: tenx_ai-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 55.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.6

File hashes

Hashes for tenx_ai-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d16766928771072f0f537d16ae06379851dfc3d500d9091ddd9bb2949e01285d
MD5 7c1cd98475a09ff4b87b8baedeb70793
BLAKE2b-256 49ea4f59506651b768a6cd257eb0fac534eebe1e82e48ca0158d608ed581f9da

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page