# Polecenia skrótów

> Daj kontu własne polecenie, takie jak ccwork, przez ccam shortcut, a linki w ~/.local/bin odtwórz poleceniem ccam shims install.

Source: https://ccam.dev/pl/features/shortcuts/ · Updated 2026-10-19

Skrót to polecenie o nazwie wybranej przez ciebie, które uruchamia Claude Code jako jedno konto: `ccwork --resume` robi to samo co `ccam work --resume`. Jest to link do ccam w `~/.local/bin`, więc działa w bash, zsh, skryptach i wszędzie tam, gdzie programy są uruchamiane z `PATH`. Skróty są opcjonalne; utwórz je dla kont, które uruchamiasz często.

## Użycie

```sh
ccam shortcut work ccwork     # create the shortcut ccwork for work
ccam shortcut 2 ccside        # the account with number 2
ccam shortcut work            # show it
ccam shortcut work ccw        # rename it; the old link is removed
ccam shortcut work --remove   # delete it
ccam add side --shortcut ccside
ccam shims install            # recreate missing links of all accounts
ccwork -p "summarise" --output-format json
```

ccam potwierdza każdą zmianę:

```console
$ ccam shortcut work ccwork
✓ shortcut for work: ccwork
$ ccam shortcut work ccw
✓ shortcut for work: ccw (was ccwork)
$ ccam shortcut work --remove
✓ ccw removed; work has no shortcut now
$ ccam shortcut work
work: none (add one with `ccam shortcut work ccwork`)
```

Konto ma najwyżej jeden skrót, zapisany jako `shortcut` w `~/.config/ccam/config.toml`. Kreator `ccam add` pyta `Create a shortcut command for <name>? [y/N]`, a potem `Shortcut name [cc<name>]:`. Poza kreatorem `ccam add` tworzy skrót tylko z `--shortcut`. `ccam list` pokazuje skrót każdego konta albo `-`.

Skrót przekazuje każdy argument do Claude Code, tak samo jak `ccam <name>` po nazwie. Dotyczy to także `--dry-run` i `--help`: aby podejrzeć uruchomienie, użyj `ccam --dry-run work`.

## Opcje

| Opcja | Działanie | Domyślnie |
| --- | --- | --- |
| `--remove` | Usuwa skrót konta i jego link | wyłączone |
| `-h`, `--help` | Pomoc dla polecenia | |
| `--dry-run` | `ccam shortcut` ją respektuje: sprawdza nazwę i wypisuje `Would set the shortcut of work to ccwork.` lub `Would remove ccwork, the shortcut of work.` bez zapisywania i linkowania | wyłączone |

`ccam shims install` nie przyjmuje argumentów i odrzuca `--dry-run` komunikatem `` ccam: --dry-run is not supported by `ccam shims install`; nothing was changed ``.

Zasady nazw, sprawdzane w tej kolejności:

- od 1 do 64 znaków spośród `a-z`, `0-9`, `.`, `-` i `_`, zaczynając od litery lub cyfry;
- nie `ccam`, `claude` ani polecenie ccam, takie jak `run` czy `usage`;
- nie skrót innego konta;
- nie plik w `~/.local/bin`, który nie jest już linkiem do ccam;
- nie nazwa innego pliku wykonywalnego w twoim `PATH`.

Podanie polecenia razem z `--remove` kończy się błędem `give a command or --remove, not both`. Ustawienie nazwy, którą konto już ma, wypisuje `work: ccwork (unchanged)` i odtwarza link, jeśli go brakuje.

## Jak to działa

Ustawienie nazwy uruchamia `checkShortcut`, które wywołuje `shim.Check` z folderem bin i rzeczywistą ścieżką pliku binarnego ccam:

Nazwa przechodzi kolejno przez sprawdzenia. Obok każdego sprawdzenia jest nazwa, którą ono odrzuca: `Work` nie pasuje do wzorca, `run` jest poleceniem ccam, `ccside` należy do innego konta, `ccfile` to istniejący plik w `~/.local/bin`, a `git` przesłoniłby `/usr/bin/git`. Zapisywana i linkowana jest tylko nazwa, która przejdzie wszystkie sprawdzenia.

