Skip to main content

Feature-rich interactive CLI for AWS Strands agents with token tracking, prompt templates, aliases, and configuration

Project description

Basic Agent Chat Loop

PyPI version Python 3.8+ Tests codecov License: MIT

A feature-rich, interactive CLI for AWS Strands agents with token tracking, prompt templates, agent aliases, and extensive configuration options.

Features

  • ๐Ÿท๏ธ Agent Aliases - Save agents as short names (chat_loop pete instead of full paths)
  • ๐Ÿ“ฆ Auto-Setup - Automatically install agent dependencies from requirements.txt or pyproject.toml
  • ๐Ÿ”” Audio Notifications - Play sound when agent completes a turn (cross-platform support)
  • ๐ŸŽต Harmony Support - Specialized processing for OpenAI Harmony format (gpt-oss models)
  • ๐Ÿ“œ Command History - Navigate previous queries with โ†‘โ†“ arrows (persisted to ~/.chat_history)
  • โœ๏ธ Multi-line Input - Type \\ to enter multi-line mode with Ctrl+D to cancel and โ†‘ to edit previous lines
  • ๐Ÿ’พ Session Management - Save conversations as clean markdown files in ./.chat-sessions/ (project-local)
  • ๐Ÿ“‹ Copy Commands - Copy responses, queries, code blocks, or entire conversations to clipboard
  • ๐Ÿ’ฐ Token Tracking - Track tokens and costs per query and session
  • ๐Ÿ“ Prompt Templates - Reusable prompts from ~/.prompts/
  • โš™๏ธ Configuration - YAML-based config with per-agent overrides
  • ๐Ÿ“Š Status Bar - Real-time metrics (queries, tokens, duration)
  • ๐Ÿ“ˆ Session Summary - Full statistics displayed on exit
  • ๐ŸŽจ Rich Formatting - Enhanced markdown rendering with syntax highlighting
  • ๐Ÿ”„ Error Recovery - Automatic retry logic with exponential backoff
  • ๐Ÿ” Agent Metadata - Display model, tools, and capabilities

Installation

Quick Install (Recommended)

pip install basic-agent-chat-loop

That's it! The package will automatically create:

  • ~/.chatrc - Configuration file with recommended defaults
  • ~/.prompts/ - Sample prompt templates (on first use)

Platform-Specific Options

Windows: Command history support (pyreadline3) is now installed automatically on Windows - no extra steps needed!

AWS Bedrock integration:

pip install basic-agent-chat-loop[bedrock]

From Source

For development or the latest features:

git clone https://github.com/Open-Agent-Tools/Basic-Agent-Chat-Loop.git
cd Basic-Agent-Chat-Loop
pip install -e ".[dev]"

See docs/INSTALL.md for detailed installation instructions and troubleshooting.

Quick Start

Basic Usage

# Run with agent path
chat_loop path/to/your/agent.py

# Or use an alias (after saving)
chat_loop myagent

Agent Aliases

Save frequently used agents for quick access:

# Save an agent as an alias
chat_loop --save-alias myagent path/to/agent.py

# Use the alias from anywhere
chat_loop myagent

# List all saved aliases
chat_loop --list-aliases

# Remove an alias
chat_loop --remove-alias myagent

Example with real agents:

# Save your agents
chat_loop --save-alias pete ~/agents/product_manager/agent.py
chat_loop --save-alias dev ~/agents/senior_developer/agent.py

# Use them from anywhere
cd ~/projects/my-app
chat_loop dev  # Get coding help
chat_loop pete  # Get product feedback

Aliases are stored in ~/.chat_aliases and work from any directory.

Auto-Setup Dependencies

Automatically install agent dependencies with the --auto-setup flag (or -a for short):

# Auto-install dependencies when running an agent
chat_loop myagent --auto-setup
chat_loop path/to/agent.py -a

# Works with any of these dependency files:
# - requirements.txt (most common)
# - pyproject.toml (modern Python projects)
# - setup.py (legacy projects)

Smart detection: If you run an agent without --auto-setup and dependency files are detected, you'll see a helpful suggestion:

chat_loop myagent
๐Ÿ’ก Found requirements.txt in agent directory. Run with --auto-setup (or -a) to install dependencies automatically

What gets installed:

  • requirements.txt โ†’ pip install -r requirements.txt
  • pyproject.toml โ†’ pip install -e <agent_directory>
  • setup.py โ†’ pip install -e <agent_directory>

This makes sharing agents easierโ€”just include a requirements.txt with your agent and users can install everything with one command.

Prompt Templates

