Skip to content

Releases: c-wenlong/quiver

v1.0.0: first stable release

Choose a tag to compare

@c-wenlong c-wenlong released this 12 Oct 22:24
c338858

First stable release. swe (the CLI) and the Quiver macOS app share one data model under ~/.quiver. Every --json command uses the {schema, data} envelope, and the design is documented in docs/.

Highlights since 0.2.10

swe

  • Cursor's Grok Bot allowance in swe list --usage.
  • Harness display names and primary colours (swe edit --display-name, --primary-color).
  • Devin's exhausted quota reads as 100% used.
  • Changed: swe harness discover, swe mcp discover, swe skills discover and swe setup with --json now use the standard envelope, and swe setup --json --apply prints one document.

Quiver app

  • Accounts, menu bar and desktop widgets: per-account projections, live previews, widgets that fill their space, and harness logos everywhere.
  • Overview: a fixed-scale trend chart, a heatmap that responds on every square, cached ranges, and a scan that skips a broken source log with SQLite's real message.
  • Compute: RAM, CPU and GPU trends in each harness's colour, a top-5 process fold, and cards for idle harnesses.
  • Plugins and skills: browse and edit your own (display-name renames, manifest forms, a large file editor, add or remove parts, deletes go to the Trash), with marketplaces as collapsible cards.
  • MCP servers in one Local/Remote list with folder git details inline. Service status cards start collapsed. API keys can be checked (salted fingerprints only) and renamed in place.
  • Widgets render again: bundle versions are plain numbers, so WidgetKit accepts them.

Audits

  1. Databases and caches: docs/data-model.md.
  2. App structure and swe contracts: docs/app-architecture.md, docs/json-contracts.md.
  3. swe controller / service / model layering: docs/backend-architecture.md.
  4. Tests and coverage: Python above an 84% floor, QuiverCore at 86.75%. See docs/testing.md.

Full details are in CHANGELOG.md.

v0.2.9 — fixes v0.2.8

Choose a tag to compare

@c-wenlong c-wenlong released this 20 Aug 10:54

v0.2.8 could not start on Python 3.10 or 3.11. Upgrade if you installed it.

swe find's summary line used a nested f-string with implicit concatenation inside a replacement field:

print(f"\n  {c('dim', f'{total} skills · {len(linked)} roots synced · '
                      f'{len(other)} left alone')}\n")

That is PEP 701, valid only on 3.12+. The project's declared floor is 3.10, where it raises SyntaxError on import, so the CLI would not start at all. It parsed fine locally because the dev interpreter is 3.12.

Added: a syntax-floor test

Compiles every file in src/ with an interpreter at or below requires-python, so this class of bug fails locally rather than in a release.

Two earlier attempts at that guard passed while the bug was sitting in the tree, which is worth recording:

Attempt Why it silently passed
ast.parse(feature_version=(3, 10)) feature_version gates a short list of AST features, not f-string tokenization. It accepts this syntax even at (3, 8).
py_compile(cfile='/dev/null') Raises FileExistsError before it reaches the parser, and the test only caught PyCompileError, so the offender list stayed empty.

It uses the builtin compile() now, and was verified the only way that means anything: by reintroducing the v0.2.8 defect and confirming it fails with the right file and line.

Everything in v0.2.8 is included here.

v0.2.8 — swe find

Choose a tag to compare

@c-wenlong c-wenlong released this 20 Aug 08:48

Broken. Use v0.2.9. This release raises SyntaxError on import on Python 3.10 and 3.11, so the CLI does not start.


swe init answers "what would change". There was no way to ask "what is there", which is the question you have when a slash command has gone missing or a harness is not picking something up.

swe find

swe find amd       # AGENTS.md and every harness pointing at it
swe find skills    # skills, plugins, and every harness skill root
swe find           # both

Read-only, and it shares swe init's classification so the two cannot drift apart.

Where it scans

default the current directory, recursively
--root / -r from wherever ~/.quiver lives, recursively

What it shows: --scope=global\|local\|all, default global

A file is global when it sits directly in a harness root (~/.<tool>/ or ~/.config/<tool>/), or when it is symlinked to the shared copy. That rule alone cuts 112 AGENTS.md files on a real machine down to the 10 a harness actually loads into every session.

One level deeper inside a harness directory is neither global nor local: plugin caches, vendored repos, editor extensions, sandbox workspaces. Those ship their own instructions and never appear while you are coding, which makes them the interesting surface for injected text. They are counted in every view and listed under --scope=all:

10 found · 9 synced to the shared copy
41 more inside harness directories (plugin caches, vendored repos) — see --scope=all

So the number is always in front of you, and an unexplained jump after installing a plugin is visible without drowning the default view.

Two things the implementation needed

Pruning. Walking a home directory naively visits 107,803 directories in 9.3s, dominated by package-manager caches (~/.npm alone is ~20k). Pruning those plus build output and vendored checkouts brings it to 1.4s. There is no useful depth cap to apply instead, since real hits reach depth 14.

