Skip to main content
  1. Documentation/
  2. Reference/

Changelog

Table of Contents

v0.4.0
#

Web UI overhaul, server-side shells, session disconnect detection, relay protocol negotiation, and CLI quality-of-life improvements.

Server-Side Shell Sessions
#

  • Agent terminal via WebSocket: The Agent Detail terminal tab now runs the Python agent shell server-side and streams I/O through WebSocket events (agent_shell_open/input/output/close)
  • Tools shell via WebSocket: The interactive tools shell is now backed by a server-side session streaming through WebSocket events (tools_shell_open/input/output/close)
  • Shell REST API: New endpoints at /api/v1/shell/agent and /api/v1/shell/tools for opening, sending input to, polling output from, and closing shell sessions

Web UI Improvements
#

  • Tasks tab: New dedicated tab on Agent Detail for form-based task creation — pick a command from a dropdown and fill in structured inputs, no raw JSON required
  • Builds page card flow: Builds page now opens with a package browser (card grid); click a card to navigate to the build form for that package
  • Tools page card flow: Tools page now opens with a module browser (card grid); click a card to navigate to the execution interface for that module
  • P2P Topology enhancements: Relay chain edges now show port and protocol labels (e.g., tcp/4444); agent nodes are color-coded by status; session agents that disconnect show immediately as dead (red)
  • Session agent disconnect status: Dead session agents show a “Disconnected” badge in real time without waiting for the background scanner

Session Disconnect Detection
#

  • TCP transport on_disconnect callback: When a TCP session drops, the transport notifies the server immediately
  • Immediate dead transition: Session agents skip the dormant state and transition directly from active to dead on disconnect
  • Instant WebSocket event: agent_status_changed with status: "dead" is emitted the moment the TCP connection drops

Relay Protocol Negotiation
#

  • supported_relay_protocols in AgentPackage: Agent packages declare which protocols interior agents can use to relay through them (e.g., ["tcp"])
  • relay_protocols in agent registration: Agents report their relay protocols at registration; the value is exposed in the capabilities API response
  • Build flow filtering: When building an interior agent, the protocol dropdown is filtered to only protocols the selected relay agent supports
  • API: GET /api/v1/agents/<id>/capabilities now includes a relay_protocols field

CLI Improvements
#

  • Listener IP completions: --listener name:<TAB> in agents generate now completes with the IPs the teamserver knows about for that listener
  • Help completions: help <TAB> completes command group names; help agents<TAB> completes sub-command names for that group

API Additions
#

  • POST /shell/agent — open agent shell session
  • POST /shell/agent/input — send input to agent shell
  • GET /shell/agent/output — poll agent shell output
  • POST /shell/agent/close — close agent shell session
  • POST /shell/tools — open tools shell session
  • POST /shell/tools/input — send input to tools shell
  • GET /shell/tools/output — poll tools shell output
  • POST /shell/tools/close — close tools shell session

New WebSocket Events
#

EventTrigger
agent_shell_openAgent shell session opened
agent_shell_outputOutput from agent shell
agent_shell_closeAgent shell session closed
tools_shell_openTools shell session opened
tools_shell_outputOutput from tools shell
tools_shell_closeTools shell session closed

v0.3.0
#

Plugin extraction — all transports, tools, and agents are now independent packages. A default install includes only the core teamserver.

Plugin Extraction
#

  • Bare core: Default pip install tantoc2 includes no transports, tools, agents, or modules
  • Transport packages: HTTP and TCP transports extracted to tantoc2-transport-http and tantoc2-transport-tcp
  • Tool packages: SSH tool extracted to tantoc2-tool-ssh
  • Entry-point discovery: All plugin types now support discovery via Python entry points (tantoc2.transports, tantoc2.agentless_modules, tantoc2.agent_packages, etc.)
  • Standalone package layout: Each plugin is a self-contained package with its own pyproject.toml, tests, and dependencies
  • Bundled agent modules: Agent packages can now bundle their own modules via agent_modules_dir() — the registry scans package-bundled modules alongside the standalone directory
  • Package module discovery: AgentModuleRegistry.discover_from_packages() scans installed agent packages for bundled modules at startup

Entry Point Groups
#

GroupPurpose
tantoc2.transportsTransport plugins (HTTP, TCP, custom)
tantoc2.agentless_modulesTools modules (SSH, SMB, custom)
tantoc2.agent_packagesAgent packages
tantoc2.crypto_providersCrypto providers
tantoc2.protocol_codecsProtocol codecs

v0.2.0
#

Stage 2 & 3 complete — agent module system, P2P networking, CLI/Web UI hardening, and dev agent built-in commands.

Agent Module System
#

  • Capability declarations: Agent packages declare supported module formats, built-in commands, and capabilities (supports_daemonize, supports_relay)
  • Agent module registry: Server-side module inventory with YAML manifests, compatibility filtering by format/platform/architecture
  • Managed mode: Agent-controlled module lifecycle with results flowing back through the loading agent’s channel; supports streaming results over multiple check-in cycles
  • Daemonized mode: Payload runs independently; if the payload is an agent, it registers as a new child agent with parent-child relationship tracking

P2P Chaining & Relay
#

  • Agent-to-agent relay: Agents forward traffic for interior agents without direct teamserver contact
  • P2P topology: Parent-child agent relationships tracked and visualized via agents topology command and Web UI Topology page
  • Relay chain tracking: Full relay path queryable via agents chain <id> and GET /agents/<id>/chain
  • Auto-topology discovery: Pipeline automatically discovers relay relationships from forwarded messages
  • End-to-end encryption: Relay agents handle only opaque ciphertext