The package automatically creates sample templates in ~/.prompts/ on first use:

  • explain.md - Explain code in detail
  • review.md - Code review with best practices
  • debug.md - Help debugging issues
  • optimize.md - Performance optimization suggestions
  • test.md - Generate test cases
  • document.md - Add documentation

Use templates in chat:

chat_loop myagent
You: /review src/app.py
You: /explain utils.py
You: /test my_function

Create custom templates:

# Create your own template
cat > ~/.prompts/security.md <<'EOF'
# Security Review

Please review this code for security vulnerabilities:

{input}

Focus on:
- Input validation
- Authentication/authorization
- Data sanitization
- Common security patterns
EOF

# Use it in chat
You: /security auth.py

Configuration

A configuration file (~/.chatrc) is automatically created on first use with recommended defaults. You can customize it to your preferences:

features:
  auto_save: true             # Automatically save conversations on exit
  show_tokens: true           # Display token counts
  show_metadata: true         # Show agent model/tools info
  rich_enabled: true          # Enhanced formatting

ui:
  show_status_bar: true       # Top status bar
  show_duration: true         # Query duration

audio:
  enabled: true               # Play sound when agent completes
  notification_sound: null    # Custom WAV file (null = bundled sound)

harmony:
  enabled: auto               # Harmony processing (auto/yes/no)
  show_detailed_thinking: true  # Show reasoning with labeled prefixes

behavior:
  max_retries: 3              # Retry attempts on failure
  timeout: 120.0              # Request timeout (seconds)

# Per-agent overrides
agents:
  'Product Pete':
    features:
      show_tokens: false
    audio:
      enabled: false          # Disable audio for this agent

Audio Notifications

Audio notifications alert you when the agent completes a response. Enabled by default with a bundled notification sound.

Platforms supported:

  • macOS (using afplay)
  • Linux (using aplay or paplay)
  • Windows (using winsound)

Configure audio in ~/.chatrc:

audio:
  enabled: true
  notification_sound: null    # Use bundled sound

  # Or specify a custom WAV file:
  # notification_sound: /path/to/custom.wav

Per-agent overrides:

agents:
  'Silent Agent':
    audio:
      enabled: false  # Disable audio for this agent

See CONFIG.md for full configuration options.

Commands

Command Description
#help Show help message
#info Show agent details (model, tools)
#context Show token usage and context statistics
#templates List available prompt templates
#sessions List all saved conversation sessions
/name Use prompt template from ~/.prompts/name.md
#resume <#> Resume a previous session by number or ID
#compact Save session and continue in new session with summary
#copy Copy last response to clipboard (see variants below)
#clear Clear screen and reset agent session
#exit, #quit Exit chat (shows session summary)

Session Management

Save conversations automatically:

# Enable auto-save in config
features:
  auto_save: true

Resume a previous conversation:

# In chat - list sessions
You: #sessions

Available Sessions (3):
  1. MyAgent - Jan 26, 14:30 - 15 queries
     "Can you help me build a REST API..."

  2. MyAgent - Jan 25, 09:15 - 7 queries
     "Explain async/await in Python..."

# Resume by number or session ID
You: #resume 1

๐Ÿ“‹ Loading session...
โœ“ Found: MyAgent - Jan 26, 14:30 (15 queries, 12.5K tokens)
๐Ÿ”„ Restoring context...

MyAgent: I've reviewed our previous conversation about building a REST API.
We discussed Flask routing and database models. Ready to continue!

# Continue conversation with restored context
You: Let's add authentication now

Compact current session:

When your conversation gets long, use #compact to save it and start fresh while preserving context:

You: #compact

๐Ÿ“ Generating session summary...
๐Ÿ’พ Saved session: myagent_20251230_143022 (15 queries, 12.5K tokens)
๐Ÿ”„ Starting new session with summary...

MyAgent: I've reviewed our conversation about the REST API.
We built Flask routes and database models. Ready to continue!

# Continue in new session - old queries compressed into summary
You: Now let's add authentication

View saved conversations:

Conversations are saved as clean markdown files in ./.chat-sessions/ (in current directory):

ls -lh ./.chat-sessions/
# Shows files like: simple_sally_20251230_110627.md

# View a conversation
cat ./.chat-sessions/simple_sally_20251230_110627.md

Each saved session includes an auto-generated summary that enables fast, context-aware resumption without replaying all queries.

List all saved sessions:

chat_loop --list-sessions

Sessions are saved to ./.chat-sessions/ in your current working directory, providing context separation between different projects.

Copy Commands

Quickly copy content to clipboard:

Available copy commands:

# Copy last agent response (default)
You: #copy

# Copy your last query
You: #copy query