Middle elision. Paths shorten from the middle rather than the left. Nearly every one of these files is called AGENTS.md or CLAUDE.md, so left-truncation preserved the half carrying no information. The head is what distinguishes .codex from .cursor from .antigravity.

Removed

The ~/.agents legacy alias, along with the 74 per-skill symlinks six harnesses kept pointing into it. 42 of those were already broken. Those roots link to ~/.quiver/skills directly now.


40 tests on find, 867 passing overall. One asserts that swe find never writes to the filesystem.

v0.2.7 — one root: ~/.quiver

Choose a tag to compare

@c-wenlong c-wenlong released this 19 Aug 17:55

Quiver owned two directories: ~/.quiver for the assets harnesses read, and ~/.config/swe for its own state. Authored files lived in both, while 330 KB of cache sat next to tools.json. They are now one root, split by lifecycle rather than by audience, so ~/.quiver can be a git repo.

~/.quiver/
├── AGENTS.md      symlinked into 9 harnesses under each one's own filename
├── skills/        symlinked in as every harness's skills/   (14 roots)
├── config/        tools, stars, mcp, providers, skill links   ← version this
├── cache/         session + rate-limit caches                 ← gitignored
├── completions/   reports/   backups/
└── .gitignore

The root sits in $HOME rather than $HOME/.config to match the harnesses it manages: 24 of 28 harness config directories live there.

Added

  • swe init creates the layout and symlinks each harness's instruction file and skills root to the shared copy. Filenames (CLAUDE.md, QWEN.md, CRUSH.md, GEMINI.md) were confirmed against the installed binaries; harnesses whose convention could not be confirmed are skipped rather than guessed at.
  • swe init --migrate moves a pre-0.2.7 ~/.config/swe into place. Unrecognised files go to config/ rather than being dropped, and existing destinations are never clobbered. --check for a dry run, --force to back up and replace real files.
  • swe list --usage and --links. Usage was the only networked part of the listing, so it is now opt-in. The default runs in ~70 ms against ~870 ms on a cold cache, and the table narrowed from 146 to 128 columns. --links shows AGENTS.md and skills link status.

Fixed

  • The rate-limit cache never covered providers that report nothing. A fetcher returning no data was absent from the cache, so it counted as a miss and re-ran on every invocation. For antigravity that meant spawning two subprocesses per swe list, 70 ms even on a warm cache. Negative results are now remembered for the same TTL, taking the warm path to 0.1 ms. Fetchers that hit the deadline are still retried rather than recorded as empty.
  • paths.py is now the single owner of the layout. Three modules each had their own hardcoded copy of the shared skills root, which is what broke swe skills tree when that tree moved.
  • Removed 331 KB of dead single-file-era source from the config directory (mcp.py, mcp_formats.py, mcp_server.py, tests/, __pycache__/, archive/). Nothing referenced it: not the package, not any MCP config, not the shell profiles.

Upgrading

swe init --check      # see what would change
swe init --migrate    # move ~/.config/swe into ~/.quiver

775 tests pass, 26 of them new and specific to the migration: no path constant escapes the root, caches never land in the versioned half, contents survive byte for byte, unknown files are kept rather than dropped, existing destinations are not overwritten, and a second run is a no-op.

v0.2.5

Choose a tag to compare

@c-wenlong c-wenlong released this 06 Jul 23:09

Skills management

  • swe skills discover — scan ~/Desktop and ~/Documents for skill catalogs
  • swe skills catalog add|list|remove — register extra skill directories (catalog . for cwd)
  • swe skills tree [--sync] — inspect harness symlink layout
  • swe skills link|unlink|move — manage symlinks and move skills between roots
  • swe skills help <topic> — per-topic help (catalog, discover, tree, link, unlink, move, scope)
  • Skills list shows VISIBLE VIA column for symlinked harness scopes

Docs

  • README Skills section with discover, catalog, symlink, and move workflows
  • Expanded swe help for skills, setup, and discover

Install: pipx install git+https://github.com/c-wenlong/quiver.git@v0.2.5

v0.2.2

Choose a tag to compare

@c-wenlong c-wenlong released this 06 Jul 22:18

What's new

  • swe mcp discover — scan tool MCP configs vs ~/.config/swe/mcp.json
  • swe setup — now 3 steps: harnesses, MCP servers, skills-root symlinks
  • Social preview — assets/social-preview.png (1280×640)
  • README — documents setup, discover, and harness discover

Install

pipx install git+https://github.com/c-wenlong/quiver.git@v0.2.2

v0.1.0 — Initial release

Choose a tag to compare

@c-wenlong c-wenlong released this 06 Jul 21:26

First public release of quiver — a central manager for AI coding CLI tools.

Install

pipx install git+https://github.com/c-wenlong/quiver.git
swe --help

Highlights

  • Tool registry with tags, aliases, and 100-day usage sorting (swe list)
  • Launch any registered CLI (swe use)
  • Cross-agent session resume (swe session)
  • Model usage analytics (swe models)
  • Skills discovery across all skill roots (swe skills)
  • MCP server sync between tools (swe mcp)

See CHANGELOG.md for full details.