SmartEM Agent CLI Reference#
The SmartEM Agent provides a comprehensive command-line interface for parsing, validating, and monitoring EPU (Electron Physical User) microscopy data. This reference documents all available commands, parameters, and usage patterns.
Command Overview#
python -m smartem_agent [COMMAND] [OPTIONS]
The CLI is organised into the following command groups:
Global Options#
All commands support the following verbosity options:
Option  | 
Short  | 
Type  | 
Default  | 
Description  | 
|---|---|---|---|---|
  | 
  | 
count  | 
0  | 
Increase verbosity (-v for INFO, -vv for DEBUG)  | 
Verbosity Levels:
0 (default): ERROR level - Only critical errors are shown
1 (-v): INFO level - General information and warnings
2 (-vv): DEBUG level - Detailed debugging information
Parse Commands#
Parse commands extract and process data from EPU files without persisting to the backend API. These are primarily used for development, debugging, and data validation purposes.
parse dir#
Parse an entire EPU output directory structure that may contain multiple grids.
python -m smartem_agent parse dir [OPTIONS] EPU_OUTPUT_DIR
Parameters:
Parameter  | 
Type  | 
Required  | 
Description  | 
|---|---|---|---|
  | 
str  | 
Yes  | 
Path to EPU output directory containing multiple grid directories  | 
  | 
count  | 
No  | 
Verbosity level (see Global Options)  | 
Example:
python -m smartem_agent parse dir /data/microscopy/session_20240115 -v
Use Cases:
Batch processing of multiple grid datasets
Session-level data analysis and validation
Quality control across entire microscopy sessions
parse grid#
Parse a single grid data directory containing EPU acquisition files.
python -m smartem_agent parse grid [OPTIONS] GRID_DATA_DIR
Parameters:
Parameter  | 
Type  | 
Required  | 
Description  | 
|---|---|---|---|
  | 
str  | 
Yes  | 
Path to individual grid data directory  | 
  | 
count  | 
No  | 
Verbosity level (see Global Options)  | 
Example:
python -m smartem_agent parse grid /data/microscopy/session_20240115/Grid_001 -vv
Use Cases:
Single grid analysis and debugging
Grid-specific data extraction
Verification of individual acquisition datasets
parse session#
Parse an EPU session manifest file (typically EpuSession.dm).
python -m smartem_agent parse session [OPTIONS] PATH
Parameters:
Parameter  | 
Type  | 
Required  | 
Description  | 
|---|---|---|---|
  | 
str  | 
Yes  | 
Path to EPU session manifest file  | 
  | 
count  | 
No  | 
Verbosity level (see Global Options)  | 
Example:
python -m smartem_agent parse session /data/microscopy/Grid_001/EpuSession.dm
Output: Session metadata including acquisition parameters, timestamps, and instrument configuration.
parse atlas#
Parse an atlas manifest file (typically Atlas/Atlas.dm).
python -m smartem_agent parse atlas [OPTIONS] PATH
Parameters:
Parameter  | 
Type  | 
Required  | 
Description  | 
|---|---|---|---|
  | 
str  | 
Yes  | 
Path to atlas manifest file  | 
  | 
count  | 
No  | 
Verbosity level (see Global Options)  | 
Example:
python -m smartem_agent parse atlas /data/microscopy/Grid_001/Sample*/Atlas/Atlas.dm
Output: Atlas information including grid square positions, tile arrangements, and overview image metadata.
parse gridsquare-metadata#
Parse grid square metadata files (typically Metadata/GridSquare_*.dm).
python -m smartem_agent parse gridsquare-metadata [OPTIONS] PATH
Parameters:
Parameter  | 
Type  | 
Required  | 
Description  | 
|---|---|---|---|
  | 
str  | 
Yes  | 
Path to grid square metadata file  | 
  | 
count  | 
No  | 
Verbosity level (see Global Options)  | 
Example:
python -m smartem_agent parse gridsquare-metadata /data/microscopy/Grid_001/Metadata/GridSquare_12345.dm
Output: Grid square-specific metadata including foil hole positions and targeting information.
parse gridsquare#
Parse grid square manifest files (typically Images-Disc*/GridSquare_*/GridSquare_*.xml).
python -m smartem_agent parse gridsquare [OPTIONS] PATH
Parameters:
Parameter  | 
Type  | 
Required  | 
Description  | 
|---|---|---|---|
  | 
str  | 
Yes  | 
Path to grid square manifest file  | 
  | 
count  | 
No  | 
Verbosity level (see Global Options)  | 
Example:
python -m smartem_agent parse gridsquare /data/microscopy/Grid_001/Images-Disc1/GridSquare_12345/GridSquare_20240115_143022.xml
Output: Grid square acquisition details and image collection parameters.
parse foilhole#
Parse foil hole manifest files (typically Images-Disc*/GridSquare_*/Data/FoilHole_*.xml).
python -m smartem_agent parse foilhole [OPTIONS] PATH
Parameters:
Parameter  | 
Type  | 
Required  | 
Description  | 
|---|---|---|---|
  | 
