Skip to content

v0.1.0 β€” hello, world πŸͺ„

Choose a tag to compare

@hoshiyosan hoshiyosan released this 28 Jul 22:34
· 15 commits to main since this release

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. πŸš€