team unlock

Releases a lock team lock took, and only that caller's lock. The holder file has to name this caller: the same project and the same by line. Anyone else is shown who holds it and refused. A lock whose holder file is missing, unreadable, or not the four lines team lock writes is left where it is — the directory is not removed to find out. When no caller can release it, the owner removes it by hand, as team lock describes under "When the holder is gone".

Synopsis

team unlock <name> [--json]

What it reads and writes

Reads the team file in the current folder, and the lock's who file under <home>/.config/team/locks/<name>.lock. When the caller matches, it removes who and then the directory. The directory goes second, and only when it is empty: a file left beside who is not swept, and who is put back.

Who may run it

The caller who took it. The same rules as team lock for who that is.

Flags

FlagMeaning
<name>the lock's name, the same closed set as team lock
--jsonemit a team.unlock v1 JSON document (schema/unlock.schema.json) on stdout
--help, -hthe usage, and exit 0

Refusals

MessageExit
team unlock: a <name> is required (with the usage)2
team unlock: unexpected "<word>" (with the usage)2
team unlock: "<name>" is a name, not a path: lowercase letters, digits and hyphens (with the usage)2
team unlock: <why the team file did not load>2
<name>: not held1
<name>: held by <by> (<team>) since <at> — <run>, not you1
<name>: its holder file is not there yet; left <path> in place1
<name>: its holder file cannot be read; left <path> in place1
<name>: its lock is not a directory; left <path> in place1

Exit codes

  • 0 — the lock was released.
  • 1 — it is not held, it is held by someone else, its holder can't be read, or the directory could not be removed.
  • 2 — the invocation can't be read, or the team file can't.

Examples

.agents/team.yaml
format: 1
project: beacon
coordinator: claude-keeper
operator: claude-keeper
trust:
  - ~/.config/team/lobby
  - ~/Code/beacon
workspace:
  mode: shared
seats:
  - role: coordinator
    name: claude-keeper
    cli: claude-code
    vendor: anthropic
    model: Claude Opus
    version: "5.5"
    launch: claude --model claude-opus-5-5

Take it, then release it. Releasing a lock that is not held is a refusal:

Terminal
 team lock demo --for "a check"
demo: taken
team: beacon
run: a check
by: owner
at: 2026-10-04T09:00:00Z
 team unlock demo
demo: released
 team unlock demo ; echo "exit $?"
demo: not held
exit 1