rename: brand the product BearDrive, keep sfs as the CLI

BearDrive is the product and repo brand (open source + future managed
cloud); sfs stays the CLI command, and .sfs/.sfsignore/~/.sfs conventions
are unchanged, so nothing breaks. Brew formula becomes
runbear-io/tap/beardrive (still installs the sfs binary).

Not included here (need the GitHub repo rename first): the Go module
path and repo URLs.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HHEUaYfFHhmDvqLYw74Ehz
This commit is contained in:
Snow Lee
2026-07-07 14:52:32 -07:00
co-authored by Claude Fable 5
parent 2d29ff8aac
commit 7f098b3ff5
10 changed files with 25 additions and 22 deletions
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "sfs",
"owner": { "name": "runbear", "email": "snow@runbear.io" },
"description": "sfs — a synced file system for AI agents",
"description": "BearDrive (sfs) — a synced file system for AI agents",
"plugins": [
{
"name": "sfs",
"source": "./plugin",
"description": "Mount folders that stay in sync across devices through S3/GCS/any object store. Installs the sfs skill, /sfs:mount and /sfs:status commands, and turn-boundary sync hooks in one step.",
"description": "BearDrive: mount folders that stay in sync across devices through S3/GCS/any object store. Installs the sfs skill, /sfs:mount and /sfs:status commands, and turn-boundary sync hooks in one step.",
"category": "workflow",
"tags": ["sync", "files", "workspace", "s3", "gcs", "agents"]
}
+5 -4
View File
@@ -1,9 +1,10 @@
# Release automation: `goreleaser release` on a tagged commit builds
# macOS/Linux binaries and publishes the Homebrew formula to
# runbear-io/homebrew-tap, enabling `brew install runbear-io/tap/sfs`.
# runbear-io/homebrew-tap, enabling `brew install runbear-io/tap/beardrive`.
# The product is BearDrive; the binaries keep their short names (sfs, sfs-web).
version: 2
project_name: sfs
project_name: beardrive
builds:
- id: sfs
@@ -41,12 +42,12 @@ checksum:
name_template: checksums.txt
brews:
- name: sfs
- name: beardrive
repository:
owner: runbear-io
name: homebrew-tap
homepage: https://github.com/runbear-io/sfs
description: "Synced file system for AI agents: mount, sync, and track folders"
description: "BearDrive: a synced file system for AI agents — mount, sync, and track folders"
license: MIT
test: |
assert_match "sfs", shell_output("#{bin}/sfs version")
+1 -1
View File
@@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
## What this is
`sfs` is a Go CLI that mounts any folder as a synced volume: contents sync across devices through cloud object storage (S3, GCS, S3-compatible, or a plain directory), with per-file change history and offline support. No server — devices converge through append-only journals in a dumb object store.
**BearDrive** is the product name; `sfs` is its CLI (and the historical project name — binary names, `.sfs`/`.sfsignore` files, and `~/.sfs` stay `sfs` deliberately). `sfs` is a Go CLI that mounts any folder as a synced volume: contents sync across devices through cloud object storage (S3, GCS, S3-compatible, or a plain directory), with per-file change history and offline support. No server — devices converge through append-only journals in a dumb object store.
The repo ships two binaries from one Go module: `cmd/sfs` (the CLI + sync daemon) and `cmd/sfs-web` (a read-only web viewer for a remote).
+6 -5
View File
@@ -1,8 +1,9 @@
# sfs — a synced file system for AI agents
# BearDrive — a synced file system for AI agents
**sfs** mounts any folder as a synced volume: its contents stay synchronized
across all your devices through cloud object storage, every change is
tracked (who, when, on which device), and everything keeps working offline.
**BearDrive** mounts any folder as a synced volume: its contents stay
synchronized across all your devices through cloud object storage, every
change is tracked (who, when, on which device), and everything keeps
working offline. The CLI is `sfs` — short for synced file system.
It is built for AI agent workflows — give your agents on every machine the
same `~/agent-workspace`, and notes, plans, memory files, and artifacts
@@ -53,7 +54,7 @@ $ sfs mnt ./workspace --remote s3://my-bucket/workspace
## Install
```sh
brew install runbear-io/tap/sfs # macOS (and Linuxbrew)
brew install runbear-io/tap/beardrive # macOS (and Linuxbrew); installs the `sfs` CLI
```
or from source:
+3 -2
View File
@@ -18,8 +18,9 @@ var version = "0.1.0-dev"
func main() {
root := &cobra.Command{
Use: "sfs",
Short: "A synced file system for AI agents",
Long: `sfs — a mountable, offline-first, synced file system for AI agents.
Short: "BearDrive: a synced file system for AI agents",
Long: `sfs — the BearDrive CLI. A mountable, offline-first, synced file
system for AI agents.
Mount any folder and sfs keeps it synchronized across your devices through
cloud object storage (Amazon S3, Google Cloud Storage, or a plain shared
+1 -1
View File
@@ -199,7 +199,7 @@ func TestFrontendServed(t *testing.T) {
f := newFakeRemote(t)
h := f.server().Handler()
rec := get(t, h, "/")
if rec.Code != 200 || !strings.Contains(rec.Body.String(), "<title>sfs</title>") {
if rec.Code != 200 || !strings.Contains(rec.Body.String(), "<title>BearDrive</title>") {
t.Fatalf("index: %d", rec.Code)
}
}
+2 -2
View File
@@ -22,9 +22,9 @@ async function getJSON(url) {
async function boot() {
try {
const v = await getJSON("api/volume");
$("vault-name").textContent = v.volume || "sfs";
$("vault-name").textContent = v.volume || "BearDrive";
$("vault-remote").textContent = v.remote || "";
document.title = (v.volume || "sfs") + " — sfs";
document.title = (v.volume || "sfs") + " — BearDrive";
} catch { /* non-fatal */ }
await refreshTree();
const p = decodeURIComponent(location.hash.slice(1));
+1 -1
View File
@@ -3,7 +3,7 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>sfs</title>
<title>BearDrive</title>
<link rel="stylesheet" href="style.css">
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>&#128193;</text></svg>">
</head>
+2 -2
View File
@@ -1,7 +1,7 @@
{
"name": "sfs",
"displayName": "sfs",
"description": "Synced file system for AI agents: mount folders that stay in sync across devices through S3/GCS/any object store, with automatic sync at turn boundaries and full change history.",
"displayName": "BearDrive (sfs)",
"description": "BearDrive: a synced file system for AI agents. Mount folders that stay in sync across devices through S3/GCS/any object store, with automatic sync at turn boundaries and full change history. CLI: sfs.",
"version": "0.1.0",
"author": { "name": "runbear", "url": "https://github.com/runbear-io" },
"homepage": "https://github.com/runbear-io/sfs",
+2 -2
View File
@@ -3,9 +3,9 @@ name: sfs
description: Use sfs — a mountable, synced file system for AI agents. Mount any folder and it stays synced across devices through cloud object storage (S3, GCS, S3-compatible, or a shared directory) with full per-file change history and offline support. Use when the user wants to "mount a folder", "unmount", "sync now", "set up sfs cloud storage", "connect sfs to S3/GCS/R2/MinIO/NAS", "check sfs status", "see sfs logs", "see what changed", "who changed this file?", or troubleshoot a stuck sync.
---
# sfs — synced file system for AI agents
# sfs — synced file system for AI agents (BearDrive)
`sfs` mounts any folder as a synced volume backed by an object store. Each mount runs a per-mount background daemon that scans for local changes and exchanges with the remote. Files on disk are always real files — every tool, editor, and agent works on them with no integration.
`sfs` is the CLI of **BearDrive**. It mounts any folder as a synced volume backed by an object store. Each mount runs a per-mount background daemon that scans for local changes and exchanges with the remote. Files on disk are always real files — every tool, editor, and agent works on them with no integration.
Use this skill whenever the user is working with the `sfs` CLI: mounting, unmounting, syncing, configuring a remote, inspecting state, reading change history, or debugging.