Commit log

36ace5e chore(agents): update fallback models

Click to expand commit body
Update fallback models from GLM-4.6 to GLM-4.7 and
DeepSeek-V3.1-Terminus to MiniMax-M2 across all agent definitions
(aider, claude, llxprt, qwen) in both fish and zsh implementations.

Assisted-by: GLM 4.7 via Crush

Amolith created

e712d7a chore(license): compliant with REUSE

Amolith created

f9ade6d docs(readme): add badges

Amolith created

d9d4057 docs(zsh/antigen): specify branch

Amolith created

910f922 docs(readme): add table of contents

Click to expand commit body
Assisted-by: Claude Sonnet 4.5 via Crush

Amolith created

11dfb08 docs(readme): update GIF/desc

Amolith created

d3e3cb7 fix(demo): correct function paths and model flow

Click to expand commit body
Assisted-by: Kimi K2 Thinking via Crush

Amolith created

1bd5b6f docs(readme): add links to agent install sections

Click to expand commit body
Assisted-by: Kimi K2 Thinking via Crush

Amolith created

0090729 refactor(claude): add medium tier to model groups

Click to expand commit body
- Heavy (-H/--heavy): Opus only
- Medium (-M/--medium): Sonnet + Subagent
- Light (-l/--light): Haiku

Individual slot overrides unchanged except -H/--haiku → -k/--haiku to
avoid conflict with new -H/--heavy flag.

Assisted-by: Claude Sonnet 4 via Crush

Amolith created

998730f docs(readme): clarify agent invocation patterns

Click to expand commit body
Show correct interactive vs non-interactive usage for each agent. Add
install commands and fix table formatting.

Assisted-by: Claude Sonnet 4 via Crush

Amolith created

b78e074 fix(aider)!: use long-form flags only

Click to expand commit body
Aider uses -m for --message and -e for --env-file. synu was using
-m/--model and -e/--editor-model, causing ambiguity.

Now synu only accepts --model and --editor-model (long form) for aider.

Assisted-by: Claude Sonnet 4 via Crush

Amolith created

247d202 feat(zsh): add complete zsh implementation

Click to expand commit body
Ports the entire synu wrapper to Zsh with equivalent functionality:

- Plugin entry point (synu.plugin.zsh) with standard $0 handling
- Main wrapper function with quota tracking and agent dispatch
- Cache system for model preferences (models.conf format)
- All five agent configurations: claude, opencode, aider, llxprt, qwen
- Interactive model selection using gum
- Shell completions for agents and flags
- Taskfile for testing both shell implementations

Updates documentation to reflect multi-shell support.

Assisted-by: Claude Opus 4.5 via Crush

Amolith created

b147f74 fix(agents): remove --selected from gum filter

Click to expand commit body
Assisted-by: Claude Opus 4.5 via Crush

Amolith created

3a4acc1 fix(llxprt): set prov to Synthetic

Amolith created

959fe78 fix(llxprt): remove baseurl, note manual key setup

Click to expand commit body
llxprt doesn't support setting credentials via environment variables.
Users must run `/key {api_key}` once at the llxprt prompt.

Assisted-by: Claude Opus 4.5 via Crush

Amolith created

28e0e02 fix(agents): preserve flag arrays in output

Click to expand commit body
echo $flags concatenates array elements with spaces, causing all flags
to be passed as a single argument. Using printf '%s\n' outputs one flag
per line, which shells properly capture as separate array elements.

Assisted-by: Claude Sonnet 4 via Crush

Amolith created

88fc4d5 chore(fish): move init to fish dir

Amolith created

157c100 feat(crush): add termux LSP

Amolith created

4af37d7 docs: update paths for fish/ subdirectory

Click to expand commit body
Assisted-by: Claude Opus 4.5 via Crush

Amolith created

aa601e7 refactor(fish): move plugin to fish/ subdirectory

Click to expand commit body
Prepares for multi-shell support by isolating Fish-specific files.

Fundle users should add --path 'fish' to their plugin declaration.

Assisted-by: Claude Opus 4.5 via Crush

Amolith created

6789b49 feat(fish): add init

Amolith created

db8f4fc docs(readme): fix installation instructions

Click to expand commit body
Clarify that both shell reload and fundle install are required steps
rather than alternative options.

Assisted-by: GLM-4.6 via Crush <crush@charm.land>

Amolith created

cd4aca1 docs(readme): add demo GIF and table formatting

Click to expand commit body
Assisted-by: GLM 4.6 via Crush

Amolith created

26c83b6 docs(tape): update demo to use gl6 model

Click to expand commit body
Assisted-by: GLM 4.6 via Crush

