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/agentand/api/v1/shell/toolsfor 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_disconnectcallback: When a TCP session drops, the transport notifies the server immediately - Immediate dead transition: Session agents skip the
dormantstate and transition directly fromactivetodeadon disconnect - Instant WebSocket event:
agent_status_changedwithstatus: "dead"is emitted the moment the TCP connection drops
Relay Protocol Negotiation#
supported_relay_protocolsin AgentPackage: Agent packages declare which protocols interior agents can use to relay through them (e.g.,["tcp"])relay_protocolsin 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>/capabilitiesnow includes arelay_protocolsfield
CLI Improvements#
- Listener IP completions:
--listener name:<TAB>inagents generatenow 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 sessionPOST /shell/agent/input— send input to agent shellGET /shell/agent/output— poll agent shell outputPOST /shell/agent/close— close agent shell sessionPOST /shell/tools— open tools shell sessionPOST /shell/tools/input— send input to tools shellGET /shell/tools/output— poll tools shell outputPOST /shell/tools/close— close tools shell session
New WebSocket Events#
| Event | Trigger |
|---|---|
agent_shell_open | Agent shell session opened |
agent_shell_output | Output from agent shell |
agent_shell_close | Agent shell session closed |
tools_shell_open | Tools shell session opened |
tools_shell_output | Output from tools shell |
tools_shell_close | Tools 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 tantoc2includes no transports, tools, agents, or modules - Transport packages: HTTP and TCP transports extracted to
tantoc2-transport-httpandtantoc2-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#
| Group | Purpose |
|---|---|
tantoc2.transports | Transport plugins (HTTP, TCP, custom) |
tantoc2.agentless_modules | Tools modules (SSH, SMB, custom) |
tantoc2.agent_packages | Agent packages |
tantoc2.crypto_providers | Crypto providers |
tantoc2.protocol_codecs | Protocol 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 topologycommand and Web UI Topology page - Relay chain tracking: Full relay path queryable via
agents chain <id>andGET /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) andsysinfo(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_protocolfield - 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
.pyor.whlfiles 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
dependenciesin metadata get pip packages installed at discovery time - Unavailable tracking: Modules with missing dependencies are tracked with reasons via
unavailable_modulesproperty
API Additions#
GET /agents/<id>/capabilities— agent package capabilitiesGET /agents/<id>/modules/loaded— list loaded modulesPOST /agents/<id>/modules/load— load agent modulePOST /agents/<id>/modules/unload— unload managed moduleGET /agents/topology— P2P topology graphPOST /agents/<id>/relay— set relayDELETE /agents/<id>/relay— remove relayGET /agents/<id>/chain— relay chainPOST /agentless/sessions— interactive agentless sessionGET /agentless/sessions— list sessionsDELETE /agentless/sessions/<id>— close sessionGET /agentless/sessions/<id>/output— poll session outputPOST /agentless/sessions/<id>/input— send session inputGET /api/v1/plugins/— list all pluginsPOST /agent-modules/refresh— refresh agent module registryGET /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
lsresults - Agent filesystem API:
GET /agents/<id>/filesystemreturns 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:shortidformat for unambiguous agent resolution - Remote path completion: Cache-only from
lsresults (no implicit C2 traffic) - Local shell:
local_shellcommand 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_commandskey 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