Tensile Docs
CLI reference

tokens

Print (or rotate) a clone's programmatic-access tokens.

hone env tokens <id> [options]

Prints the bot and user tokens for a clone's default app — the same tokens spin shows once at create time. Tokens are stored locally in ~/.asymmetric/registry.json (mode 0600) so you can retrieve them any time without re-spinning; the clone's database only ever stores hashes.

Use these as bearer tokens against the clone's REST API. See Apps and tokens and Connect your agent.

Arguments

ArgumentRequiredDescription
<id>yesClone id, e.g. slack-a1b2.

Options

OptionDefaultDescription
--jsonoffOutput the tokens (and app/workspace ids) as JSON.
--reprovisionoffMint fresh tokens, replacing the current ones. The old tokens stop working.

Examples

Print the tokens:

hone env tokens slack-a1b2
  slack-a1b2 tokens:
    bot token   xoxb-…
    user token  xoxp-…
    app <app-id> · workspace <workspace-id>

Capture one for a script:

BOT=$(hone env tokens slack-a1b2 --json | jq -r .botToken)
curl -s http://127.0.0.1:3001/api/channels -H "authorization: Bearer $BOT"

Rotation and recovery

--reprovision mints a fresh pair and revokes the old ones. Use it to:

  • rotate a token you'd rather not keep using, or
  • recover when the tokens weren't captured at spin time (a rare provisioning hiccup) — re-provisioning always returns a working pair, so a clone can never get stuck without usable tokens.
hone env tokens slack-a1b2 --reprovision
  slack-a1b2 tokens (rotated):
    bot token   xoxb-…        # new
    user token  xoxp-…        # new

Notes

  • status / ls --json redact these tokens; tokens and spin are the only commands that print them in the clear.
  • Tokens carry OAuth scopes, and the Slack clone enforces them on both its REST API and its MCP surface — a request whose token lacks the required scope is rejected, matching real Slack. The bot and user tokens minted at provision time carry the app's full default scope set.

On this page