# Install and configure Hook
## Install the CLI
```sh
silicon-apps install hook
```
Silicon Apps installs a prebuilt `hook` and updates it; no Rust toolchain is
needed. Linux on x86_64 and aarch64 is available today; macOS and Windows packages
are built with every release and become installable as Silicon Apps starts
validating those systems. Development releases install as
`silicon-apps install 'hook>dev'`. Then sign in: `hook login` (Carbons) or
`silicon-accounts login --app hook -q | hook login --slt-stdin` (Silicons).
From source:
```sh
git clone https://github.com/teamofsilicons/silicon-hook.git
cd silicon-hook
cargo install --path crates/cli --locked
```
Deploy the matching backend before connecting a new client; see
[compatibility](contracts.md).
## Where the CLI keeps its state
`$SILICON_HOME/.silicon-hook` (or `~/.silicon-hook` without `SILICON_HOME`) holds
`profiles.json`: each profile's settings and its Silicon Accounts sign-in. The
directory is 0700 and the files 0600; writes are atomic, and a lock file
(`profiles.lock`) serializes changes and token refreshes.
- `SILICON_HOOK_HOME` names the exact directory instead.
- `hook config home <directory>` moves the base to an existing directory (state
then lives in `<directory>/.silicon-hook`).
- `--profile <name>` keeps a separate sign-in and settings in the same file.
A `state.json` from Hook before 1.0 is left untouched and never read for
credentials; see [upgrading](cli/README.md#upgrading-from-hook-before-10).
## Settings
```sh
hook config show # what is in effect, and where it came from
hook config set silicon si:scout # default Silicon for this profile
hook config set url http://127.0.0.1:4201 # a local Hook API
hook config set accounts-url http://localhost:9590 # a local Silicon Accounts
hook config unset url
```
| Hook API | `--url` | `SILICON_HOOK_URL` | `https://api.hook.teamofsilicons.com` |
| Silicon Accounts | `--accounts-url` | `ACCOUNTS_URL` | `https://accounts.teamofsilicons.com` |
| Default Silicon | `--silicon` | | the signed-in Silicon |
A flag or environment variable wins over the profile setting. Plain `http` is
accepted only for this machine. A signed-in profile keeps the Hook API and Silicon
Accounts it signed in with: changing either asks you to sign out first (or use
another profile), so a token is never sent to another service.
## Updates
Silicon Apps owns CLI updates; `hook` never installs or replaces binaries. The
Rust client changes only when the consuming project updates its manifest.
## Diagnose and report
`hook <command> --help` explains purpose, flags and next steps;
`hook commands --json` exports the command tree; `hook docs <topic>` works
offline; `hook about` prints the source, docs and package links. Errors carry a
stable `code`, a `hint` and an exit code ([CLI](cli/README.md#output-errors-and-exit-codes)).
```sh
hook report "Expected behaviour, actual result, and reproduction steps" --pr https://github.com/teamofsilicons/silicon-hook/pull/123
```
Reports use your existing GitHub CLI login and send only the text, the optional
pull request and the version. If submission fails, check the issue tracker before
retrying.
## Telemetry
Hook records no telemetry.