Dev Agent Enhancements
#

  • Built-in commands: ls, ps, netstat, pwd, cat, cd, whoami, env, upload, download, load_module, unload_module
  • Loadable modules: exec (command execution) and sysinfo (system reconnaissance)
  • TCP session mode: Interactive command shell over persistent TCP connections
  • Smart result display: Formatted tables for directory listings and process info; colored error output
  • Relay support: Dev agent can act as a P2P relay for interior agents

Web UI Refresh
#

  • P2P Topology page: Tree visualization of agent hierarchy with relay relationships
  • Agent Modules page: Searchable module catalog with compatibility filtering and load-into-agent workflow
  • Tools page: Renamed from “Agentless” — unified SSH/SMB/custom service interaction
  • Enhanced Agent Detail: Capabilities tab, loaded modules tab with unload controls, relay tab
  • Enhanced Agents table: Mode column, callback IP, relay status, real-time P2P updates via WebSocket
  • Enhanced Listeners page: TCP and external listener types with callback_protocol field
  • Enhanced Builds page: Listener-based workflow (no manual callback entry)
  • Improved Dashboard: Sessions card, P2P links card, relay agents card
  • Auth improvements: Token validation on startup, refresh failure handling

CLI Refinement
#

  • Interactive TUI: Textual-based terminal UI with panels and split views
  • Agent shell: agents use <hostname> enters per-agent interactive shell with built-in commands, module loading, file transfers
  • Group shell: agents group use <name> for multi-agent batching
  • Tools shell: tools use <name> for interactive agentless sessions
  • Theme system: 5 themes (default, monokai, hotdog_stand, light, matrix) with Ctrl+P picker
  • Path completion: Local filesystem (upload) and remote (via agent ls)
  • Background tasks: & suffix for async execution with results polling

Plugin System
#

  • Plugin inbox: Drop .py or .whl files into the inbox directory for auto-routing and installation
  • Plugin watcher: Background service monitors plugin directories for changes (configurable interval)
  • Dependency auto-install: Modules declaring dependencies in metadata get pip packages installed at discovery time
  • Unavailable tracking: Modules with missing dependencies are tracked with reasons via unavailable_modules property

API Additions
#

  • GET /agents/<id>/capabilities — agent package capabilities
  • GET /agents/<id>/modules/loaded — list loaded modules
  • POST /agents/<id>/modules/load — load agent module
  • POST /agents/<id>/modules/unload — unload managed module
  • GET /agents/topology — P2P topology graph
  • POST /agents/<id>/relay — set relay
  • DELETE /agents/<id>/relay — remove relay
  • GET /agents/<id>/chain — relay chain
  • POST /agentless/sessions — interactive agentless session
  • GET /agentless/sessions — list sessions
  • DELETE /agentless/sessions/<id> — close session
  • GET /agentless/sessions/<id>/output — poll session output
  • POST /agentless/sessions/<id>/input — send session input
  • GET /api/v1/plugins/ — list all plugins
  • POST /agent-modules/refresh — refresh agent module registry
  • GET /agent-modules/compatible/<agent_id> — compatible modules for agent

Collection Requests & File Explorer
#

  • Collection request workflow: Collectors can request file downloads from agents; operators approve or deny with full API/CLI/web UI support
  • CollectionRequest model: Tracks request lifecycle (pending, approved, denied) with links to resulting file transfers
  • File explorer: Web UI page showing agent filesystem trees built from cached ls results
  • Agent filesystem API: GET /agents/<id>/filesystem returns cached directory structure
  • Nav badge: Pending collection request count shown in web UI navigation
  • Admin password reset: Web UI inline password reset for operators

Operational Polish
#

  • Comprehensive audit logging across all 39 mutating API routes
  • Agent display names: hostname:shortid format for unambiguous agent resolution
  • Remote path completion: Cache-only from ls results (no implicit C2 traffic)
  • Local shell: local_shell command and ! prefix in all shells and TUI
  • File transfer display: Upload/download result formatters hide base64 blobs
  • Dev agent: 10MB file transfer size guard
  • Session agent polling: Mode-aware display with wake-event polling (~50ms for sessions vs beacon interval for beacons)

Bug Fixes
#

  • Fixed builtin_commands key mismatch causing commands to not appear
  • Fixed listener panel focus skip on Ctrl+L
  • Fixed results command TUI hang with background tasks
  • Fixed path completion double-slash issues
  • Fixed SSH interactive session output formatting
  • Fixed upload/download using FileTransfer ID instead of Task ID

v0.1.0
#

Stage 1 complete — all core functionality validated with the Python dev agent.

Features
#

  • Teamserver: Single-process Python server with Flask REST API and WebSocket events
  • CLI: Interactive operator shell with tab completion, multi-tab sessions, and JSON mode
  • Web UI: React-based interface with real-time dashboards and xterm.js agent terminals
  • Client Library: Typed Python client for all API endpoints
  • Plugin System: Hot-reloadable server modules, transport plugins, agentless modules, and agent packages (all independently installable)
  • Engagement Isolation: Per-engagement SQLite databases with encrypted at-rest storage
  • RBAC: Four-tier role model (Admin, Operator, Spectator, Collector) with dynamic collector grants
  • Security: ECDH key exchange, AES-256-GCM wire encryption, PBKDF2 master keys, log redaction
  • Agent Build Pipeline: Config stamping with encrypted configuration blobs
  • Agentless Operations: Direct service interaction (SSH, SMB) with proxy and credential integration
  • Credential Store: Auto-extraction from module results, search, and multi-format export
  • File Transfers: Upload/download with SHA-256 hash verification
  • Background Services: Dead agent detection, stale task cleanup, key rotation, task archival
  • Audit Logging: Full action attribution with security event flagging