feat: comprehensive CLI overhaul with new commands, MCP expansion, and chat#126
Merged
tim-thacker-nullify merged 6 commits intomainfrom Mar 1, 2026
Merged
Conversation
jonathanlam
previously approved these changes
Feb 26, 2026
…d chat Rename DAST to Pentest + BugHunt to reflect the product accurately, add interactive chat with Nullify AI agents via WebSocket, setup wizard, unified findings/status commands, CI/CD gate and report commands, and expand MCP tool coverage from ~43% to ~80%+ of API endpoints. New commands: init, pentest, bughunt, chat, findings, status, ci gate, ci report New MCP: infrastructure, code reviews, comments, resources, prompts, composite workflows New packages: internal/chat, internal/pentest, internal/wizard, internal/testutil, internal/lib/git Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add features section with key value props upfront - Document all auth subcommands, MCP scoping, chat flags, and config - Consolidate MCP setup into single block with tool/path table - Add go install, install script --host flag, and requirements section - Split commands into logical groups (core, auth, scanning, CI/CD, tooling) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix goroutine leak in chat mock test (select{} → error return)
- Fix URL encoding vulnerability using url.Values in query string builders
- Extract shared lib.BuildQueryString and lib.DoGet to eliminate DRY violations
- Wire HTTPClient interface into NullifyClient for testability
- Wire APIError into HandleError for structured error responses
- Replace interface{} with any throughout new code
- Add TTY detection before emitting ANSI codes in chat renderer
- Fix init-time capture bug in wizard SummaryStep
- Fix URL bug in status.go (malformed query string with &limit=1)
- Align CI type filter names with findings.go conventions
- Add tests for countFindings, severitiesAboveThreshold, summarizeFindingsResponse
- Add tests for BuildQueryString, DoGet, endpoint filtering
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1951deb to
ca46f9d
Compare
Code reviewFound 6 issues:
Lines 37 to 40 in ca46f9d
Lines 79 to 82 in ca46f9d
Lines 179 to 183 in ca46f9d
cli/internal/mcp/tools_composite.go Line 43 in ca46f9d
cli/internal/mcp/tools_composite.go Line 38 in ca46f9d
cli/internal/mcp/tools_composite.go Lines 19 to 39 in ca46f9d Generated by the |
Resolve conflicts in go.mod and go.sum by taking newer dependency versions from main (go-github/v84, mcp-go v0.44.1, logger v1.31.0) while preserving gorilla/websocket from the feature branch. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…p-invariant calls Thread ctx from MCP tool handlers through doGet/doPost/doPut/doRequest so HTTP requests respect cancellation. Hoist buildQueryString out of loops in get_security_posture_summary and get_findings_for_repo. Also includes context propagation for lib.DoGet, CI gate error handling improvements, and tighter file permissions for MCP config. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
jonathanlam
approved these changes
Mar 1, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
dastcommand withpentest(local Docker + cloud scanning) andbughunt(cloud-only), reflecting the actual product terminologynullify chat): WebSocket-based chat with Nullify AI agents, supporting both interactive REPL and single-shot modesnullify init): First-run experience that configures domain, authentication, repo detection, and MCP integration for AI toolsnullify findings(cross-scanner query),nullify status(security posture overview),nullify ci gate(quality gate),nullify ci report(PR markdown summary)nullify://posture,nullify://repos), MCP prompts (security-review,triage-finding,explain-vulnerability), and composite workflows (remediate_finding,get_critical_path,get_security_trends)HTTPClientinterface, typedAPIError, shared git detection (internal/lib/git.go), test utilities (internal/testutil/),ParseCustomerDomain()helperNew Commands
nullify initnullify pentestdast)nullify bughuntnullify chatnullify findingsnullify statusnullify ci gatenullify ci reportNew Packages
internal/chat/internal/pentest/internal/dast/)internal/wizard/internal/testutil/internal/lib/git.goDeleted
cmd/cli/cmd/dast.go,internal/dast/,internal/commands/dast_bridge.go,internal/mcp/tools_dast.go,internal/config/config.goTest plan
go build ./...compiles cleanlygo vet ./...passesgo test -skip TestIntegration ./...— all tests pass (54 files changed, 3102 insertions)nullify --helpshows all new commandsnullify init— manual test of setup wizard flownullify chat "hello"— manual test of single-shot chatnullify mcp serve— verify all new tools/resources/prompts registerednullify pentest --help— verify flags and generated subcommandsnullify ci gate --severity-threshold critical— verify gate logic🤖 Generated with Claude Code