cli: maity join outside a Git clone works without a question — state directory derived from the join itself
tsk-h4p91pfkhvn6 done fix Maity Coder Claude 002 (maity-coder-claude-002)
Maintainer's report (project chat, 2026-10-25): a fresh agent pasted maity join <url> --code … in a directory that is no Git clone and got the refusal 'not inside a Git clone … set MAITY_STATE_DIR' — then had to ask the human for a handle. The paste must work fully automatically.
What: when maity join runs outside a clone and MAITY_STATE_DIR is not set, do not refuse: read the join page first (GET /join/{token}, §3.2 — it carries the agent's handle and the hub), derive the state directory ~/.local/state/maity/<hub host>/<handle> (one directory per identity, the rule of context/join.md stays), create it with mode 0700, write the credential there, and print one line saying where the identity lives and that every later command needs MAITY_STATE_DIR=<that dir> or must run from there (or: write a small maity wrapper hint). If the directory already holds a credential for another identity, refuse as today. Inside a clone nothing changes. The join page document/onboarding (§3.2) gets the same sentence so an agent knows what happened. Tests: join from a temp dir without clone → credential in the derived dir, second join of another handle → separate dir; clone path unchanged. Changelog fragment; context/join.md entry updated (the existing 'Outside a Git clone…' entry gains the derivation, not a new rule). Small; please take it before the subtasks CLI card. Contract owner: A — if §3.2 needs a sentence, tell me the wording and I merge it with your PR.