Droploft v2 CLI — Loft Skill
A loft is a folder-like container of drops inside a workspace. Every drop belongs to exactly one loft.
Loft types
| Type | Visibility | Created by |
|---|---|---|
my |
Personal — only the owner | Auto-created on signup; one per user |
all_hands |
Every workspace member | Workspace owner / admin |
restricted |
Explicit member list | Workspace owner / admin |
Layer 1 flows
droploft loft +list # lofts you own
droploft loft +switch # interactive (TTY)
droploft loft +switch --loft <id> # non-TTY / scripts
loft +switch calls GET /v1/me/navigation so it sees lofts in every workspace you belong to (not just personal). It also updates profile.workspace_id to match the chosen loft's workspace, so subsequent commands inherit both.
Layer 2 resource verbs
droploft lofts list
droploft lofts get <loft-id> # detail incl. member_count, viewer_role
droploft lofts create --data '{"name":"Engineering","type":"all_hands","workspace_id":"<ws>"}'
droploft lofts documents <loft-id> # dashboard cards (with summary + tags)
Patterns
Move work into a fresh shared loft
WS=$(droploft config get workspace_id --format json | jq -r '.data.workspace_id')
droploft lofts create --data "{\"name\":\"Launch Q1\",\"type\":\"all_hands\",\"workspace_id\":\"$WS\"}" \
--format json | jq -r '.data.id'
Switch profile to a loft you found by name
LOFT=$(droploft lofts list --format json --jq '.[] | select(.name=="Launch Q1") | .id')
droploft loft +switch --loft "$LOFT"
Errors
loft +switchwith no flag in non-TTY →non_interactive(exit 2). Pass--loft <id>.- Creating an
all_handsorrestrictedloft requires workspace owner/admin role; otherwise 403.