# Copy entire conversation as markdown
You: #copy all

# Copy only code blocks from last response
You: #copy code

Example workflow:

You: Write a Python function to reverse a string

Agent: Here's a function to reverse a string:

    def reverse_string(s):
        return s[::-1]

You: #copy code
โœ“ Copied code blocks from last response to clipboard

# Now paste into your editor with Cmd+V (Mac) or Ctrl+V (Windows/Linux)

Multi-line Input

Press \\ to enter multi-line mode:

You: \\
... def factorial(n):
...     if n <= 1:
...         return 1
...     return n * factorial(n - 1)
...
[Press Enter on empty line to submit]

Token Tracking

During Chat

When show_tokens: true in config:

------------------------------------------------------------
Time: 6.3s โ”‚ 1 cycle โ”‚ Tokens: 4.6K (in: 4.4K, out: 237) โ”‚ Cost: $0.017

Session Summary

Always shown on exit:

============================================================
Session Summary
------------------------------------------------------------
  Duration: 12m 34s
  Queries: 15
  Tokens: 67.8K (in: 45.2K, out: 22.6K)
  Total Cost: $0.475
============================================================

Programmatic Usage

from basic_agent_chat_loop import ChatLoop

# Create chat interface
chat = ChatLoop(
    agent=your_agent,
    name="My Agent",
    description="Agent description",
    config_path=Path("~/.chatrc")  # Optional
)

# Run interactive loop
chat.run()

AWS Strands Agent Framework

This chat loop is specifically designed for AWS Strands agents with full support for:

  • Automatic metadata extraction
  • Tool discovery
  • Streaming responses
  • Token tracking and cost estimation

OpenAI Harmony Format

The chat loop includes built-in support for the OpenAI Harmony response format (designed for gpt-oss open-weight models). Harmony support is included by default in all installations.

What is Harmony?

Harmony is OpenAI's response formatting standard for their open-weight model series (gpt-oss). It provides:

  • Structured conversation handling with multiple output channels
  • Reasoning output generation (internal analysis separate from final response)
  • Function call management with namespaces
  • Tool usage tracking and structured outputs

Automatic Detection

The chat loop automatically detects Harmony agents by checking for:

  • Explicit uses_harmony attribute on the agent
  • Model names containing "gpt-oss" or "harmony"
  • Harmony-specific methods or attributes
  • Agent class names containing "harmony"

Enhanced Display

When a Harmony agent is detected, responses are automatically processed to:

  • Extract and display multiple output channels (analysis, commentary, final)
  • Highlight internal reasoning separately from the final response
  • Detect and format tool calls appropriately
  • Parse structured Harmony response formats

Configuration

Control Harmony processing behavior:

# In ~/.chatrc or .chatrc
harmony:
  enabled: auto                 # auto (default) / yes / no
  show_detailed_thinking: true  # Default - show all channels with labels

harmony.enabled options:

  • auto (default) - Automatically detect harmony agents
  • yes - Force enable harmony processing for all agents
  • no - Disable harmony processing completely

Detailed Thinking Mode

By default, detailed thinking is enabled - showing all channels with labeled prefixes:

With detailed thinking enabled (true, default):

๐Ÿ’ญ [REASONING]
I need to analyze this query for potential bottlenecks...

๐Ÿ“Š [ANALYSIS]
Looking at the query structure:
- Multiple table joins without proper indexes
- WHERE clause filtering happens after the joins

๐Ÿ“ [COMMENTARY]
This is a common pattern I see in legacy codebases...

๐Ÿ’ฌ [RESPONSE]
Here are three optimizations for your database query...

To disable detailed thinking (set to false):

harmony:
  show_detailed_thinking: false  # Only show final response

Output with detailed thinking disabled:

Here are three optimizations for your database query...

Example

# Your agent using Harmony
class MyHarmonyAgent:
    uses_harmony = True  # Explicit marker

    def __call__(self, query):
        # Agent returns Harmony-formatted response
        return harmony_response

# Chat loop will automatically detect and handle Harmony format
chat_loop my_harmony_agent

Requirements

Core Dependencies

  • Python 3.9+ (required by openai-harmony dependency)
  • pyyaml>=6.0.1 - Configuration file parsing
  • rich>=13.7.0 - Enhanced terminal rendering
  • pyperclip>=1.8.0 - Clipboard support for copy commands
  • openai-harmony>=0.0.8 - OpenAI Harmony format support (built-in)
  • pyreadline3>=3.4.1 - Command history on Windows (auto-installed on Windows)

Optional Dependencies

  • anthropic-bedrock>=0.8.0 - AWS Bedrock integration (install with [bedrock])

