Skip to content

Changelog

All notable changes to airfs are documented here. Versions follow semantic versioning.

v0.2.0 โ€” a workspace in one command ๐Ÿš€

You no longer need a file before you can mount anything. Until now, trying airfs at all meant opening an editor, writing a sources.txt, saving it in the right place, and only then mounting. That is a lot of ceremony to answer "what does this thing actually do?" โ€” so now you can say what your layers are on the command line and be looking at the result a second later.

  • โšก airfs mount -s, once per layer. airfs mount --target ~/scratch-ws -s ~/ai/personal -s ~/ai/project creates the target, writes its sources.txt, and serves the view. The order you pass the flags in is the precedence order, most general first โ€” same rule as the file, because it is the file.
  • โœ๏ธ What you typed is what gets written. ~/ai/personal stays ~/ai/personal in the file instead of being frozen into /home/you/..., so the configuration you end up with is one you would have written by hand and can keep editing that way.
  • ๐Ÿ›‘ A typo cannot cost you your configuration. -s replaces the file whole rather than appending to it โ€” but the new list has to resolve first. Name a directory that is not there and you get exit 2 and the configuration you already had, untouched.

It replaces, it does not add. ๐Ÿ’ฅ Every layer you want has to be on the command line; whatever the file said before, comments and ordering included, is gone, and there is no backup. That is deliberate โ€” a flag that appended would build a precedence order nobody wrote โ€” but point it at a workspace you care about only once you have read Declaring layers.

v0.1.0 โ€” hello, world ๐Ÿช„

Many sources, one read-only view, no copies. Your AI capabilities are scattered across repositories โ€” personal, work, one per project โ€” and every tool wants a single folder. Copy them together and each copy starts drifting from the day you made it. airfs gives you the folder without the copies.

You write down which repositories a workspace is made of, in order. airfs shows them to you as one directory ๐Ÿ“‚. Nothing moves, nothing is duplicated, and editing a skill in the repository that owns it changes what every workspace layering it sees โ€” right away, with no sync step to remember. ๐Ÿ”„

  • ๐Ÿฅ‡ Order decides. sources.txt is one path per line, most general first. Two layers both shipping a commit skill? The one declared last wins โ€” and it wins whole, never half of yours stitched onto half of theirs.
  • ๐Ÿ•ต๏ธ Nothing gets shadowed behind your back. airfs sources prints the resolved list and names every entry that lost, right next to the one that beat it. A workspace you cannot explain is a workspace you cannot trust.
  • ๐Ÿšช One mount per kind. airfs mount serves agents/, skills/, commands/, and scripts/ together โ€” in the foreground, or with --detach when you want your terminal back. airfs status says what is being served, and airfs umount takes it down, stale leftovers included.
  • ๐Ÿ›ก๏ธ Read-only, with the kernel enforcing it. No tool, no agent, and no stray mv can write back into one of your source repositories through the view.
  • ๐Ÿน Pure Go, so installing is one command. It speaks FUSE over /dev/fuse by itself: no C library, no mergerfs to hunt down, nothing to unpack by hand.
  • ๐Ÿฉบ airfs doctor before you file a bug. Mounting needs /dev/fuse and a setuid fusermount3, which no unprivileged process can conjure up. doctor checks both and names the package that provides the missing one.
  • ๐Ÿ“ฆ A Go library first, a CLI second. sdk/layerfs is an fs.FS, so your own program can read the merged view in process โ€” no mount, no subprocess, nothing to parse โ€” and fs.WalkDir and friends just work on it.

It is a first release, so: Linux for the mount ๐Ÿง โ€” mounting is Linux-only for now; the Go SDK is plain fs.FS and runs anywhere. Best next step is Get started โ€” about five minutes, ending with a workspace you can keep. ๐Ÿš€