str  | 
Yes  | 
Path to foil hole manifest file  | 
  | 
count  | 
No  | 
Verbosity level (see Global Options)  | 
Example:
python -m smartem_agent parse foilhole /data/microscopy/Grid_001/Images-Disc1/GridSquare_12345/Data/FoilHole_1234567_Data_20240115_143045_fractions.xml
Output: Foil hole targeting information and acquisition metadata.
parse micrograph#
Parse micrograph manifest files (typically Images-Disc*/GridSquare_*/FoilHoles/FoilHole_*.xml).
python -m smartem_agent parse micrograph [OPTIONS] PATH
Parameters:
Parameter  | 
Type  | 
Required  | 
Description  | 
|---|---|---|---|
  | 
str  | 
Yes  | 
Path to micrograph manifest file  | 
  | 
count  | 
No  | 
Verbosity level (see Global Options)  | 
Example:
python -m smartem_agent parse micrograph /data/microscopy/Grid_001/Images-Disc1/GridSquare_12345/FoilHoles/FoilHole_1234567_20240115_143045.xml
Output: Individual micrograph metadata including exposure parameters and image quality metrics.
Validate Command#
The validate command checks EPU project directory structure for completeness and compliance with expected formats.
python -m smartem_agent validate [OPTIONS] PATH
Parameters:
Parameter  | 
Type  | 
Required  | 
Default  | 
Description  | 
|---|---|---|---|---|
  | 
str  | 
Yes  | 
-  | 
Path to EPU project directory to validate  | 
  | 
count  | 
No  | 
0  | 
Verbosity level (see Global Options)  | 
Exit Codes:
0: Directory structure is valid
1: Directory structure is invalid (validation errors found)
Example:
python -m smartem_agent validate /data/microscopy/Grid_001 -v
Validation Checks:
Presence of required EPU session files
Directory structure compliance
File naming convention adherence
Metadata file accessibility
Output:
Valid structure: Confirmation message with no errors
Invalid structure: Detailed list of structural issues and missing components
Watch Command#
The watch command provides real-time monitoring of EPU data directories, automatically processing new files and communicating with the SmartEM backend.
python -m smartem_agent watch [OPTIONS] PATH
Parameters#
Parameter  | 
Type  | 
Required  | 
Default  | 
Description  | 
|---|---|---|---|---|
  | 
Path  | 
Yes  | 
-  | 
Directory to monitor for file changes  | 
  | 
bool  | 
No  | 
False  | 
Run without making API calls to backend  | 
  | 
str  | 
No  | 
  | 
Backend API endpoint URL  | 
  | 
str  | 
No  | 
  | 
Log file path for change events  | 
  | 
float  | 
No  | 
10.0  | 
Logging interval in seconds  | 
  | 
str  | 
No  | 
None  | 
Agent identifier for SSE connection  | 
  | 
str  | 
No  | 
None  | 
Session identifier for SSE connection  | 
  | 
int  | 
No  | 
30  | 
SSE connection timeout in seconds  | 
  | 
int  | 
No  | 
60  | 
Agent heartbeat interval in seconds (0 to disable)  | 
  | 
count  | 
No  | 
0  | 
Verbosity level (see Global Options)  | 
Core Parameters#
path#
Type: Path (required) Description: The root directory to monitor for EPU data files. Must be an existing directory containing or expected to contain EPU acquisition data.
Example:
python -m smartem_agent watch /data/microscopy/active_session
–dry-run#
Type: Boolean flag Default: False Description: Run the agent in simulation mode without making API calls to the backend. Useful for testing file monitoring and parsing without affecting production systems.
Example:
python -m smartem_agent watch /data/test --dry-run
Behaviour:
File monitoring and parsing operate normally
No data is sent to the backend API
Uses in-memory data storage only
Ideal for development and testing scenarios
API Integration Parameters#
–api-url#
Type: String
Default: http://127.0.0.1:8000
Description: URL of the SmartEM backend API endpoint. The agent will attempt to connect to this URL for data persistence and real-time communication.
Examples:
# Local development
python -m smartem_agent watch /data --api-url http://localhost:8000
# Production deployment
python -m smartem_agent watch /data --api-url https://smartem.facility.ac.uk/api
Connection Validation: The agent validates API connectivity at startup and exits with error code 1 if the API is unreachable (unless using --dry-run).
–agent-id#
Type: String (optional) Description: Unique identifier for this agent instance. Required for real-time communication with the backend via Server-Sent Events (SSE).
Format Recommendations:
Use descriptive names:
microscope-01,titan-krios-lab2Include facility/location information for multi-site deployments
Ensure uniqueness across all agent instances
–session-id#
Type: String (optional) Description: Session identifier linking this agent to a specific microscopy session. Required for real-time communication with the backend.
Usage: Typically generated by the backend or provided by the acquisition software. Used to group related data and instructions.
Real-Time Communication Parameters#
–sse-timeout#
Type: Integer Default: 30 seconds Description: Timeout for Server-Sent Events (SSE) connections to the backend. Controls how long the agent waits for backend responses.
Recommendations:
Local networks: 10-30 seconds
Remote/unstable connections: 60-120 seconds
High-latency networks: 120+ seconds
–heartbeat-interval#
Type: Integer Default: 60 seconds Description: Interval between heartbeat messages sent to the backend to maintain connection health monitoring. Set to 0 to disable heartbeats.
Connection Health: The backend considers connections stale after 2 minutes without heartbeats, so values should be well below 120 seconds.
Examples:
# Standard monitoring (every minute)
python -m smartem_agent watch /data --agent-id agent-01 --session-id session-123
# Frequent monitoring (every 30 seconds)
python -m smartem_agent watch /data --agent-id agent-01 --session-id session-123 --heartbeat-interval 30
# Disable heartbeats (not recommended for production)
python -m smartem_agent watch /data --agent-id agent-01 --session-id session-123 --heartbeat-interval 0
Logging Parameters#
–log-file#
Type: String
Default: fs_changes.log
Description: Path to log file for filesystem change events. The agent writes structured JSON logs of all detected file changes to this file.
Log Content: File creation, modification events, timestamps, file sizes, and processing status.
–log-interval#
Type: Float Default: 10.0 seconds Description: Batching interval for filesystem change logging. Events are collected and written to the log file at this interval to improve performance.
Performance Impact:
Lower values (1-5s): More responsive logging, higher I/O overhead
Higher values (30-60s): Better performance, less frequent updates
Very high values (>60s): Risk of log loss on unexpected shutdown
Usage Examples#
Basic Monitoring#
# Monitor directory with default settings
python -m smartem_agent watch /data/microscopy/Grid_001
Production Deployment with Real-Time Communication#
python -m smartem_agent watch /data/microscopy/active_session \
  --api-url https://smartem-backend.facility.ac.uk \
  --agent-id microscope-titan-01 \
  --session-id session-20240115-001 \
  --heartbeat-interval 45 \
  --verbose
