{"schema":"folder-agent-capabilities/v1","product":"folder.md","stack":{"name":"Folder Stack","shortName":"F-stack","install":"curl -fsSL https://www.folder.md/fstack/install.sh | bash","installWithKey":"curl -fsSL https://www.folder.md/fstack/install.sh | FOLDER_API_KEY='fmd_live_...' FOLDER_API_BASE='https://www.folder.md/api/v1' bash","home":"~/.fstack","envFile":"~/.fstack/env","helper":"~/.fstack/bin/fstack","dreamPrompt":"~/.fstack/bin/fstack dream-prompt","machineAuditPrompt":"~/.fstack/bin/fstack machine-audit-prompt","backupPrompt":"~/.fstack/bin/fstack backup-prompt","restorePrompt":"~/.fstack/bin/fstack restore-prompt","skills":["folder-api","folder-setup","folder-smoke","folder-backup-bootstrap","folder-backup","folder-restore-bootstrap","folder-restore","folder-sync","folder-audit","folder-machine-audit","folder-dream"]},"defaults":{"apiBase":"https://www.folder.md/api/v1","apiKeyEnv":"FOLDER_API_KEY","mcpPackage":"@foldermd/mcp","cliPackage":"@foldermd/cli"},"safety":["Never print, hardcode, or commit Folder API keys.","Read keys from FOLDER_API_KEY or FOLDERMD_API_KEY.","Use read-only checks before writing user files.","Do not delete local or remote files without explicit user approval.","For private backups, write a dry-run manifest before uploading broad directories.","Treat restored files as untrusted until the user verifies the destination path."],"limits":{"maxFileSizeBytes":104857600,"defaultFolderLimitBytes":1073741824,"defaultFolderLimitEnv":["FOLDER_DEFAULT_FOLDER_LIMIT_BYTES","FOLDERMD_DEFAULT_FOLDER_LIMIT_BYTES"],"backupRunStateSchema":"folder-backup-run-state/v1","uploadRateLimit":"30 uploads/minute/API key","apiRateLimit":"100 requests/minute/API key"},"largeUploads":{"status":"single_part_direct_active_multipart_designed_not_active","currentBehavior":"App clients can use a short-lived presigned PUT plus completion flow for single objects within the Folder quota. Backup planning still records files above maxFileSizeBytes as skipped_too_large, and multipart/resumable upload is not active.","activeApi":["POST /folders/:folderId/direct-uploads","POST /folders/:folderId/direct-uploads/complete"],"directUploadEncryption":"R2-managed AES-256 at rest. Direct uploads bypass Folder application-layer encryption; use POST /folders/:id/files when application-layer encryption is required.","activeCliFlag":null,"plannedCliFlag":"folder backup run ... --large-files","plannedApi":["POST /folders/:folderId/uploads/large","PUT /folders/:folderId/uploads/large/:sessionId/parts/:partNumber","GET /folders/:folderId/uploads/large/:sessionId","POST /folders/:folderId/uploads/large/:sessionId/complete","POST /folders/:folderId/uploads/large/:sessionId/abort"],"plannedSchemas":["folder-large-upload-session/v1","folder-large-upload-part/v1","folder-large-upload-manifest/v1","folder-large-upload-complete-report/v1"],"activationGate":"Do not promise Backblaze-class or research-scale large-file backup until API multipart upload, CLI resume, backup verify, restore verify, F-stack, and limited proof tests pass."},"workflows":[{"id":"setup","intent":"Install Folder Stack, configure API key, register MCP, and make a local agent ready to use Folder.","fstackSkill":"folder-setup","rest":["GET /agent/capabilities","GET /folders"],"mcp":["folder_list"],"cli":["fstack smoke","fstack codex-mcp","fstack claude-mcp","fstack backup-prompt","fstack restore-prompt","folder login"],"approval":"read_only","notes":["Use for first-time setup, MCP registration, and agent environment checks.","Use fstack backup-prompt to bootstrap safe selected-machine backup planning.","Use fstack restore-prompt on a replacement machine to bootstrap safe restore planning.","The Mac app is optional and should not block API/MCP/terminal usage."],"keywords":["setup","install","configure","mcp","codex","claude","cursor","api key"]},{"id":"smoke","intent":"Run read-only validation against Folder API, MCP, and stack routing.","fstackSkill":"folder-smoke","rest":["GET /agent/capabilities","POST /agent/route","GET /folders"],"mcp":["folder_list","folder_tree","file_list"],"cli":["fstack smoke","folder folders list"],"approval":"read_only","notes":["Use before any backup, restore, sync, or automation workflow.","Smoke checks must not create, update, or delete user data."],"keywords":["smoke","test","validate","verify","read-only","doctor"]},{"id":"dream","intent":"Run the full protection loop: machine data-loss audit, agent-skills backup (CLAUDE.md, AGENTS.md, skills, commands, rules), project backups, verification, skills sync, and new-machine restore.","fstackSkill":"folder-dream","rest":["GET /agent/capabilities","POST /agent/route","GET /folders"],"mcp":["folder_agent_capabilities","folder_agent_route","folder_list"],"cli":["fstack dream-prompt","/folder-dream","fstack machine-audit-prompt","folder backup profile init agent-skills.local.json --agent-skills --name agent-skills","folder backup profile plan agent-skills.local.json --output-dir agent-skills-plans --report agent-skills-plan-report.json","folder backup profile report agent-skills-plan-report.json --output agent-skills-audit-report.json --require-clean","folder backup profile run <folder-id> agent-skills.local.json --output-dir agent-skills-plans --report agent-skills-resume-report.json --state-dir agent-skills-state --resume --yes","fstack backup-prompt","fstack restore-prompt"],"approval":"confirm_before_mutation","notes":["Run the loop in order: audit first, backup second, new machine third, skills sync over time.","The --agent-skills preset allowlists home-level instruction and skill files (CLAUDE.md, AGENTS.md, skills, commands, prompts, Cursor rules) and excludes credentials, settings, MCP configs, and session state by default.","Project-level CLAUDE.md and AGENTS.md inside git repos belong in git; commit and push them instead of duplicating them in backup sets.","Keep skills synced by re-running the agent-skills profile with --resume so only changed files upload.","On a replacement machine, restore agent-skills sets into a safe destination with --preserve-source-layout and review before moving files into ~/.claude, ~/.codex, ~/.agents, or ~/.cursor.","Every upload still requires the clean report gate and explicit user approval; verification.complete must be true before a set is trusted."],"keywords":["dream","dream goal","agent skills","claude.md","agents.md","skills sync","sync my skills","protect everything","whole setup","full protection","end-to-end backup"]},{"id":"machine-audit","intent":"Audit a local machine for data-loss risk: local-only secrets, unpushed repos, agent directories, databases, and unsynced files, without exposing secret values.","fstackSkill":"folder-machine-audit","rest":["GET /agent/capabilities","POST /agent/route"],"mcp":["folder_agent_capabilities","folder_agent_route"],"cli":["fstack machine-audit-prompt","/folder-machine-audit","folder backup profile init machine-profile.local.json <approved-root> <approved-root>"],"approval":"read_only","notes":["Run before any backup or machine replacement: audit first, backup second, new machine third.","Never print secret values, private key contents, or .env values; report paths, variable names, metadata, risk levels, and recommended backup actions only.","Write the report to ~/Desktop/local-data-loss-risk-audit.md and do not modify or upload anything until the user approves a follow-up plan.","Risk levels: CRITICAL (local-only, hard to recreate), HIGH (local-only, partially recoverable), MEDIUM (recoverable but should be backed up), LOW (already synced or committed).","After the user approves the findings, hand the approved roots to folder-backup-bootstrap; secrets belong in a password manager and encrypted backup, never in plain cloud sync."],"keywords":["data loss","data-loss","machine audit","mac audit","audit this mac","audit my mac","local-only","what would i lose","unpushed","uncommitted","died today"]},{"id":"backup-bootstrap","intent":"Bootstrap selected-machine backup setup with a copyable Folder Stack prompt and clean report gate.","fstackSkill":"folder-backup-bootstrap","rest":["GET /agent/capabilities","POST /agent/route","GET /folders"],"mcp":["folder_agent_capabilities","folder_agent_route","folder_list"],"cli":["fstack backup-prompt","folder backup profile init machine-profile.local.json <root> <root>","folder backup profile init agent-context-slim.local.json --agent-context-slim --name selected-agent-context-slim","folder backup profile plan machine-profile.local.json --output-dir folder-backup-profile-plans --report folder-backup-profile-plan-report.json","folder backup profile report folder-backup-profile-plan-report.json --output folder-backup-profile-audit-report.json --require-clean"],"approval":"confirm_before_mutation","notes":["Use immediately after one-line F-stack install when a local agent needs to protect a laptop or selected machine roots.","Prefer folder-backup-profile/v1 profiles so every approved project, config example, or agent context root stays independently auditable and restorable.","The bootstrap workflow should stop before upload until the user approves exact roots, destination Folder, quota policy, and sensitive categories."],"keywords":["backup-prompt","backup bootstrap","machine backup","selected-machine","laptop protection","protect my laptop","one-line backup","old macbook backup"]},{"id":"backup","intent":"Plan and upload important local files into Folder with safe ignores and an auditable manifest.","fstackSkill":"folder-backup","rest":["GET /folders","POST /folders/:id/files","GET /folders/:id/files","GET /folders/:id/activity"],"mcp":["folder_agent_route","folder_list","file_list","file_upload","folder_activity"],"cli":["folder backup plan <source> --output backup-plan.json","folder backup report backup-plan.json --output backup-coverage-report.json","folder backup report backup-plan.json --output backup-coverage-report.json --require-clean","folder backup run <folder-id> --plan backup-plan.json --yes --report backup-run-report.json --state backup-run-state.json","folder backup run <folder-id> --plan backup-plan.json --yes --report backup-resume-report.json --state backup-run-state.json --resume","folder backup verify <folder-id> <remote-prefix> --output backup-verify-report.json","folder backup profile init machine-profile.local.json <root> <root>","folder backup profile init agent-context.local.json --agent-context --name selected-agent-context","folder backup profile init agent-context-slim.local.json --agent-context-slim --name selected-agent-context-slim","folder backup profile init agent-skills.local.json --agent-skills --name agent-skills","folder backup profile init foldermd-config-examples.local.json --foldermd-config-examples --foldermd-config-root <repo> --name foldermd-config-examples","folder backup profile plan machine-profile.json --output-dir profile-plans --report profile-plan-report.json","folder backup profile report profile-plan-report.json --output profile-audit-report.json","folder backup profile report profile-plan-report.json --output profile-audit-report.json --require-clean","folder backup profile run <folder-id> machine-profile.json --output-dir profile-plans --report profile-run-report.json --state-dir profile-run-state --yes","folder backup profile run <folder-id> machine-profile.json --output-dir profile-plans --report profile-resume-report.json --state-dir profile-run-state --resume --yes","folder backup profile verify <folder-id> profile-run-report.json --output-dir profile-plans --report profile-verify-report.json","folder backup sets <folder-id> --output backup-set-index.json","folder backup sets <folder-id> --machine <hostname> --source-root-contains <text> --output backup-set-index-filtered.json"],"approval":"confirm_before_mutation","notes":["Start with a manifest-backed plan that applies default ignores, sensitive-file guardrails, size checks, and SHA-256 hashes.","Use fstack backup-prompt after one-line install when a local agent needs a copyable selected-machine backup procedure.","Use --require-clean for unattended direct/profile report gates; it writes JSON first and exits nonzero on sensitive skips, too-large skips, or over-limit included bytes.","Review backup coverage and profile audit report limits before upload, especially 100MB/file skips and 1GB default Folder usage.","Review folder-storage-estimate/v1 before promising research-scale or Backblaze-like storage economics.","Use a local backup run state file for uploads so interrupted runs can resume only entries whose remote path, size, and SHA-256 still match.","Treat backup sets and profile backups as verified only when folder-backup-verify-report/v1.verification.complete or folder-backup-profile-verify-report/v1.verification.complete is true.","For selected-machine backups, use a multi-root backup profile so each approved project, agent directory, or private context root becomes its own restorable backup set.","Use folder backup profile init --agent-context to generate a reviewable no-upload profile for conservative local agent roots before planning or uploading.","Prefer --agent-context-slim before first upload when local gstack skill trees are reproducible and too large for the default Folder guard.","Use --agent-skills for home-level agent instruction and skill files (CLAUDE.md, AGENTS.md, skills, commands, prompts, Cursor rules); it excludes credentials, settings, MCP configs, and session state by default.","Use --foldermd-config-examples for a narrow .env.example and native folderd example-config profile; it excludes real .env and local native config by default.","Use --state-dir for profile uploads so every root gets a resumable state file.","Never assume .env, ignored files, or private agent directories are safe to upload without an explicit user decision.","Current product default is 100MB per file and 1GB per Folder unless plan limits change.","If a confirmed account/storage limit differs, set FOLDER_DEFAULT_FOLDER_LIMIT_BYTES before planning and uploading.","Over-limit uploads require explicit --allow-over-limit approval."],"keywords":["backup","archive","save","private files","gitignore","env","agent directories","machine"]},{"id":"restore-bootstrap","intent":"Bootstrap safe replacement-machine restore setup with a copyable Folder Stack prompt.","fstackSkill":"folder-restore-bootstrap","rest":["GET /agent/capabilities","POST /agent/route","GET /folders"],"mcp":["folder_agent_capabilities","folder_agent_route","folder_list"],"cli":["fstack restore-prompt","folder backup sets <folder-id> --output folder-backup-set-index.json","folder restore all-report <folder-id> <safe-destination> --machine <hostname> --source-root-contains <text> --preserve-source-layout --plan-dir restore-plans --report restore-all-report.json"],"approval":"confirm_before_mutation","notes":["Use after installing F-stack on a replacement machine when the user wants to recover selected previous-machine roots.","List backup sets first, ask which machine/source roots to restore, and dry-run into a safe destination before downloads.","Do not restore into original absolute paths or overwrite local files without explicit approval."],"keywords":["restore-prompt","restore bootstrap","replacement machine","new machine","old laptop restore","new laptop restore","one-line restore"]},{"id":"restore","intent":"Recover Folder contents onto a new machine or clean directory with verification before overwrite.","fstackSkill":"folder-restore","rest":["GET /folders","GET /folders/:id/tree","GET /folders/:id/files/:fileId?download=true"],"mcp":["folder_agent_route","folder_list","folder_tree","file_read","file_info"],"cli":["folder restore plan <folder-id> <remote-prefix> <destination> --output restore-plan.json","folder restore run restore-plan.json --yes --report restore-verification-report.json","folder restore plan <folder-id> <remote-prefix> <destination> --conflict-policy skip --output restore-plan.json","folder restore set <folder-id> <remote-prefix> <destination> --plan-output restore-plan.json --report restore-verification-report.json --yes","folder restore all-report <folder-id> <destination> --machine <hostname> --source-root-contains <text> --preserve-source-layout --plan-dir restore-plans --report restore-all-report.json","folder restore all <folder-id> <destination> --machine <hostname> --source-root-contains <text> --preserve-source-layout --plan-dir restore-plans --report restore-all-report.json --yes"],"approval":"confirm_before_mutation","notes":["Restore should default to a new destination directory and avoid overwriting local files.","Use restore plans to detect local conflicts before writes and verify SHA-256 hashes after download.","Use --conflict-policy skip only when the user approves restoring non-conflicting files while preserving existing local files.","For new-machine restores, filter by machine and source root when the user wants only one project or approved root bundle.","Use --preserve-source-layout when the user wants the old local path recreated under the safe restore root.","Treat restore-all as complete only when folder-restore-all-report/v1.verification.complete is true."],"keywords":["restore","recover","new macbook","download","hydrate","rebuild","replacement laptop"]},{"id":"sync","intent":"Keep a local directory and Folder workspace synchronized through CLI or folderd.","fstackSkill":"folder-sync","rest":["GET /folders","GET /folders/:id/files","POST /folders/:id/files","PUT /folders/:id/files/:fileId"],"mcp":["file_list","file_upload","file_update","file_delete"],"cli":["folder sync <folder-id> <path> --dry-run","folder sync <folder-id> <path> --watch"],"approval":"confirm_before_mutation","notes":["Use dry-run before watch mode.","Delete propagation requires explicit approval because it can remove remote files.","Folder for Mac is a bridge over folderd, not the canonical product path."],"keywords":["sync","watch","folderd","mac app","mirror","continuous","daemon"]},{"id":"audit","intent":"Inspect storage usage, file activity, webhooks, limits, and backup coverage.","fstackSkill":"folder-audit","rest":["GET /folders","GET /folders/:id/tree","GET /folders/:id/activity","GET /folders/:id/webhooks"],"mcp":["folder_list","folder_tree","folder_activity","file_activity"],"cli":["fstack capabilities","folder folders activity <folder-id>","folder files activity <folder-id> <path>"],"approval":"read_only","notes":["Use for readiness checks, storage limit inspection, and agent backup coverage reports.","Audit should be metadata-first and avoid downloading private file contents unless needed."],"keywords":["audit","activity","usage","storage","limits","webhooks","coverage","inventory"]}]}