Swival: one coding agent for two kinds of model, and a dependency list to read first
A small, powerful, open-source CLI coding agent that works with open models.
At a glance
- What is it?
- Swival is a Python command line coding agent that treats local models and online services as one tool, and its packaging says more about how it is meant to be deployed than its feature list does.
- Who is it for?
- Swival suits someone who wants a single coding agent to point at a local model or a hosted one without swapping tools, and who would rather read Python source than configure a plugin surface. Audit the dependency shape before you install it: the core list carries boto3, google-cloud-aiplatform, starlette and uvicorn, four ceilings stop at the next minor release, and the one optional group pins a starlark-go release candidate.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 11 days ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 4, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The quick start pins Python 3.14 while the package declares 3.13
Two versions of the same requirement sit side by side. The quick start installs with `uv tool install --python 3.14 swival`, while the project metadata sets `requires-python` to 3.13 or newer and the trove classifiers name only Python 3.13. Nothing forces you onto 3.14; the command just tells uv which interpreter to fetch. The macOS route is a separate two-line trust step:
brew trust swival/tap
brew install swival/tap/swivalAfter either path you run `swival` from the project directory, and the first run opens a short setup guide for connecting a model. For a single task the same binary takes the whole instruction as one argument:
swival "Find the cause of the failing tests and fix it"More installation detail sits behind a setup guide page at swival.dev, with the rest of the documentation at the same domain.
One agent covers local models and hosted services
Swival is a coding agent for any model, and local models plus online services run through the same tool, so switching between them does not mean switching agents. The stated reason smaller models are not treated as second class is careful use of the space available for conversation and working notes, with `tiktoken` in the dependency list for token counting and `prompt-toolkit` for the prompt loop itself. Longer work is carried by memory instead of reminders: Swival keeps notes on what it has learned and what is left to do, an interrupted session picks up where it left off, and setting a goal keeps it working toward that goal. `mcp` is also in the list, and Swival connects to other tools and agents and can run as part of a Python program.
Four dependencies stop at the next minor version
The dependency list caps four libraries at the next minor release: `litellm` is held between 1.103.0 and 1.104, `html-to-markdown` below 4, `mcp` below 3, and `google-cloud-aiplatform` below 3. An upstream minor release therefore does not arrive on its own; the ceiling gets edited and a new version ships before you can take it. The build in the tree today is 1.0.46, and three of those shipped inside a month: 1.0.44 on 12 September 2026, 1.0.45 on 23 September, and 1.0.46 on 30 September, with the branch last pushed on that same date. The same metadata still declares Development Status as 4, Beta, so the classifier and the version number disagree about how finished this is.
Cloud SDKs and an ASGI server sit in the core dependency list
For a tool that leads with local models, the install footprint is wide. `boto3` and `google-cloud-aiplatform` are core dependencies rather than extras, and `starlette` plus `uvicorn` sit beside `httpx2`, with `rank-bm25` for search and `rich` for terminal output. Exactly one optional group exists in the metadata, named `metaskills`, and it is a single line: `starlark-go>=1.1.0rc1`. That is a release candidate, so taking the extra means accepting a prerelease dependency. `uv.lock` is committed, and the uv configuration adds `requests>=2.34.2` and `cryptography>=50.0.1` as constraint-dependencies, two floors that appear nowhere in the dependency list itself.
The Homebrew formula is generated by the dist target
The tap is not hand maintained here. `homebrew-tap/` sits at the top level of the tree, and the Makefile dist target runs clean, then `uv build`, then `uv run python scripts/generate_formula.py`. The sdist configuration excludes `homebrew-tap/` from the published tarball, so the tap directory lives in the git repository for the formula generator instead of travelling to anyone installing from a package index. Installing through Homebrew also means trusting the tap before installing from it, which is all `brew trust swival/tap` does. The wheel is narrower than the sdist: it packages only `swival`, while the sdist additionally carries `tests/`, `pyproject.toml`, `README.md`, `LICENSE`, and `ChangeLog.md`.
Secret hiding is one option and the tree keeps an .enc/ directory
Two different controls sit between your credentials and the model. Secret encryption can be enabled with a single option, which hides supported API keys and tokens before they are sent to the model, and `fast-cipher` is the library in the dependency list beside it. Filters are the second control and a second job: they can be added to remove private details such as customer names and internal URLs, which is redaction rather than encryption. The top level of the repository carries an `.enc/` directory next to `.gitignore` and `.gitmodules`, and the README does not say what that directory holds or when it gets written. Anyone checking the project for leaked credentials needs to work that out from the code.
Review, retry, and the security audit are separate switches
Checking the work is part of the tool rather than a habit you have to add. A single option adds a review step, so Swival can check its work and try again when the review finds problems, which turns the retry into part of the loop instead of something you type yourself. A second control moves the review to another model, so a different one can judge the output. The security audit is separate again and looks backwards rather than at the current run: it checks existing code for bugs. Three capabilities, three separate switches, and none of them arrive with a documented flag name or default state in the quick start.
make test drops anything tagged stress and ruff handles style
The Makefile is the whole developer entry point and `all` runs nothing but check. Tests are `uv run python -m pytest tests/ -v -m 'not stress' --durations=25`, so anything marked stress is left out of the default run and the 25 slowest tests are reported. Lint and format are ruff, both aimed at `swival/` and `tests/`, and check runs ruff format in verification mode rather than rewriting files. `make install` is a plain `uv sync`, `make website` calls `uv run --group website python build.py`, and the clean target removes `dist/` along with the Python cache directories. The repository also keeps two documentation locations, `docs/` and `docs.md/`, plus a `scripts/` directory that holds the formula generator.
Editorial conclusion
Swival suits someone who wants a single coding agent to point at a local model or a hosted one without swapping tools, and who would rather read Python source than configure a plugin surface. Audit the dependency shape before you install it: the core list carries boto3, google-cloud-aiplatform, starlette and uvicorn, four ceilings stop at the next minor release, and the one optional group pins a starlark-go release candidate. Confirm which Python you actually get, since the quick start asks for 3.14 while the package floor is 3.13. And weigh a 1.0.46 that still declares Beta status, with three releases landing between 12 and 30 September 2026.
Frequently asked questions
What does Swival do with a local model compared to an online service?
Both go through the same agent. Swival works with local models and online services in one tool, switching models does not mean changing agents, and smaller models get the same attention as the largest ones, with careful use of the space available for conversation and working notes.
How does Swival keep API keys away from the model provider?
Secret encryption can be enabled with a single option, which hides supported API keys and tokens before they are sent to the model, and `fast-cipher` sits in the dependency list. Filters are a separate control for removing private details such as customer names and internal URLs.
Can Swival resume work after a session is interrupted?
Yes. Swival keeps notes on what it has learned and what is left to do, an interrupted session can pick up where it left off, and setting a goal keeps it working toward that goal, so longer jobs do not need constant reminders.
Which Python version does Swival need and how is it installed?
The package declares `requires-python` of 3.13 or newer and the classifiers name Python 3.13, while the quick start installs with `--python 3.14`. Installation is one `uv tool install` command, or two brew commands that trust the swival/tap tap first, and the console script maps to `swival.agent:main`.
Does Swival review its own output or check code for bugs?
Both, as separate features. A single option adds a review step so Swival can check its work and try again when the review finds problems, another model can take over that review, and a built-in security audit checks existing code for bugs.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/swival-swival)