Built-in Features

  • readline (built-in on Unix) - Command history on macOS/Linux

Platform Support

  • โœ… macOS - Full support with native readline
  • โœ… Linux - Full support with native readline
  • โœ… Windows - Full support with automatic pyreadline3 installation

Architecture

src/basic_agent_chat_loop/
โ”œโ”€โ”€ chat_loop.py          # Main orchestration
โ”œโ”€โ”€ chat_config.py        # Configuration management
โ”œโ”€โ”€ cli.py                # CLI entry point
โ”œโ”€โ”€ components/           # Modular components
โ”‚   โ”œโ”€โ”€ ui_components.py      # Colors, StatusBar
โ”‚   โ”œโ”€โ”€ token_tracker.py      # Token/cost tracking
โ”‚   โ”œโ”€โ”€ template_manager.py   # Prompt templates
โ”‚   โ”œโ”€โ”€ display_manager.py    # Display formatting
โ”‚   โ”œโ”€โ”€ agent_loader.py       # Agent loading
โ”‚   โ””โ”€โ”€ alias_manager.py      # Alias management
docs/
โ”œโ”€โ”€ ALIASES.md            # Alias system guide
โ”œโ”€โ”€ CONFIG.md             # Configuration reference
โ”œโ”€โ”€ INSTALL.md            # Installation instructions
โ””โ”€โ”€ Chat_TODO.md          # Roadmap and future features

Documentation

Development

Running Tests

# Install dev dependencies
pip install -e ".[dev]"

# Run tests
pytest

Code Quality

# Format code
black src/ tests/

# Lint
ruff check src/ tests/

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

MIT License - see LICENSE file for details.

Changelog

See CHANGELOG.md for detailed version history.

Latest Release: v1.3.3 (2024-12-24)

Hotfix release with default features enabled and harmony improvements:

  • โœจ Default Features Enabled - All features now enabled by default for better UX
    • auto_save: true - Save conversations automatically
    • show_tokens: true - Display token counts and costs
    • show_status_bar: true - Status bar with agent, model, queries, time
    • show_detailed_thinking: true - Show harmony reasoning channels
  • ๐Ÿ”ง Status Bar Fix - Status bar now displays correctly between messages
  • ๐Ÿ“Š Harmony Improvements - Enhanced detection logging and documentation
  • ๐ŸŽจ Better Defaults - Optimized out-of-the-box experience for new users

Troubleshooting

See docs/TROUBLESHOOTING.md for common issues and solutions.

Quick fixes:

  • Package not found: Run pip install --upgrade basic-agent-chat-loop
  • Command not found: Ensure pip's bin directory is in your PATH
  • Import errors: Try reinstalling with pip install --force-reinstall basic-agent-chat-loop

Support

Project details


Release history Release notifications | RSS feed

This version

1.9.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

basic_agent_chat_loop-1.9.0.tar.gz (214.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

basic_agent_chat_loop-1.9.0-py3-none-any.whl (207.6 kB view details)

Uploaded Python 3

File details

Details for the file basic_agent_chat_loop-1.9.0.tar.gz.

File metadata

  • Download URL: basic_agent_chat_loop-1.9.0.tar.gz
  • Upload date:
  • Size: 214.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for basic_agent_chat_loop-1.9.0.tar.gz
Algorithm Hash digest
SHA256 867ce1f5e823a08d10c1c3da0399bad35f9774ebcc7a704b341c6654eb2f953d
MD5 f338032c7698fefc3d26300a0cd91456
BLAKE2b-256 6a8f616adcf6db04dab0e574a92ece5df0451b458fe261f7a5702af2a055913f

See more details on using hashes here.

Provenance

The following attestation bundles were made for basic_agent_chat_loop-1.9.0.tar.gz:

Publisher: publish.yml on Open-Agent-Tools/Basic-Agent-Chat-Loop

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file basic_agent_chat_loop-1.9.0-py3-none-any.whl.

File metadata

File hashes

Hashes for basic_agent_chat_loop-1.9.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4a68f0edf9fc2b27f200a51307afe4743bdd6d66bb113e6dd6fa0d2a38b85e2f
MD5 39838431307aad691f2503747a715bbe
BLAKE2b-256 7d34e15ec9d189f0d6b56bb5f2a7ae5fc7bf24ff069b80b6da7ecf61f481c949

See more details on using hashes here.

Provenance

The following attestation bundles were made for basic_agent_chat_loop-1.9.0-py3-none-any.whl:

Publisher: publish.yml on Open-Agent-Tools/Basic-Agent-Chat-Loop

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page