Roadmap¶
This document outlines planned features and enhancements for shtym. Timing and scope may change based on feedback and contributions.
Near Term (High Priority)¶
Project-Local Profile Configuration¶
Support profile files in project directories (e.g., .shtym/profiles.toml), not just ~/.config/shtym/.
Why: Enable team-shared configurations committed to version control, with automatic profile discovery per project.
Example:
my-project/
├── .shtym/profiles.toml # Team profiles
└── src/
cd my-project
stym run --profile team-standard pytest # Automatically uses project profiles
Profile Inheritance¶
Allow profiles to extend other profiles to reduce duplication.
Example:
[profiles.base-summary]
system_prompt_template = "Summarize: $command"
user_prompt_template = "$stdout"
[profiles.fast-summary]
extends = "base-summary"
[profiles.fast-summary.llm_settings]
model_name = "gemma3:4b"
Why: Maintain related profiles more easily with shared configuration.
Environment Variable Expansion in Profiles¶
Enable ${VAR_NAME} syntax in profile configurations to separate secrets from configuration files.
Why: Keep API keys and credentials out of version control while sharing profile structure with teams.
Example:
[profiles.openai]
type = "llm"
[profiles.openai.llm_settings]
api_key = "${OPENAI_API_KEY}"
base_url = "${OPENAI_BASE_URL:-https://api.openai.com/v1}"
Structured Output Support¶
Enable LLM responses in structured formats (JSON) with schema validation.
Why: Make LLM outputs machine-readable for downstream processing, CI/CD integration, and programmatic analysis.
Example:
[profiles.test-analysis]
type = "llm"
system_prompt_template = "Analyze test results: $command"
user_prompt_template = "$stdout"
output_format = "json"
output_schema = """
{
"type": "object",
"properties": {
"total_tests": {"type": "integer"},
"passed": {"type": "integer"},
"failed": {"type": "integer"},
"errors": {
"type": "array",
"items": {"type": "string"}
}
}
}
"""
Use cases:
- Parse test results for CI/CD metrics
- Extract structured lint findings
- Generate machine-readable summaries for automation
Template Variable Support¶
Enable user-defined variables in prompt templates with default values, allowing dynamic customization at runtime.
Why: Reuse the same profile with different parameters without creating multiple profiles. Useful for automation tools like nox.
Example:
[profiles.custom-summary]
type = "llm"
system_prompt_template = "Summarize from ${perspective:-general} perspective: $command"
user_prompt_template = "$stdout"
Usage:
# Use default value (general)
stym run --profile custom-summary pytest tests/
# Override with specific perspective
stym run --profile custom-summary --var perspective=security pytest tests/
stym run --profile custom-summary --var perspective=performance ruff check .
Long Context Handling¶
Support processing large command outputs that exceed LLM context limits through chunking and hierarchical summarization.
Why: Enable shtym to handle real-world scenarios with massive test suites, large diffs, or extensive logs without hitting token limits.
Example strategies:
- Chunk large outputs and process separately
- Hierarchical summarization (summarize chunks, then summarize summaries)
- Extract critical sections (errors, failures) before processing
- Stream processing for very large outputs
Use cases:
- Large test suites with thousands of tests
- Extensive log files
- Large git diffs across many files
- Build outputs from complex projects
Medium Term¶
OpenAI API Support¶
Add support for OpenAI's API as an LLM provider alongside Ollama.
Why: Provide flexibility to use different LLM providers based on availability, cost, or performance needs.
Azure Key Vault Integration¶
Fetch secrets from Azure Key Vault using akv:// URI scheme (via envresolve library).
Why: Enterprise-grade secret management with audit trails and automatic rotation support.
Example:
api_key = "akv://my-vault/openai-key"
# Or with variable expansion:
api_key = "akv://${VAULT_NAME}/openai-key"
Long Term (Lower Priority)¶
Command-Specific Prompt Presets¶
Provide built-in optimized prompts for common development commands (pytest, ruff, git, npm, etc.) with automatic detection.
Why: Make it easier to get started with effective prompts without manual prompt engineering.
Example:
External Prompt Import¶
Enable importing prompt configurations from URLs, files, or repositories.
Why: Share and reuse proven prompt configurations across teams and projects.
Example:
Additional LLM Providers¶
Extend support to Anthropic (Claude), Azure OpenAI Service, and other major LLM providers.
Why: Maximize flexibility and support diverse deployment scenarios.
Configuration Management Commands¶
Add stym config subcommands for validation and inspection:
stym config validate- Check profile syntax and configurationstym config list- Show all available profilesstym config show <profile>- Display profile details
Why: Improve debugging and discoverability of profiles.
Contributing¶
Interested in implementing a feature? Please open a GitHub Issue to discuss the approach before starting work.
Feedback¶
Have ideas for other features? Open an issue or start a discussion.