src/main/resources/application.properties. All settings have sensible defaults for local development.
Database Configuration
HandsAI uses SQLite as its embedded database with optimizations for concurrent access.SQLite database connection URL. The database file is created in the project root.Parameters:
journal_mode=WAL- Write-Ahead Logging for better concurrencybusy_timeout=5000- 5-second timeout when database is locked
JDBC driver class for SQLite. Should not be modified.
Hibernate dialect for SQLite. Enables JPA compatibility with SQLite.
Schema generation strategy. Options:
update- Update schema automatically (recommended for development)create- Drop and recreate schema on startupvalidate- Validate schema without changesnone- No schema management
Enable to log all SQL statements to console. Useful for debugging.
Connection Pool Settings
HandsAI uses HikariCP for database connection pooling:Maximum number of connections in the pool. Increase for high-concurrency scenarios.
Minimum number of idle connections maintained in the pool.
Maximum time (in milliseconds) that a connection can sit idle in the pool. Default: 5 minutes.
Maximum lifetime (in milliseconds) of a connection in the pool. Default: 10 minutes.
Maximum time (in milliseconds) to wait for a connection from the pool. Default: 30 seconds.
Server Configuration
Application name used in logs and Spring Boot actuators.
HTTP port for the HandsAI server. Change if port 8080 is already in use.
Encryption Configuration (Jasypt)
HandsAI uses Jasypt to encrypt sensitive values like API keys stored in the database.Master password for encrypting/decrypting sensitive data.
Encryption algorithm used by Jasypt. Should not be changed unless you have specific security requirements.
Initialization vector generator. Required for GraalVM compatibility.
Virtual Threads Configuration
HandsAI leverages Java 21’s virtual threads for high concurrency and scalability.Enables virtual threads for all Spring Boot managed thread pools.Benefits:
- Thousands of concurrent tool executions
- Lower memory overhead per request
- Better throughput for I/O-bound operations
Virtual threads are a Java 21+ feature. Do not disable unless you have compatibility issues.
Security Configuration
Controls whether tools can call private network addresses (localhost, 192.168.x.x, 10.x.x.x, etc.).Set to
true if you need to call APIs running on your local network:Logging Configuration
Customize logging levels for debugging and monitoring:Spring Data JPA logging level.
SQL statement logging. Set to
INFO or WARN in production to reduce log noise.SQL parameter binding logging. Shows actual values passed to queries. Set to
INFO in production.Recommended Production Logging
Environment Variables
Sensitive configuration values should be set via environment variables:Configuration Examples
Development Configuration
Optimal for local development with verbose logging:Production Configuration
Optimized for production with minimal logging:High-Concurrency Configuration
For scenarios with many concurrent tool executions:Troubleshooting
Database is locked errors
Database is locked errors
Increase the busy timeout:Or increase the connection pool size:
Port 8080 already in use
Port 8080 already in use
Change the server port:Or set via environment variable:
Jasypt decryption errors
Jasypt decryption errors
Ensure the
JASYPT_ENCRYPTOR_PASSWORD environment variable matches the password used to encrypt the data:What’s Next?
Bridge Setup
Connect HandsAI to MCP clients like Claude Desktop
GraalVM Native
Compile to a native executable for instant startup