Config
Global Config Manager
Full source code
"""Utility to manage the global config file.
You can also directly edit the `.env` file in the config directory.
It is located at [bold green]{global_config_file}[/bold green].
"""
import os
import subprocess
from dotenv import set_key, unset_key
from prompt_toolkit import prompt
from rich.console import Console
from rich.rule import Rule
from typer import Argument, Typer
from minisweagent import global_config_file
app = Typer(
help=__doc__.format(global_config_file=global_config_file), # type: ignore
no_args_is_help=True,
rich_markup_mode="rich",
add_completion=False,
)
console = Console(highlight=False)
_SETUP_HELP = """To get started, we need to set up your global config file.
You can edit it manually or use the [bold green]mini-extra config set[/bold green] or [bold green]mini-extra config edit[/bold green] commands.
This setup will ask you for your model and an API key.
Here's a few popular models and the required API keys:
[bold green]anthropic/claude-sonnet-4-5-20250929[/bold green] ([bold green]ANTHROPIC_API_KEY[/bold green])
[bold green]openai/gpt-5[/bold green] or [bold green]openai/gpt-5-mini[/bold green] ([bold green]OPENAI_API_KEY[/bold green])
[bold green]gemini/gemini-3-pro-preview[/bold green] ([bold green]GEMINI_API_KEY[/bold green])
[bold]Note: Please always include the provider (e.g., "openai/") in the model name.[/bold]
[bold yellow]You can leave any setting blank to skip it.[/bold yellow]
More information at https://mini-swe-agent.com/latest/quickstart/
To find the best model, check the leaderboard at https://swebench.com/
"""
def configure_if_first_time():
if not os.getenv("MSWEA_CONFIGURED"):
console.print(Rule())
setup()
console.print(Rule())
@app.command()
def setup():
"""Setup the global config file."""
console.print(_SETUP_HELP.format(global_config_file=global_config_file))
default_model = prompt(
"Enter your default model (e.g., anthropic/claude-sonnet-4-5-20250929): ",
default=os.getenv("MSWEA_MODEL_NAME", ""),
).strip()
if default_model:
set_key(global_config_file, "MSWEA_MODEL_NAME", default_model)
console.print(
"[bold yellow]If you already have your API keys set as environment variables, you can ignore the next question.[/bold yellow]"
)
key_name = prompt("Enter your API key name (e.g., ANTHROPIC_API_KEY): ").strip()
key_value = None
if key_name:
key_value = prompt("Enter your API key value (e.g., sk-1234567890): ", default=os.getenv(key_name, "")).strip()
if key_value:
set_key(global_config_file, key_name, key_value)
if not key_value:
console.print(
"[bold red]API key setup not completed.[/bold red] Totally fine if you have your keys as environment variables."
)
set_key(global_config_file, "MSWEA_CONFIGURED", "true")
console.print(
"\n[bold yellow]Config finished.[/bold yellow] If you want to revisit it, run [bold green]mini-extra config setup[/bold green]."
)
@app.command()
def set(
key: str | None = Argument(None, help="The key to set"),
value: str | None = Argument(None, help="The value to set"),
):
"""Set a key in the global config file."""
if key is None:
key = prompt("Enter the key to set: ")
if value is None:
value = prompt(f"Enter the value for {key}: ")
set_key(global_config_file, key, value)
@app.command()
def unset(key: str | None = Argument(None, help="The key to unset")):
"""Unset a key in the global config file."""
if key is None:
key = prompt("Enter the key to unset: ")
unset_key(global_config_file, key)
@app.command()
def edit():
"""Edit the global config file."""
editor = os.getenv("EDITOR", "nano")
subprocess.run([editor, global_config_file])
if __name__ == "__main__":
app()
Utility to manage the global config file via mini-extra config.
minisweagent.run.extra.config
Utility to manage the global config file.
You can also directly edit the .env file in the config directory.
It is located at [bold green]{global_config_file}[/bold green].
app
module-attribute
app = Typer(
help=format(global_config_file=global_config_file),
no_args_is_help=True,
rich_markup_mode="rich",
add_completion=False,
)
console
module-attribute
console = Console(highlight=False)
configure_if_first_time
configure_if_first_time()
Source code in src/minisweagent/run/extra/config.py
49 50 51 52 53 | |
setup
setup()
Setup the global config file.
Source code in src/minisweagent/run/extra/config.py
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | |
set
set(
key: str | None = Argument(None, help="The key to set"),
value: str | None = Argument(
None, help="The value to set"
),
)
Set a key in the global config file.
Source code in src/minisweagent/run/extra/config.py
85 86 87 88 89 90 91 92 93 94 95 | |
unset
unset(
key: str | None = Argument(
None, help="The key to unset"
),
)
Unset a key in the global config file.
Source code in src/minisweagent/run/extra/config.py
98 99 100 101 102 103 | |
edit
edit()
Edit the global config file.
Source code in src/minisweagent/run/extra/config.py
106 107 108 109 110 | |