Development and Testing#
# Dry run with debug logging
python -m smartem_agent watch /data/test_data \
  --dry-run \
  --log-interval 5.0 \
  --verbose --verbose
High-Performance Production Setup#
python -m smartem_agent watch /data/high_throughput \
  --api-url http://backend:8000 \
  --agent-id facility-workstation-03 \
  --session-id batch-processing-session \
  --log-interval 30.0 \
  --sse-timeout 120 \
  --heartbeat-interval 30
File Pattern Matching#
All commands that process EPU data use consistent file pattern matching to identify relevant files:
Supported Patterns:
EpuSession.dm- EPU session filesMetadata/GridSquare_*.dm- Grid square metadataImages-Disc*/GridSquare_*/GridSquare_*_*.xml- Grid square manifestsImages-Disc*/GridSquare_*/Data/FoilHole_*_Data_*_*_*_*.xml- Foil hole dataImages-Disc*/GridSquare_*/FoilHoles/FoilHole_*_*_*.xml- Foil hole positionsSample*/Atlas/Atlas.dm- Atlas files
Pattern Matching Rules:
Recursive directory traversal for nested structures
Case-sensitive matching
Wildcards support standard shell globbing patterns
Both Windows and Linux path separators are supported
Exit Codes#
Code  | 
Condition  | 
Description  | 
|---|---|---|
0  | 
Success  | 
Command completed successfully  | 
1  | 
Validation Error  | 
Directory validation failed (validate command)  | 
1  | 
API Connection Error  | 
Unable to connect to backend API  | 
1  | 
Directory Not Found  | 
Specified directory does not exist  | 
1  | 
Permission Error  | 
Insufficient permissions to access directory or files  | 
2  | 
Keyboard Interrupt  | 
User terminated command with Ctrl+C  | 
Integration Notes#
Backend API Requirements#
The watch command requires a compatible SmartEM backend API with the following endpoints:
Status endpoint:
GET /status- For connectivity validationData persistence: Various endpoints for storing parsed EPU data
SSE endpoint:
GET /agent/{agent_id}/session/{session_id}/instructions/stream- For real-time communicationHeartbeat endpoint:
POST /agent/{agent_id}/session/{session_id}/heartbeat- For connection health
Environment Considerations#
File System Permissions:
Read access to EPU data directories
Write access to log file location
Appropriate permissions for recursive directory traversal
Network Requirements:
HTTP/HTTPS connectivity to backend API
Stable connection for SSE streaming (when using real-time features)
Consideration of firewall and proxy configurations
Resource Requirements:
Memory usage scales with directory size and file count
CPU usage depends on file processing frequency
Network bandwidth for real-time data transmission
Performance Considerations#
Large Directory Structures:
Initial directory parsing can be resource-intensive
Consider using
--log-intervaltuning for high-frequency file changesMonitor memory usage with very large datasets
Network Latency:
Adjust
--sse-timeoutfor high-latency connectionsConsider
--heartbeat-intervaltuning based on network stabilityUse
--dry-runfor local testing and development
This CLI reference provides comprehensive coverage of all SmartEM Agent command-line functionality. For additional help with specific use cases or troubleshooting, refer to the CLI Troubleshooting Guide.