Use this before sharing the repository with outside users.
- No real API keys in git.
config.yamlexamples usemodel.api_key_env, not literal keys..env,.env.*, state databases, logs, artifacts, and browser profiles are ignored.nipux doctorreports missing remote API-key environment variables without printing key values.
uv tool install --editable .works from a checkout.uv run nipux --helpworks without installing.NIPUX_HOME=$(mktemp -d) uv run nipuxopens the first-run terminal UI, not argparse help or an ASCII-only prompt.nipux initwrites the default Qwen/OpenRouter~/.nipux/config.yamland a blank~/.nipux/.envtemplate.nipux doctorpasses for local runtime checks after initialization.nipux daemon --once --fakeruns without a model key.
nipux start,nipux stop, andnipux restartrecover stale daemon state.nipux status,nipux activity,nipux history, andnipux artifactsexpose enough state to debug jobs.- Worker prompts stay bounded and do not replay raw transcript history.
- Operator chat that is only conversational stays in history but does not remain active worker context.
- Measurable jobs record experiments instead of treating notes as progress.
- Status, outcomes, and work panes show different layers clearly: jobs and latest outputs, durable progress by hour, and raw tool/console events.
python -m compileall nipux_cli tests/nipux_cli
uv run --extra dev python -m pytest tests/nipux_cli -q
uv run --extra dev ruff check nipux_cli tests/nipux_cli
rg -n --hidden -S "(sk-[A-Za-z0-9_-]{20,}|OPENROUTER_API_KEY[=].+|OPENAI_API_KEY[=].+|Bearer\\s+[A-Za-z0-9._-]{20,})" . \
-g '!uv.lock' -g '!**/__pycache__/**' -g '!*.db' -g '!*.log' -g '!*.pyc'