A command-line interface for managing vector databases and their resources with support for YAML configuration and environment variable substitution.
- List vector databases: List all available vector database instances
- List embeddings: List supported embeddings for a specific vector database
- List collections: List all collections in a specific vector database
- List documents: List documents in a specific collection of a vector database
- Query documents: Query documents using natural language with semantic search
- Pluggable document chunking: Configure per-collection chunking (None, Fixed with size/overlap, Sentence, Semantic)
- Discover supported strategies with
maestro chunking list
- Discover supported strategies with
- Create vector databases: Create vector databases from YAML configuration files
- Delete vector databases: Delete vector databases by name
- Validate configurations: Validate YAML configuration files
- Environment variable substitution: Replace
{{ENV_VAR_NAME}}placeholders in YAML files - Environment variable support: Configure MCP server URI via environment variables
- Command-line flag override: Override MCP server URI via command-line flags
- Dry-run mode: Test commands without making actual changes
- Verbose output: Get detailed information about operations
- Silent mode: Suppress success messages
- Safety features: Confirmation prompts for destructive operations with
--forceflag bypass
- Command suggestions: Intelligent suggestions for mistyped commands with "Did you mean..." functionality
- Command aliases: Short aliases for common commands (e.g.,
vdbforvectordb,collforcollection,docfordocument) - Contextual help: Helpful tips and next steps shown after successful operations
- Command examples: Comprehensive examples for all commands and subcommands
- Error guidance: Helpful suggestions for common error scenarios when using
--verbosemode - Interactive selection: When resource names aren't provided, the CLI prompts for selection
- Auto-completion: Shell completion for commands, subcommands, flags, and resource names
- Progress indicators: Visual feedback for long-running operations
- Status commands: Quick overview of system state with
maestro status
- Go 1.21 or later
- Access to a running Maestro MCP server
# Use the build script (recommended)
./build.sh- User Guide - Comprehensive getting started guide with examples
- TODOs.md - Documentation of completed migration tasks
- USAGE.md - Detailed command reference and examples
- GitHub Actions - CI/CD workflow documentation
# Show help
./maestro --help
# Show version
./maestro --version
# List vector databases
./maestro vectordb list
# List vector databases with verbose output
./maestro vectordb list --verbose
# List collections for a specific vector database
./maestro collection list --vdb=my-database
# List collections with verbose output
./maestro collection list --vdb=my-database --verbose
# List embeddings for a specific vector database
./maestro embedding list --vdb=my-database
# List embeddings with verbose output
./maestro embedding list --vdb=my-database --verbose
# List documents in a specific collection
./maestro document list --vdb=my-database --collection=my-collection
# List documents with verbose output
./maestro document list --vdb=my-database --collection=my-collection --verbose
# Query documents using natural language
# Tip: pass --collection to avoid an interactive prompt
./maestro query "What is the main topic of the documents?" --vdb=my-database
./maestro query "Find information about API endpoints" --vdb=my-database --collection=my-collection --doc-limit 10
# Create vector database from YAML file
./maestro vectordb create config.yaml
# Create vector database with environment variable substitution
./maestro vectordb create config.yaml --verbose
# Delete vector database (with confirmation prompt)
./maestro vectordb delete my-database
# Delete vector database without confirmation
./maestro vectordb delete my-database --force
# Validate YAML configuration
./maestro validate config.yaml
# Create collection with chunking
./maestro create collection my-database my-collection \
--embedding=text-embedding-3-small \
--chunking-strategy=Sentence \
--chunk-size=512 \
--chunk-overlap=32
# List supported chunking strategies
./maestro chunking list# The CLI will prompt you to select a vector database if not specified
./maestro collection list
# The CLI will prompt you to select a collection if not specified
./maestro document list --vdb=my-database
# The CLI will prompt you to select a document if not specified
./maestro document delete --vdb=my-database --collection=my-collection
# Search and query also prompt for a collection when --collection is omitted
./maestro search "example" --vdb=my-database
./maestro query "example" --vdb=my-database
# Note: Prompts are skipped in non-interactive contexts and with --dry-run; pass --collection to avoid promptingBash:
# Generate completion script
./maestro completion bash > ~/.local/share/bash-completion/completions/maestro
# Or add to your .bashrc
echo 'source <(./maestro completion bash)' >> ~/.bashrcZsh:
# Generate completion script
./maestro completion zsh > ~/.zsh/completions/_maestro
# Or add to your .zshrc
echo 'source <(./maestro completion zsh)' >> ~/.zshrcFish:
# Generate completion script
./maestro completion fish > ~/.config/fish/completions/maestro.fishPowerShell:
# Generate completion script
./maestro completion powershell | Out-String | Invoke-ExpressionProgress indicators are automatically shown for long-running operations:
# Document creation with progress indicator
./maestro document create --name=my-doc --file=document.txt --vdb=my-database --collection=my-collection
# Query execution with progress indicator
./maestro query "What is the main topic?" --vdb=my-database
# Status check with progress indicator
./maestro status# Show overall system status
./maestro status
# Show status for a specific vector database
./maestro status --vdb=my-database
# Show detailed status with verbose output
./maestro status --verboseExample output:
🔍 Maestro Knowledge System Status
==================================
📊 Vector Database: test_remote_weaviate (weaviate)
📁 Collection: test_collection
📄 Documents: 3
📂 Collections: test_collection, another_collection
🧠 Supported Embeddings: text-embedding-3-small, text-embedding-3-large
✅ Status: Online
📈 Summary:
• Total Vector Databases: 1
• Total Documents: 3
• MCP Server: http://localhost:8030/mcp
• Connection: ✅ Active
For convenience, the CLI provides shorter aliases for all resource commands:
# Vector databases
./maestro vectordb list # or: ./maestro vdb list
# Collections
./maestro collection list # or: ./maestro coll list
# Documents
./maestro document list # or: ./maestro doc list
# Embeddings
./maestro embedding list # or: ./maestro embed list# Interactive selection when flags are missing
./maestro collection list # Prompts you to select a vector database
./maestro document list # Prompts you to select both VDB and collection
./maestro query "test" # Prompts you to select a vector database
# Auto-completion for resource names and file paths
./maestro collection list --vdb=<TAB> # Completes vector database names
./maestro document list --collection=<TAB> # Completes collection names
./maestro document create --file=<TAB> # Completes file paths
./maestro collection create --embedding=<TAB> # Completes embedding models
# Command suggestions for typos
./maestro vectord # Suggests: vectordb
./maestro docum # Suggests: document
./maestro embedd # Suggests: embedding
# Contextual help appears after operations
./maestro vectordb list # Shows tip about creating new databases
./maestro collection create --vdb=my-db --name=my-coll # Shows tip about adding documents
./maestro query "test" --vdb=my-db # Shows tips about doc-limit and collection flags
# Error guidance with --verbose
./maestro collection list --verbose # Shows helpful suggestions for common errorsThe CLI can connect to an MCP server using several methods:
Set the MAESTRO_MCP_SERVER_URI environment variable:
export MAESTRO_MCP_SERVER_URI="http://localhost:8030"
./maestro vectordb listCreate a .env file in the current directory with your configuration:
# MCP Server configuration
MAESTRO_MCP_SERVER_URI=http://localhost:8030
# Weaviate configuration (for Weaviate backend)
WEAVIATE_API_KEY=your-weaviate-api-key
WEAVIATE_URL=https://your-weaviate-cluster.weaviate.network
# OpenAI configuration (for OpenAI embeddings)
OPENAI_API_KEY=your-openai-api-keyThe CLI will automatically load the .env file if it exists in the current directory.
Override the MCP server URI via command-line flag:
./maestro vectordb list --mcp-server-uri="http://localhost:8030"Priority order: Command-line flag > Environment variable > .env file > Default (http://localhost:8030)
Supported Environment Variables:
MAESTRO_MCP_SERVER_URI: MCP server URIWEAVIATE_API_KEY: Weaviate API key for Weaviate backendWEAVIATE_URL: Weaviate cluster URLOPENAI_API_KEY: OpenAI API key for embeddings
- Configure chunking when defining collections via YAML. The CLI exposes discovery of supported strategies with:
./maestro chunking listNone: No chunking is performed (default) Fixed: Split documents into fixed-size chunks with optional overlap Sentence: Split documents at sentence boundaries with size limits Semantic: AI-powered chunking that identifies semantic boundaries using sentence embeddings
Semantic chunking uses sentence transformers to identify natural break points in documents:
# Create collection with semantic chunking
./maestro create collection my-database my-collection \
--chunking-strategy=Semantic \
--chunk-size=768 \
--chunk-overlap=0
# The semantic strategy will:
# - Split text into sentences
# - Use AI embeddings to find semantic boundaries
# - Respect the chunk_size limit while preserving meaning
# - Default to 768 characters (vs 512 for other strategies)Note: Semantic chunking uses sentence-transformers for chunking decisions, but the resulting chunks are embedded using your collection's embedding model (e.g., nomic-embed-text) for search operations.
Additional notes:
- Advanced semantic parameters are fully supported via flags in the CLI in addition to the common ones:
--semantic-model(model identifier, e.g., all-MiniLM-L6-v2)--semantic-window-size(integer context window)--semantic-threshold-percentile(0–100 split sensitivity)- Plus common:
--chunk-size,--chunk-overlap
- Completion: the CLI provides completion for
--chunking-strategy(includesSemantic). The--semantic-modelvalue is free-form (no static suggestions); numeric flags disable file completion.
Example with semantic-specific flags:
./maestro collection create --vdb=my-database --name=my-collection \
--chunking-strategy=Semantic \
--chunk-size=768 \
--semantic-model=all-MiniLM-L6-v2 \
--semantic-window-size=1 \
--semantic-threshold-percentile=95The CLI supports environment variable substitution in YAML files using the {{ENV_VAR_NAME}} syntax. This allows you to use environment variables directly in your configuration files:
apiVersion: maestro/v1alpha1
kind: VectorDatabase
metadata:
name: my-weaviate-db
spec:
type: weaviate
uri: {{WEAVIATE_URL}}
collection_name: my_collection
embedding: text-embedding-3-small
mode: remoteWhen you run ./maestro create vector-db config.yaml, the CLI will:
- Load environment variables from
.envfile (if present) - Replace
{{WEAVIATE_URL}}with the actual value from the environment - Process the YAML file with the substituted values
Features:
- Automatic substitution: All
{{ENV_VAR_NAME}}placeholders are replaced before YAML parsing - Error handling: Clear error messages if required environment variables are missing
- Verbose logging: Shows which environment variables are being substituted (when using
--verbose) - Validation: Ensures all required environment variables are set before processing
The CLI automatically normalizes URLs to ensure they have the correct protocol prefix:
- Hostname only:
localhost→http://localhost:8030 - Hostname with port:
localhost:8030→http://localhost:8030 - Full URL:
http://localhost:8030→http://localhost:8030(unchanged) - HTTPS URL:
https://example.com:9000→https://example.com:9000(unchanged)
This makes it easy to specify server addresses in any format:
# All of these work the same way:
./maestro vectordb list --mcp-server-uri="localhost:8030"
./maestro vectordb list --mcp-server-uri="http://localhost:8030"
./maestro vectordb list --mcp-server-uri="https://example.com:9000"--verbose: Show detailed output--silent: Suppress success messages--dry-run: Test commands without making changes--force/-f: Skip confirmation prompts for destructive operations--mcp-server-uri: Override MCP server URI--help: Show help information--version: Show version information
The CLI provides resource-based list commands for vector databases, collections, and documents:
# List all vector databases
./maestro vectordb list
# List with verbose output
./maestro vectordb list --verbose
# Test the command without connecting to server
./maestro vectordb list --dry-run
# List collections for a specific vector database
./maestro collection list --vdb=my-database
# List collections with verbose output
./maestro collection list --vdb=my-database --verbose
# Test collections command without connecting to server
./maestro collection list --vdb=my-database --dry-run
# List embeddings for a specific vector database
./maestro embedding list --vdb=my-database
# List embeddings with verbose output
./maestro embedding list --vdb=my-database --verbose
# Test embeddings command without connecting to server
./maestro embedding list --vdb=my-database --dry-run
# List documents in a specific collection
./maestro document list --vdb=my-database --collection=my-collection
# List documents with verbose output
./maestro document list --vdb=my-database --collection=my-collection --verbose
# Test documents command without connecting to server
./maestro document list --vdb=my-database --collection=my-collection --dry-runVector Databases: When databases are found, the output shows:
- Database name and type
- Collection name
- Document count
Example:
Found 2 vector database(s):
1. project_a_db (weaviate)
Collection: ProjectADocuments
Documents: 15
2. project_b_db (milvus)
Collection: ProjectBDocuments
Documents: 8
Embeddings: When listing embeddings for a vector database, the output shows:
- Supported embedding models for the specific database type
Example:
Supported embeddings for weaviate vector database 'my-database': [
"default",
"text2vec-weaviate",
"text2vec-openai",
"text2vec-cohere",
"text2vec-huggingface",
"text-embedding-ada-002",
"text-embedding-3-small",
"text-embedding-3-large"
]
--collection: Specific collection to search in (optional; if omitted you'll be prompted interactively unless in --dry-run or non-interactive mode)
Collections: When listing collections for a vector database, the output shows:
- All collections available in the vector database
Example:
Collections in vector database 'my-database': [
"Collection1",
"Collection2",
"MaestroDocs"
]
Documents: When listing documents in a collection, the output shows:
- All documents in the specified collection with their properties
Example:
Found 3 documents in collection 'my-collection' of vector database 'my-database': [
{
"id": "doc1",
"url": "https://example.com/doc1",
"text": "Document content...",
"metadata": {
"source": "web",
"timestamp": "2024-01-01T00:00:00Z"
}
},
{
"id": "doc2",
"url": "https://example.com/doc2",
"text": "Another document...",
"metadata": {
"source": "file",
"timestamp": "2024-01-02T00:00:00Z"
}
}
]The CLI provides resource-based create commands for vector databases, collections, and documents:
# Create vector database from YAML file
./maestro vdb create config.yaml
# Create with verbose output
./maestro vdb create config.yaml --verbose
# Create with dry-run mode
./maestro vdb create config.yaml --dry-run
# Override configuration values
./maestro vdb create config.yaml --type=weaviate --uri=localhost:8080Supported Override Flags:
--type: Override database type (milvus, weaviate)--uri: Override connection URI--collection-name: Override collection name--embedding: Override embedding model--mode: Override deployment mode (local, remote)
# Create collection in vector database
./maestro collection create --name=my-collection --vdb=my-database
# Create collection with verbose output
./maestro collection create --name=my-collection --vdb=my-database --verbose
# Create collection with dry-run mode
./maestro collection create --name=my-collection --vdb=my-database --dry-run
# Create collection with chunking configuration
./maestro collection create --name=my-collection --vdb=my-database \
--embedding=text-embedding-3-small \
--chunking-strategy=Sentence \
--chunk-size=512 \
--chunk-overlap=32# Create document from file
./maestro document create --name=my-doc --file=document.txt --vdb=my-database --collection=my-collection
# Create document with dry-run mode
./maestro document create --name=my-doc --file=document.txt --vdb=my-database --collection=my-collection --dry-runThe write command is an alias for creating documents:
# Write document from file
./maestro write document my-database my-collection my-doc --file-name=document.txt
# Write document using short aliases
./maestro write doc my-database my-collection my-doc --file-name=document.txt
./maestro write vdb-doc my-database my-collection my-doc --file-name=document.txt
# Write document with dry-run mode
./maestro write document my-database my-collection my-doc --file-name=document.txt --dry-run
Note: --embed on write is deprecated and ignored; embedding is configured per collection when the collection is created.The CLI includes safety features to prevent accidental deletion of resources. All delete operations require user confirmation unless the --force flag is used.
- Interactive Confirmation: Delete commands prompt for confirmation before proceeding
- Force Flag: Use
--forceor-fto skip confirmation prompts - Dry-run Mode: Confirmation is automatically skipped in dry-run mode
- Silent Mode: Confirmation is automatically skipped in silent mode
# Delete vector database with confirmation prompt
./maestro vectordb delete my-database
# Output: ⚠️ Are you sure you want to delete 'vector database 'my-database''? This action cannot be undone. [y/N]:
# Skip confirmation with --force flag
./maestro vectordb delete my-database --force
# Skip confirmation with -f flag
./maestro vectordb delete my-database -f
# Confirmation automatically skipped in dry-run mode
./maestro vectordb delete my-database --dry-run
# Confirmation automatically skipped in silent mode
./maestro vectordb delete my-database --silentThe CLI provides resource-based delete commands for vector databases, collections, and documents:
# Delete vector database (with confirmation prompt)
./maestro vdb delete my-database
# Delete with verbose output
./maestro vdb delete my-database --verbose
# Delete with dry-run mode
./maestro vdb delete my-database --dry-run
# Skip confirmation with force flag
./maestro vdb delete my-database --force# Delete collection from vector database (with confirmation prompt)
./maestro collection delete my-collection --vdb=my-database
# Delete collection with verbose output
./maestro collection delete my-collection --vdb=my-database --verbose
# Delete collection with dry-run mode
./maestro collection delete my-collection --vdb=my-database --dry-run
# Skip confirmation with force flag
./maestro collection delete my-collection --vdb=my-database --force# Delete document from collection (with confirmation prompt)
./maestro document delete my-document --vdb=my-database --collection=my-collection
# Delete document with verbose output
./maestro document delete my-document --vdb=my-database --collection=my-collection --verbose
# Delete document with dry-run mode
./maestro document delete my-document --vdb=my-database --collection=my-collection --dry-run
# Skip confirmation with force flag
./maestro document delete my-document --vdb=my-database --collection=my-collection --forceThe search command performs a vector search and returns JSON results suitable for programmatic use.
# Basic search (prompts for collection if omitted)
./maestro search "Find information about API endpoints" --vdb=my-database
# Search with specific document limit and collection
./maestro search "quantum circuits" --vdb=my-database --collection=my-collection --doc-limit 10Search output schema (normalized across backends):
- id, url, text
- metadata:
- doc_name
- chunk_sequence_number
- total_chunks
- offset_start, offset_end
- chunk_size
- similarity: canonical score in [0..1]
- distance: cosine distance (for reference)
- rank: 1-based rank
- _metric: e.g., "cosine"
- _search_mode: "vector" or "keyword"
Flags:
--doc-limit, -d: Maximum number of documents to consider (default: 5)--collection: Specific collection to search in (optional; if omitted you'll be prompted interactively unless in --dry-run or non-interactive mode)
The query command allows you to search documents using natural language queries with semantic search:
# Query documents using natural language
./maestro query "What is the main topic of the documents?" --vdb=my-database
# Query with specific document limit
./maestro query "Find information about API endpoints" --vdb=my-database --doc-limit 10
# Query with collection name specification
./maestro query "Search for technical documentation" --vdb=my-database --collection=my-collection
# Query with dry-run mode
./maestro query "Test query" --vdb=my-database --dry-run
# Query with verbose output
./maestro query "Complex search query" --vdb=my-database --verbose- Natural Language Queries: Use plain English to search through your documents
- Semantic Search: Finds relevant documents based on meaning, not just keywords
- Document Limit Control: Control how many documents to consider with
--doc-limit - Collection Targeting: Optionally specify which collection to search in
- Dry-run Mode: Test queries without actually executing them
- Verbose Output: Get detailed information about the query process
--doc-limit, -d: Maximum number of documents to consider (default: 5)--collection: Specific collection to search in (optional; if omitted you'll be prompted interactively unless in --dry-run or non-interactive mode)--dry-run: Test the command without making changes--verbose: Show detailed output--silent: Suppress success messages
# Basic query
./maestro query "What is machine learning?" --vdb=my-database
# Query with higher document limit
./maestro query "Find all API documentation" --vdb=my-database --doc-limit 20
# Query specific collection
./maestro query "Search for user guides" --vdb=my-database --collection=documentation
# Test query without execution
./maestro query "Test query" --vdb=my-database --dry-runShow collection information (embedding and chunking):
./maestro collection info --vdb=my-database --name=my-collectionCollection Information Output: The output shows:
- Collection name
- Document count
- Database type
- Embedding information
- Chunking configuration (strategy and parameters)
- Additional metadata
Example:
Collection information for 'my-collection' in vector database 'my-database':
{
"name": "my-collection",
"document_count": 15,
"db_type": "weaviate",
"embedding": "text2vec-weaviate",
"chunking": {
"strategy": "Sentence",
"parameters": { "chunk_size": 512, "overlap": 32 }
},
"metadata": {
"description": "My test collection",
"vectorizer": "text2vec-weaviate",
"properties_count": 4,
"module_config": null
}
}Note: The CLI does not currently provide a standalone "document get" command.
The validate command validates YAML configuration files:
# Validate YAML configuration
./maestro validate config.yaml
# Validate with verbose output
./maestro validate config.yaml --verbose- Start the MCP server:
cd /path/to/maestronowledge
./start.sh --http-
List databases:
cd cli ./maestro vdb list --mcp-server-uri="http://localhost:8030"
-
List with verbose output:
./maestro vdb list --mcp-server-uri="http://localhost:8030" --verbose -
List collections for a database:
./maestro collection list --vdb=my-database --mcp-server-uri="http://localhost:8030" -
List documents in a collection:
./maestro document list --vdb=my-database --collection=my-collection --mcp-server-uri="http://localhost:8030" -
Query documents using natural language:
./maestro query "What is the main topic?" --vdb=my-database --mcp-server-uri="http://localhost:8030" ./maestro query "Find API documentation" --vdb=my-database --doc-limit 10 --mcp-server-uri="http://localhost:8030"
-
Create a vector database from YAML:
./maestro vdb create config.yaml --mcp-server-uri="http://localhost:8030" -
Delete a vector database:
./maestro vdb delete my-database --mcp-server-uri="http://localhost:8030"
See the examples/ directory for usage examples:
- example_usage.sh - Comprehensive CLI usage demonstration with MCP server
If you get connection errors:
-
Check if the MCP server is running:
cd /path/to/maestronowledge ./stop.sh status -
Verify the server URI:
./maestro vectordb list --mcp-server-uri="http://localhost:8030" --verbose- Check server logs:
tail -f /path/to/maestronowledge/mcp_server.log- "connection refused": MCP server is not running or wrong port
- "HTTP error 404": Wrong endpoint or server not configured correctly
- "failed to parse database list": Server response format issue
- "missing required environment variables": Environment variable substitution failed
- "vector database already exists": Database with that name already exists
- "vector database does not exist": Database with that name doesn't exist
cli/
├── src/
│ ├── main.go # Main CLI entry point
│ ├── list.go # List command implementation
│ ├── create.go # Create command implementation
│ ├── delete.go # Delete command implementation
│ ├── query.go # Query command implementation
│ ├── validate.go # Validate command implementation
│ └── mcp_client.go # MCP server client
├── examples/
│ ├── example_usage.sh # Comprehensive CLI usage examples
│ └── README.md # Examples documentation
├── tests/
│ ├── list_test.go # List command tests
│ ├── create_test.go # Create command tests
│ ├── delete_test.go # Delete command tests
│ ├── query_test.go # Query command tests
│ ├── validate_test.go # Validate command tests
│ └── main_test.go # Main CLI tests
├── go.mod # Go module dependencies
├── go.sum # Go module checksums
├── tools/
│ └── lint.sh # Comprehensive linting script
├── test_integration.sh # Integration test script
└── README.md # This file
The CLI includes comprehensive linting and code quality checks to ensure maintainable, high-quality Go code.
- staticcheck: Detects unused code, unreachable code, and other code quality issues
- golangci-lint: Advanced Go linting with multiple analyzers
- go fmt: Code formatting
- go vet: Static analysis
- go mod tidy/verify: Dependency management
- Race condition checks: Thread safety validation
# Run all linting checks
./tools/lint.sh
# Run specific checks
go fmt ./src/... # Format code
go vet ./src/... # Static analysis
staticcheck ./src/... # Unused code detection
golangci-lint run ./src/... # Advanced lintingThe project includes automated linting in CI/CD pipelines:
- Main CI: Runs CLI linting for all changes
- CLI CI: Dedicated CLI linting job for CLI-specific changes
- Quality Gate: Linting failures block merges until resolved
- Unused Code Detection: Automatically identifies unused variables, functions, and imports
- Code Formatting: Ensures consistent code style across the project
- Static Analysis: Catches potential bugs and code smells
- Dependency Management: Verifies module dependencies are clean and secure
- Thread Safety: Detects race conditions in concurrent code
- Create a new command file (e.g.,
src/new_command.go) - Define the command using Cobra
- Add the command to
main.go - Update this README
- Run linting:
./tools/lint.shto ensure code quality
# Run all tests
go test ./tests/...
# Run integration tests
./test_integration.sh
# Build and test manually
go build -o maestro src/*.go
./maestro --help
# Run with verbose output
go test -v ./tests/...- Make changes to CLI code
- Run linting:
./tools/lint.shto check code quality - Run tests:
go test ./tests/...to verify functionality - Run integration tests:
./test_integration.shfor end-to-end validation - Commit changes with descriptive commit messages
The project uses GitHub Actions for continuous integration and deployment:
- Lint Workflow (
lint.yml): Runs code quality checks on every PR and push - Build Workflow (
build.yml): Builds the CLI binary and verifies functionality - Test Workflow (
test.yml): Runs comprehensive test suites - Main CI Pipeline (
ci.yml): Orchestrates all checks in sequence
- Push to main/develop: Full CI pipeline runs
- Pull Requests: All workflows run to validate changes
- Manual Dispatch: Workflows can be triggered manually from GitHub Actions tab
To run the same checks locally as the CI pipeline:
# Run the complete CI pipeline locally
./tools/lint.sh && ./build.sh && ./test.sh
# Or run individual steps
./tools/lint.sh # Code quality and linting
./build.sh # Build and verify binary
./test.sh # Run test suite- Matrix Testing: Tests across Go 1.21, 1.22, and 1.23
- Cross-Platform: Builds for Ubuntu, Windows, and macOS
- Artifact Upload: Preserves build artifacts and test results
- Parallel Execution: Individual workflows run in parallel for faster feedback
- Sequential Dependencies: Main CI ensures proper order (lint → build → test)
- No unused code: All variables, functions, and imports must be used
- Consistent formatting: Code follows
go fmtstandards - Static analysis clean: No
go vetwarnings - Dependency hygiene: Clean module dependencies
- Thread safety: No race conditions in concurrent code
Apache 2.0 License - see the main project LICENSE file for details.
The CLI supports semantic chunking for intelligent document splitting:
# Create a collection with semantic chunking
cli/maestro collection create --vdb my-vdb --name my-collection
# Check collection information to see chunking strategy
cli/maestro collection info --vdb "Qiskit_studio_algo" --name "Qiskit_studio_algo"
# Search with semantic chunking to see results
./cli/maestro search "quantum circuit" --vdb qiskit_studio_algo --collection qiskit_studio_algo --doc-limit 1Note: The semantic chunking strategy uses sentence-transformers for chunking decisions, while the collection's own embedding model is used for search operations.