Focus: UI stability and efficient rendering.
* Markdown Rendering Rewrite: Removed the dependency on rich.live.Live (which caused flickering and
high CPU usage by constantly re-rendering the entire panel).
* New BlockMarkdownRenderer: Implemented in printer.py (alias IncrementalMarkdownParser), it
accumulates text in a buffer and only prints to the screen when it detects a complete block (e.g.,
line breaks or
` code blocks).
* UI Optimizations (terminal_ui.py & stubs.py): Waiting spinners now stop cleanly, and the UI
transitions smoothly to block printing. Fixed visual truncation issues in the bottom "Tab prompt"
bar for excessively long commands.
📦 2. Commit History (Last 4 Commits)
9446baf - improve ai rules
* Strict Anti-Hallucination (ai.py): Injected MANDATORY rules into the System Prompt for both
Architect and Engineer agents. Now, if the terminal buffer is empty or only contains an idle prompt
(e.g., iol#), the AI is strictly forced to state that it lacks data instead of inventing topologies
or configurations.
* Language Preference: Explicitly instructed agents to always respond in the same language the user
used to ask the question.
64377f7 - move context block logic to server and improvements
* Context Precision (ai_service.py): Moved context partitioning logic to the service/server side. It
now calculates exact start_pos and end_pos based on identified commands, preventing mixed outputs
or residual text from bleeding into the AI's prompt.
* Token Savings (server.py): The server now selectively strips garbage metadata and UI caches that
add no value to the LLM before sending the payload over the wire.
e4fd1ad - fix logclean for 6wind
* Full ANSI/CSI Support (utils.py): Replaced the legacy rigid escape filter with a complete CSI
(Control Sequence Introducer) parser. The client can now accurately process numeric cursor
movements (C, D), inline dynamic erasures (K), and absolute shifts (G), ensuring connpy understands
exactly what a 6WIND router or other VNFs render on the screen without garbage characters.
b0a914a - updates al copilot
* Copilot <> gRPC Integration: Implemented the async plumbing required for the Copilot to work over
the gRPC tunnel (server.py & stubs.py).
* Initial Streaming UI: Added the first iteration of chunk callbacks to provide real-time feedback
while the LLM generates responses, laying the groundwork for the uncommitted block-renderer
optimizations.
Connpy
Connpy is a powerful Connection Manager and Network Automation Platform for Linux, Mac, and Docker. It provides a unified interface for SSH, SFTP, Telnet, kubectl, Docker pods, and AWS SSM.
The v6 release introduces the AI Copilot, an interactive terminal assistant that understands your network context and helps you manage your infrastructure more intelligently.
🤖 AI Copilot (New in v6)
The AI Copilot is deeply integrated into your terminal workflow:
- Terminal Context Awareness: The Copilot can "see" your screen output, helping you diagnose errors or analyze command results in real-time.
- Hybrid Multi-Agent System: Automatically escalates complex tasks between the Network Engineer (execution) and the Network Architect (strategy).
- MCP Integration: Dynamically load tools from external providers (6WIND, AWS, etc.) via the Model Context Protocol.
- Interactive Chat: Launch with
conn aifor a collaborative troubleshooting session.
Core Features
- Multi-Protocol: Native support for SSH, SFTP, Telnet, kubectl, Docker exec, and AWS SSM.
- Context Management: Set regex-based contexts to manage specific nodes across different environments (work, home, clients).
- Advanced Inventory:
- Organize nodes in folders (
@folder) and subfolders (@subfolder@folder). - Use Global Profiles (
@profilename) to manage shared credentials easily. - Bulk creation, copying, moving, and export/import of nodes.
- Organize nodes in folders (
- Modern UI: High-performance terminal experience with
prompt-toolkit, including:- Fuzzy search integration with
fzf. - Advanced tab completion.
- Syntax highlighting and customizable themes.
- Fuzzy search integration with
- Automation Engine: Run parallel tasks and playbooks on multiple devices with variable support.
- Plugin System: Build and execute custom Python scripts locally or on a remote gRPC server.
- gRPC Architecture: Fully decoupled Client/Server model for distributed management.
- Privacy & Sync: Local-first encrypted storage (RSA/OAEP) with optional Google Drive backup.
Installation
pip install connpy
Run it in Windows/Linux using Docker
git clone https://github.com/fluzzi/connpy
cd connpy
docker compose build
# Run it like a native app (completely silent)
docker compose run --rm --remove-orphans connpy-app [command]
# Pro Tip: Add this alias for a 100% native experience from any folder
alias conn='docker compose -f /path/to/connpy/docker-compose.yml run --rm --remove-orphans connpy-app'
🔒 Privacy & Integration
Privacy Policy
Connpy is committed to protecting your privacy:
- Local Storage: All server addresses, usernames, and passwords are encrypted and stored only on your machine. No data is transmitted to our servers.
- Data Access: Data is used solely for managing and automating your connections.
Google Integration
Used strictly for backup:
- Backup: Sync your encrypted configuration with your Google Drive account.
- Scoped Access: Connpy only accesses its own backup files.
Usage
usage: conn [-h] [--add | --del | --mod | --show | --debug] [node|folder] [--sftp]
conn {profile,move,copy,list,bulk,export,import,ai,run,api,plugin,config,sync,context} ...
Basic Examples:
# Add a folder and subfolder
conn --add @office
conn --add @datacenter@office
# Add a node with a profile
conn --add server1@datacenter@office --profile @myuser
# Connect to a node (fuzzy match)
conn server1
# Start the AI Copilot
conn ai
# Run a command on all nodes in a folder
conn run @office "uptime"
🔌 Plugin System
Connpy supports a robust plugin architecture where scripts can run transparently on a remote gRPC server.
Structure
Plugins must be Python files containing:
- Class
Parser: Definesargparsearguments. - Class
Entrypoint: Execution logic. - Class
Preload: (Optional) Hooks and modifications to the core app.
See the Plugin Requirements section for full technical details.
Plugin Requirements for Connpy
Remote Plugin Execution
When Connpy operates in remote mode, plugins are executed transparently on the server:
- The client automatically downloads the plugin source code (
Parserclass context) to generate the localargparsestructure and provide autocompletion. - The execution phase (
Entrypointclass) is redirected via gRPC streams to execute in the server's memory. - You can manage remote plugins using the
--remoteflag.
General Structure
- The plugin script must define specific classes:
- Class
Parser: Handlesargparse.ArgumentParserinitialization. - Class
Entrypoint: Main execution logic (receivesargs,parser, andconnapp). - Class
Preload: (Optional) For modifying core app behavior or registering hooks.
- Class
Preload Modifications and Hooks
You can customize the behavior of core classes using hooks:
modify(method): Alter class instances (e.g.,connapp.config,connapp.ai).register_pre_hook(method): Logic to run before a method execution.register_post_hook(method): Logic to run after a method execution.
Command Completion Support
Plugins can provide intelligent tab completion:
- Tree-based Completion (Recommended): Define
_connpy_tree(info)returning a navigation dictionary. - Legacy Completion: Define
_connpy_completion(wordsnumber, words, info).
⚙️ gRPC Service Architecture
Connpy can operate in a decoupled mode:
- Start the API (Server):
conn api -s 50051 - Configure the Client:
conn config --service-mode remote conn config --remote-host localhost:50051
All inventory management and execution will now happen on the server.
🐍 Automation Module (API)
You can use connpy as a Python library for your own scripts.
Basic Execution
import connpy
router = connpy.node("uniqueName", "1.1.1.1", user="admin")
router.run(["show ip int brief"])
print(router.output)
Parallel Tasks with Variables
import connpy
config = connpy.configfile()
nodes = config.getitem("@office", ["router1", "router2"])
routers = connpy.nodes(nodes, config=config)
variables = {
"router1@office": {"id": "1"},
"__global__": {"mask": "255.255.255.0"}
}
routers.run(["interface lo{id}", "ip address 10.0.0.{id} {mask}"], variables)
AI Programmatic Use
import connpy
myai = connpy.ai(connpy.configfile())
response = myai.ask("What is the status of the BGP neighbors in the office?")
For detailed developer notes and plugin hooks documentation, see the Documentation.