1. `shim.Check` dopasowuje nazwę do `^[a-z0-9][a-z0-9._-]{0,63}$`, potem do `config.Reserved`, potem do `cfg.FindShortcut`. Wywołuje `os.Lstat` na `~/.local/bin/<name>`, a dla każdego innego folderu z `PATH` wywołuje `os.Stat` i odrzuca plik wykonywalny, który nie jest linkiem do ccam.
2. ccam zapisuje `config.toml` przez `fsutil.AtomicWrite` (plik tymczasowy, `fsync`, zmiana nazwy).
3. `shim.Remove` usuwa link starego skrótu, ale tylko jeśli jest linkiem do ccam.
4. `shim.Install` tworzy brakujący link każdego skonfigurowanego skrótu przez `os.Symlink` do pliku binarnego ccam, odnalezionego przez `os.Executable` i `filepath.EvalSymlinks`. Nigdy niczego nie usuwa.

Link uznaje się za należący do ccam, gdy `os.Readlink` zwraca ścieżkę ccam albo gdy link i ścieżka ccam prowadzą do tego samego pliku. Każde usunięcie i każde sprawdzenie przed nadpisaniem przechodzi przez ten test, więc ccam nie rusza plików, których nie utworzył.

Gdy uruchamiasz skrót, wpisana nazwa to jedyne, czego ccam potrzebuje:

Powłoka znajduje `ccwork` w `PATH`, jądro podąża za linkiem i uruchamia plik binarny ccam, a `argv[0]` nadal ma wartość `ccwork`. W `app.Main` każda nazwa inna niż `ccam` raz wczytuje `config.toml` i wywołuje `shim.Lookup`, które znajduje konto, którego `shortcut` jest równy `filepath.Base(argv[0])`. `launcher.LaunchWith` wykonuje następnie te same kroki co [`ccam <name>`](https://ccam.dev/pl/features/launch.md) z już wczytaną konfiguracją i przekazuje `argv[1:]` do `claude` bez zmian.

Dlaczego dowiązanie symboliczne, a nie alias powłoki czy skrypt opakowujący: dowiązanie działa w każdej powłoce i w skryptach, nie dodaje uruchomienia kolejnej powłoki (około 1 do 2 ms), a uruchomienie nadal odczytuje jeden plik. `scripts/perf-check.sh` mierzy skrót za pomocą `hyperfine` względem tego samego limitu 10 ms (p95) co `ccam <name>`.

## Bezpieczeństwo i przypadki brzegowe

- **Link, do którego nie przyznaje się żadne konto.** Jeśli link do ccam w `~/.local/bin` ma nazwę, której nie używa żadne konto, na przykład po ręcznej edycji `shortcut` w `config.toml`, ccam nie przechodzi na domyślne konto. Zatrzymuje się z komunikatem `` ccam: ccold is not the shortcut of any account (see `ccam list`, `ccam shortcut`) ``. Ustaw nazwę ponownie przez `ccam shortcut` albo usuń link.
- **Istniejące pliki.** ccam nigdy nie zastępuje pliku, którego nie utworzył. `ccam shims install` zatrzymuje się z komunikatem `<path> already exists and is not a ccam link, so it was left alone`.
- **Przeniesiony plik binarny ccam.** Stare linki wskazują wtedy ścieżkę, która już nie istnieje, i ccam nie uznaje ich za swoje. Usuń je, a potem uruchom `ccam shims install`.
- **Zmiana nazwy i usuwanie.** `ccam rename` zachowuje nazwę skrótu, a link dalej działa, bo wskazuje na ccam, a ccam szuka nazwy w `config.toml`. `ccam remove` usuwa link konta. `ccam shortcut <account> <new>` usuwa stary link, zanim utworzy nowy.
- **PATH.** Gdy ccam tworzy link, a `~/.local/bin` nie ma w twoim `PATH`, wypisuje `Note: /home/me/.local/bin is not in PATH. Add it to ~/.bashrc or ~/.zshrc:`, a po tym wiersz `export PATH=...` do dodania.
- **Późniejsze sprawdzenie.** `ccam doctor` zgłasza `missing shortcuts in /home/me/.local/bin: ccwork` i ostrzega, gdy folderu nie ma w `PATH`. `ccam doctor --fix` tworzy brakujące linki.

## Powiązane

- [Uruchamianie Claude Code](https://ccam.dev/pl/features/launch.md)
- [Zarządzanie kontami](https://ccam.dev/pl/features/accounts.md)
- [Opis poleceń](https://ccam.dev/pl/docs/commands.md#shortcuts)
- [Instalacja ccam](https://ccam.dev/pl/docs/install.md)
