@sixseven-ai/cli
v0.1.4
Published
SixSeven CLI + MCP server for AI-driven whitebox testcase generation
Maintainers
Readme
@sixseven-ai/cli
One install, two roles:
- You use
sixsevenfrom the terminal to log in and bind a repo to a SixSeven project. - Claude Code (or Cursor / Claude Desktop) uses
sixseven mcpbehind the scenes to read your source code, author whitebox testcases, run them, and read evidence — all without leaving the repo.
Same binary, same token, same project binding.
Quick start
1. Get a SixSeven CI token
- Sign in (or create an account) at https://sixseven-space.sprout.co.id/
- Open or create a project
- Go to Integrations → CI/CD Tokens (Project)
- Type a label (e.g.
my-laptop) → click Generate token - Copy the token (starts with
67ci_). It is shown only once — save it in your password manager.
2. Install the CLI
npm i -g @sixseven-ai/cli3. Run the wizard from your app's repo
cd /path/to/your/app
sixseven setupThe wizard will ask for:
- SixSeven platform URL —
https://sixseven-space.sprout.co.id(default; just hit Enter). This is the SixSeven backend itself, not the URL of the app you want to test. - CI token — the
67ci_…you just generated.
It then binds the repo to a project and (optionally) registers the MCP server with Claude Code.
Two URLs, one wizard: the URL of the app you actually want to test (e.g. your staging or production site) is configured later — per testcase or per exploration — from inside SixSeven, not here.
sixseven setup is a 3-step wizard that:
- Logs you in — prompts for SixSeven base URL + CI token, verifies it, saves to
~/.sixseven/credentials(mode0600). Skips this step if a valid token is already saved. - Binds the repo — lists your projects, pick one, writes
.sixseven/config.json. Skips if a binding already exists (asks before re-binding). - Registers the MCP server — if the
claudeCLI is on your PATH, runsclaude mcp add sixseven -- sixseven mcpfor you. Otherwise prints copy-paste JSON for Cursor (.cursor/mcp.json) or Claude Desktop.
That's it. Open Claude Code and ask "list sixseven features" to confirm.
Workspace dev? If you haven't installed globally, the wizard auto-detects and uses the absolute path (
node /abs/path/dist/bin.js mcp) so the MCP registration still works.
Commands
| Command | What |
|---|---|
| sixseven setup | Guided wizard — start here. Login → bind project → register MCP. |
| sixseven login | Just the login step (saves token to ~/.sixseven/credentials) |
| sixseven init | Just the bind step (writes .sixseven/config.json) |
| sixseven status | Show binding + token validity + feature/testcase counts |
| sixseven doctor | Diagnose config, token, backend reachability, project access |
| sixseven mcp | Start MCP server on stdio (spawned by Claude Code; you don't run this directly) |
Advanced: manual MCP registration
If you skipped the wizard's MCP step:
# Claude Code
claude mcp add sixseven -- sixseven mcp
# Cursor — add to .cursor/mcp.json
{
"mcpServers": {
"sixseven": { "command": "sixseven", "args": ["mcp"] }
}
}MCP tools exposed
Whitebox (source code)
| Tool | Purpose |
|---|---|
| sixseven.read_code | Read a text file inside configured codeRoots |
| sixseven.list_dir | List a directory inside the repo |
| sixseven.search_code | Substring/regex search across codeRoots (≤200 hits) |
Features & testcases
| Tool | Purpose |
|---|---|
| sixseven.list_features | List features of the bound SixSeven project |
| sixseven.create_feature | Create a feature (group of testcases) |
| sixseven.list_testcases | List testcases (optionally per platform) |
| sixseven.get_testcase | Fetch a testcase by id |
| sixseven.create_testcase | Push a new testcase to a feature |
| sixseven.update_testcase | Patch an existing testcase |
Runs, execution, and evidence
| Tool | Purpose |
|---|---|
| sixseven.list_runs | List recent runs for the bound project |
| sixseven.create_run | Create a run for one or more testcases |
| sixseven.execute_run | Trigger execution (fire-and-forget, 202) |
| sixseven.get_run | Get current run state (status, reportUrl, timestamps) |
| sixseven.cancel_run | Cancel an in-flight run |
| sixseven.wait_for_run | Poll until terminal status (or timeout). Returns summary + final run |
| sixseven.list_run_testcases | List testcases attached to a specific run |
| sixseven.get_evidence | Aggregate per-case attempts + step events + failed-step screenshots |
Auto-explore (blackbox)
| Tool | Purpose |
|---|---|
| sixseven.start_exploration | Kick off SixSeven's BFS crawler on seed URLs (server-side Puppeteer) |
| sixseven.get_exploration | Read the latest exploration snapshot (status + counts) |
Bug filing
| Tool | Purpose |
|---|---|
| sixseven.file_bug | Open an issue report against the bound project (after auto-fix loop confirms a real defect) |
| sixseven.list_bugs | List issue reports for the project |
| sixseven.get_bug | Fetch a single issue report by id |
Context
| Tool | Purpose |
|---|---|
| sixseven.whoami | Echo current user + project context |
Security & telemetry
- No telemetry. The CLI makes no outbound calls except to the SixSeven backend you configured in
.sixseven/config.json. There is no analytics, no crash reporter, no usage ping. - Source code stays local. The CLI never auto-uploads files. Source content only leaves the machine if the developer (or Claude Code, on the developer's instruction) explicitly bakes it into a testcase payload.
- File reads are sandboxed. Reads are constrained to configured
codeRoots, paths inexcludeare refused, and path-traversal attempts (../, absolute paths) are rejected. - Stdout in
sixseven mcpis strict JSON-RPC. Human-readable logs go to stderr. SetSIXSEVEN_DEBUG=1to include stack traces on errors. - Credentials. Tokens are saved to
~/.sixseven/credentialswith mode0600. The directory is created with mode0700. Tokens are never logged.
Walk-through
See USAGE.md for end-to-end prompt examples that drive Claude Code through generate → run → evidence → auto-fix → file-bug loops.
Config shape
.sixseven/config.json:
{
"baseUrl": "https://sixseven.sprout.co.id",
"projectId": "uuid-of-project",
"defaultFeatureId": null,
"codeRoots": ["src", "apps"],
"exclude": ["node_modules", "dist", ".git", ".next"],
"platform": "web"
}