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.2.2.tar.gz (42.1 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.2.2-py3-none-any.whl (49.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: tenx_ai-0.2.2.tar.gz
  • Upload date:
  • Size: 42.1 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.2.2.tar.gz
Algorithm Hash digest
SHA256 774a011533150a4afa869ca7d0c1561c5778b16868e3317d471fcc8c7c071fa8
MD5 2ec02faba46b9d3a2785f7bedb03ad75
BLAKE2b-256 14e924b712bfa91b3112c5f739bcf08d3aa8eca3c67ebcc60c8b0105a5e07f54

See more details on using hashes here.

File details

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

File metadata

  • Download URL: tenx_ai-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 49.0 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.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 70504205b2f008aeaa666a3ccbe4899f20eeddbdcaa76b303ca30c164bc237b0
MD5 799fdc76099b61041e61f0303bd490dd
BLAKE2b-256 b3faea6738b1778922bc3fadfbc7c8e83f616cf3b18ab7ac1c7695a2bc5d1723

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