Amolith created

b69e7c9 docs(tape): add

Amolith created

0a6a5ad feat(agents): display current model in selection

Click to expand commit body
Show current model ID in header and pre-select current model name in gum
filter for all agent interactive functions.

Assisted-by: Claude Sonnet 4 via Crush

Amolith created

553ba36 feat(agents): update default models

Click to expand commit body
Assisted-by: GLM-4.6 via Crush

Amolith created

7075208 docs(readme): improve project description and formatting

Click to expand commit body
Improved the project description to better explain synu's purpose as a
universal wrapper for LLM agents that tracks Synthetic usage and
interactively preconfigures supported agents. Fixed line wrapping and
formatting throughout the document.

Assisted-by: GLM 4.6 via Crush

Amolith created

f06a5fb docs(readme,agents): updoot

Amolith created

9690014 feat(agents): add aider, llxprt, and qwen agents

Click to expand commit body
- Add aider agent with dual model support (architect + editor)
- Add llxprt agent with openai-compatible config
- Add qwen agent with environment variable config
- Update shell completions to include all new agents
- Follow established agent configuration patterns

Assisted-by: GLM 4.6 via Crush

Amolith created

3f109c2 refactor(quota): swap percent fg/bg colors

Click to expand commit body
Assisted-by: Claude Opus 4.5 via Crush

Amolith created

54818b7 refactor: clarify quota display labels

Click to expand commit body
Change "Session usage" to "Session" and "Usage" to "Overall" for clearer
distinction between session and overall quota usage display.

Assisted-by: GLM-4.6 via Crush

Amolith created

16f4b47 fix(quota): round usage percentage to integer

Click to expand commit body
Assisted-by: Claude Opus 4.5 via Crush

Amolith created

15c2fe6 refactor(synu): show usage percentage in quota

Click to expand commit body
Display 'Usage: N% (X/Y remaining)' instead of 'Remaining: X/Y requests'

Assisted-by: Claude Opus 4.5 via Crush

Amolith created

58e841e chore(crush): add fish lsp

Amolith created

c12e933 feat(agents/opencode): add synthetic/ model prefix

Click to expand commit body
Assisted-by: Claude Sonnet 4.5 via Crush

Amolith created

5e49f26 feat(synu): clean up agent env vars after exit

Click to expand commit body
Agents can now declare which environment variables they set via a
_synu_agent_<name>_env_vars function. The main wrapper automatically
unsets these variables after the agent exits, preventing pollution of
the parent shell environment.

Changes:
- Added _synu_agent_claude_env_vars to declare ANTHROPIC_* and
  CLAUDE_CODE_* vars
- Added cleanup logic in synu.fish to call _env_vars and erase variables
- Fixed string match bug in claude.fish interactive mode (missing --
  separator)
- Updated AGENTS.md to document the new _env_vars function pattern

Assisted-by: Claude Sonnet 4.5 via Crush

Amolith created

5c5739e feat(core): support agents requiring CLI args

Click to expand commit body
Some agents (like OpenCode) accept model configuration via CLI flags
instead of environment variables. Added _synu_agent_{agent}_args hook
that returns additional arguments to pass during execution.

Fixed flag extraction loop in main wrapper to handle arbitrary flag
names (including new -m/model for OpenCode). Adds OpenCode agent
definition that uses both cache system and CLI args feature.

Assisted-by: Claude Sonnet 4.5 via Crush

Amolith created

aa29f28 feat(cache): add persistent model preferences

Click to expand commit body
Introduces XDG-compliant cache for storing user model preferences across
sessions. Cache is stored in $XDG_CONFIG_HOME/synu/models.conf using
simple key=value format (agent.slot = model_id).

Claude agent now checks cache before falling back to hardcoded defaults,
and interactive mode can save selections. Defaults renamed to "fallback"
to clarify they're only used when no cache entry exists.

Assisted-by: Claude Sonnet 4.5 via Crush

Amolith created

16cc892 feat(synu): add universal AI agent wrapper with Synthetic API quota tracking

Click to expand commit body
Implement a Fish shell utility that wraps AI agents while tracking usage
through the Synthetic API. Features include:

- Universal agent wrapper supporting passthrough execution
- Quota tracking and display for Synthetic API calls
- Claude Code integration with configurable model routing
- Interactive model selection using gum for user-friendly experience
- Shell completions for improved usability
- Agent plugin architecture for extensibility

Initial implementation includes core synu functionality, quota management,
and Claude-specific configuration for routing through Synthetic API tiers.

Closes:

Assisted-by: Claude Sonnet 4.5 via OpenCode

Amolith created