Preskočiť na obsah

Claude Code

Claude Code je AI asistent na programovanie, ktorý sa spúšťa v termináli. Dokáže prehľadávať a upravovať súbory, vykonávať príkazy a pracovať s existujúcim zdrojovým kódom.

V infraštruktúre SAV sa Claude Code spúšťa v kontajneri Singularity na prihlasovacom uzle. Pripája sa priamo k službe Anthropic; lokálny server modelu, úloha vLLM ani SSH tunel nie sú potrebné.

Rýchly štart

Spustite skript na spustenie agenta:

cd ~/my-project
~/llm/claude.sh

Spúšťací skript zobrazí interaktívne menu relácií:

Claude Code session:

  1) Continue last session
  2) Start new session
  3) Select previous session
  4) List sessions
  5) Exit

Select [1]:

Výberom možnosti spustíte Claude Code v aktuálnom pracovnom adresári.

Spúšťací skript

Uložte spúšťací skript do ~/llm/claude.sh a nastavte mu právo na spustenie:

chmod +x ~/llm/claude.sh

Spúšťací skript používa tieto predvolené cesty:

/home/$USER/llm/.container_passwd
/home/$USER/llm/.container_group

Tieto súbory umožňujú kontajneru identifikovať UID používateľa a jeho primárnu skupinu z hostiteľského systému. Vytvorte ich jednorazovo:

mkdir -p ~/llm

getent passwd root "$USER"      > ~/llm/.container_passwd
getent group root "$(id -gn)"   > ~/llm/.container_group

Ak sa zmenia údaje vášho účtu, vytvorte ich znova.

Autentifikácia

Claude Code sa pripája priamo k službe Anthropic. Autentifikáciu je potrebné nastaviť pomocou podporovaného spôsobu prihlásenia pre váš účet.

Nepoužíva sa API kľúč vLLM ani lokálny endpoint kompatibilný s OpenAI API.

Spúšťací skript pripojí váš domovský adresár do kontajnera. Claude Code tak získa prístup k používateľskej konfigurácii a môže medzi spusteniami uchovávať údaje relácií.


Používanie

claude.sh [WORKSPACE] [MODE] [-B HOST[:CONTAINER]] [-- CLAUDE_ARGS...]

  WORKSPACE   Directory to work in (default: current directory)
  MODE        --continue, --new, --resume or --list
              With no MODE, an interactive menu is shown.
  -B, --bind  Additional bind mount (can be specified multiple times)
  -- ARGS     Arguments passed directly to Claude Code

Examples:

~/llm/claude.sh
~/llm/claude.sh /myproject/path
~/llm/claude.sh --continue
~/llm/claude.sh /myproject/path --new
~/llm/claude.sh --resume
~/llm/claude.sh --list

# Add an additional project directory to the container.
~/llm/claude.sh /myproject/path -B /project/<account_ID>:/project/<account_ID>

# Pass arguments directly to Claude Code.
~/llm/claude.sh -- --help

Režimy relácií

Režim Funkcia
--continue Pokračuje v poslednej konverzácii v aktuálnom pracovnom adresári.
--new Spustí novú konverzáciu.
--resume Otvorí interaktívny výber relácie v Claude Code.
--list Otvorí výber relácie.
(bez režimu) Zobrazí interaktívne menu; kláves Enter vyberie Pokračovať v poslednej relácii.

Interaktívne menu sa zobrazí ešte pred spustením kontajnera. Režim relácie preto môžete vybrať bez čakania na inicializáciu kontajnera.

Zobrazenie relácií

Claude Code neposkytuje samostatný príkaz sessions list, aký má Qwen Code. Možnosť --list v spúšťacom skripte a položka 4 v menu preto otvárajú interaktívny výber relácie pomocou príkazu claude --resume.

Claude Code ukladá údaje relácií do domovského adresára používateľa. Keďže spúšťací skript pripája $HOME do kontajnera, história relácií a konfigurácia zostávajú dostupné aj pri ďalších spusteniach.


Priebeh spúšťacieho skriptu

Spúšťací skript vykonáva tieto kroky:

  1. Načíta cestu ku kontajnerovému obrazu z premennej CLAUDE_SIF a overí, či obraz existuje.
  2. Spracuje argumenty príkazového riadka — pracovný adresár, režim relácie, ďalšie pripojené adresáre a argumenty pre Claude Code.
  3. Určí režim relácie — ak režim nebol zadaný, zobrazí interaktívne menu.
  4. Pripraví predvolené pripojenia adresárov a súborov — pracovný adresár, domovský adresár, socket Munge, konfiguráciu SLURM a súbory používateľských účtov.
  5. Pridá voliteľné pripojenia zadané pomocou -B alebo --bind.
  6. Načíta Singularity prostredníctvom systému environment modules.
  7. Spustí Claude Code v kontajneri s vybraným pracovným adresárom a argumentmi relácie.

Bez závislosti od vLLM

Na rozdiel od spúšťacieho skriptu Qwen Code, claude.sh nevyhľadáva SLURM úlohy, nevytvára SSH tunely ani nekonfiguruje endpoint kompatibilný s OpenAI API. Claude Code sa pripája priamo k službe Anthropic.

~/llm/claude.sh
#!/bin/bash
set -euo pipefail

# ----------------------------------------------------------------------
# Configuration
# ----------------------------------------------------------------------

CLAUDE_SIF="${CLAUDE_SIF:-/apps/images/vllm/x86_64/Claude_code_x86_64_Nov2026.sif}"

if [[ -z "$CLAUDE_SIF" || ! -f "$CLAUDE_SIF" ]]; then
    echo "ERROR: CLAUDE_SIF is not set or the image does not exist." >&2
    echo "Example: export CLAUDE_SIF=/path/to/Claude_code.sif" >&2
    exit 1
fi

USER_HOME="$HOME"
USER_LLM_DIR="/home/${USER}/llm"

WORKSPACE="$PWD"
WORKSPACE_SET=0
MODE=""

EXTRA_ARGS=()
EXTRA_BINDS=()

# ----------------------------------------------------------------------
# Usage
# ----------------------------------------------------------------------

usage() {
    cat <<EOF
Usage:
  $(basename "$0") [WORKSPACE] [MODE] [OPTIONS] [-- CLAUDE_ARGS...]

Modes:
  --continue       Continue the last session
  --new            Start a new session
  --resume         Select a previous session
  --list           Open the session picker

Options:
  -B, --bind HOST[:CONTAINER]
                   Add an additional bind mount (repeatable)
  -h, --help       Show this help

Examples:
  $(basename "$0")
  $(basename "$0") /myproject/path
  $(basename "$0") --continue
  $(basename "$0") /myproject/path --new
  $(basename "$0") -B /project/<account_ID>:/project/<account_ID>
  $(basename "$0") /project/<account_ID> -B /scratch/<account_ID>:/scratch/<account_ID> -- --model sonnet

Default bind mounts:
  $HOME:$HOME
  /run/munge:/run/munge
  /var/spool/slurmd/conf-cache:/etc/slurm
  /home/$USER/llm/.container_passwd:/etc/passwd
  /home/$USER/llm/.container_group:/etc/group
EOF
}

# ----------------------------------------------------------------------
# Parse arguments
# ----------------------------------------------------------------------

while [[ $# -gt 0 ]]; do
    case "$1" in
        --continue|--new|--resume|--list)
            MODE="$1"
            shift
            ;;

        -B|--bind)
            if [[ $# -lt 2 ]]; then
                echo "ERROR: $1 requires a bind specification." >&2
                exit 1
            fi

            EXTRA_BINDS+=("$2")
            shift 2
            ;;

        --)
            shift
            EXTRA_ARGS+=("$@")
            break
            ;;

        -h|--help)
            usage
            exit 0
            ;;

        -*)
            echo "ERROR: Unknown option: $1" >&2
            usage >&2
            exit 1
            ;;

        *)
            if [[ "$WORKSPACE_SET" -eq 0 ]]; then
                WORKSPACE="$1"
                WORKSPACE_SET=1
            else
                echo "ERROR: Unexpected argument: $1" >&2
                usage >&2
                exit 1
            fi
            shift
            ;;
    esac
done

# ----------------------------------------------------------------------
# Validate workspace
# ----------------------------------------------------------------------

WORKSPACE="$(realpath "$WORKSPACE")"

if [[ ! -d "$WORKSPACE" ]]; then
    echo "ERROR: Workspace does not exist: $WORKSPACE" >&2
    exit 1
fi

# ----------------------------------------------------------------------
# Interactive session menu
# ----------------------------------------------------------------------

case "$MODE" in
    --continue)
        CLAUDE_ARGS=(--continue)
        ;;

    --new)
        CLAUDE_ARGS=()
        ;;

    --resume)
        CLAUDE_ARGS=(--resume)
        ;;

    --list)
        CLAUDE_ARGS=(--resume)
        ;;

    "")
        if [[ ! -t 0 ]]; then
            echo "Not a terminal. Pass --continue, --new," >&2
            echo "--resume or --list explicitly." >&2
            exit 1
        fi

        echo
        echo "Claude Code session:"
        echo
        echo "  1) Continue last session"
        echo "  2) Start new session"
        echo "  3) Select previous session"
        echo "  4) List sessions"
        echo "  5) Exit"
        echo

        read -r -p "Select [1]: " CHOICE || CHOICE=1

        # Pressing Enter selects the default.
        CHOICE=${CHOICE:-1}

        case "$CHOICE" in
            1)
                CLAUDE_ARGS=(--continue)
                ;;
            2)
                CLAUDE_ARGS=()
                ;;
            3)
                CLAUDE_ARGS=(--resume)
                ;;
            4)
                CLAUDE_ARGS=(--resume)
                ;;
            5)
                exit 0
                ;;
            *)
                echo "Invalid selection." >&2
                exit 1
                ;;
        esac
        ;;

    *)
        echo "Unknown option: $MODE" >&2
        echo
        usage >&2
        exit 1
        ;;
esac

# Append additional Claude Code arguments.
CLAUDE_ARGS+=("${EXTRA_ARGS[@]}")

# ----------------------------------------------------------------------
# Default bind mounts
# ----------------------------------------------------------------------

BINDS=(
    "$WORKSPACE:$WORKSPACE"
    "$USER_HOME:$USER_HOME"
    "/run/munge:/run/munge"
    "/var/spool/slurmd/conf-cache:/etc/slurm"
    "$USER_LLM_DIR/.container_passwd:/etc/passwd"
    "$USER_LLM_DIR/.container_group:/etc/group"
)

# Append user-defined bind mounts.
for bind in "${EXTRA_BINDS[@]}"; do
    BINDS+=("$bind")
done

# ----------------------------------------------------------------------
# Load Singularity
# ----------------------------------------------------------------------

if command -v module >/dev/null 2>&1; then
    module load singularity
fi

if ! command -v singularity >/dev/null 2>&1; then
    echo "ERROR: singularity command not found." >&2
    exit 1
fi

# Check architecture.
if [[ "$(uname -m)" != "x86_64" ]]; then
    echo "ERROR: This Claude Code image requires x86_64." >&2
    exit 1
fi

# ----------------------------------------------------------------------
# Build bind arguments
# ----------------------------------------------------------------------

SINGULARITY_BINDS=()

for bind in "${BINDS[@]}"; do
    SINGULARITY_BINDS+=(--bind "$bind")
done

# ----------------------------------------------------------------------
# Launch Claude Code
# ----------------------------------------------------------------------

singularity exec \
    "${SINGULARITY_BINDS[@]}" \
    --pwd "$WORKSPACE" \
    --env "PATH=/usr/local/bin:/opt/agent_env/bin:/opt/slurm/bin:/opt/slurm/sbin:$HOME/.local/bin:/usr/bin:/bin" \
    "$CLAUDE_SIF" \
    bash -lc 'exec /usr/local/bin/claude "$@"' -- "${CLAUDE_ARGS[@]}"

Pripojenie SLURM na clustri Devana

Na clustri Devana je potrebné pripojiť SLURM nasledovne -- bind /etc/slurm:/etc/slurm & --env "PATH=/usr/local/bin:/opt/agent_env/bin:$HOME/.local/bin:/usr/bin:/bin"

!!!


Zodpovedné používanie agentov

Claude Code dokáže vykonávať príkazy a upravovať súbory. Keďže beží na prihlasovacom uzle, príkazy vykonávané priamo agentom sa spúšťajú na tomto uzle.

Spúšťací skript sprístupňuje SLURM v kontajneri pripojením socketu Munge a konfigurácie SLURM. Claude Code tak môže používať príkazy ako sbatch, srun, squeue a scancel.

Pri výpočtovo náročných úlohách nastavte Claude Code tak, aby úlohy odosielal do SLURM, namiesto priameho vykonávania výpočtov na prihlasovacom uzle.

For example:

Compile the software and run its test suite. Submit the build and tests
through SLURM to the CPU partition using the appropriate project account.
Check the job status and report the output.

Agent môže odosielať úlohy v rámci vašej alokácie

Príkazy vykonávané Claude Code môžu čerpať výpočtové zdroje vášho projektu. V zadaniach preto uvádzajte účet, partition a časový limit úlohy. Bežiace úlohy skontrolujete príkazom squeue -u "$USER".

Agent skutočne upravuje súbory

Claude Code spúšťajte v projektovom adresári, s ktorým má pracovať. Dôležité projekty spravujte pomocou systému na správu verzií, aby bolo možné zmeny skontrolovať a vrátiť späť. Pri povoľovaní automatického vykonávania príkazov postupujte opatrne.


Pripojené adresáre a súbory (bind mounts)

Spúšťací skript obsahuje predvolené pripojenia adresárov a súborov. Ďalšie cesty možno zadať pomocou -B alebo --bind.

Pripojenie Účel
$WORKSPACE:$WORKSPACE Sprístupní vybraný pracovný adresár v kontajneri
$HOME:$HOME Sprístupní používateľskú konfiguráciu a trvalé údaje relácií
/run/munge:/run/munge Sprístupní autentifikačný socket Munge potrebný pre SLURM
/var/spool/slurmd/conf-cache:/etc/slurm Konfigurácia clustra Perun, vďaka ktorej klienti SLURM vedia, s ktorým riadiacim uzlom komunikovať
/etc/slurm → /etc/slurm Konfigurácia clustra Devana, vďaka ktorej klienti SLURM vedia, s ktorým riadiacim uzlom komunikovať
.container_passwd:/etc/passwd Umožňuje kontajneru identifikovať používateľský účet hostiteľského systému
.container_group:/etc/group Umožňuje kontajneru identifikovať skupinu hostiteľského systému

Premenná prostredia PATH obsahuje tieto adresáre:

  • /usr/local/bin — spustiteľný súbor Claude Code.
  • /opt/agent_env/bin — ďalšie nástroje prostredia agenta.
  • /opt/slurm/bin and /opt/slurm/sbin — príkazy SLURM.
  • $HOME/.local/bin — spustiteľné súbory nainštalované používateľom.
  • /usr/bin and /bin — štandardné systémové nástroje.

Ďalšie pripojené adresáre

Spúšťací skript nemá pevne nastavené projektové adresáre. Ďalšie adresáre môžete pripojiť pri spustení agenta:

~/llm/claude.sh /myproject/path \
    -B /project/<account_ID>/project/<account_ID> \
    -B /scratch/<account_ID>:/scratch/<account_ID>

Možno zadať viacero možností -B. Každá sa odovzdá Singularity ako ďalšie pripojenie adresára.

Zdrojové cesty pripojenia musia existovať

Všetky zdrojové cesty na hostiteľskom systéme musia existovať a musia byť prístupné. Ak požadovaný zdroj nemožno pripojiť, Singularity oznámi chybu.

Riešenie problémov

`CLAUDE_SIF nie je nastavená`

Cesta ku kontajnerovému obrazu nie je nakonfigurovaná.

export CLAUDE_SIF=/path/to/Claude_code.sif

Overte, či súbor existuje:

ls -lh "$CLAUDE_SIF"

Menu sa nezobrazuje

Interaktívne menu sa zobrazí iba vtedy, keď nie je zadaný režim relácie a spúšťací skript beží v termináli.

Run:

~/llm/claude.sh

Pri neinteraktívnom spustení zadajte režim explicitne:

~/llm/claude.sh --continue

`singularity: command not found`

Overte, či je dostupný modul Singularity:

module avail singularity
module load singularity
which singularity

`claude: command not found`

Overte, či je Claude Code nainštalovaný v kontajneri na očakávanej ceste:

singularity exec "$CLAUDE_SIF" which claude

Spúšťací skript očakáva túto cestu:

/usr/local/bin/claude

Ak je spustiteľný súbor nainštalovaný inde, upravte záverečný príkaz v claude.sh.

Príkazy SLURM v kontajneri zlyhávajú

Skontrolujte socket Munge, konfiguráciu SLURM a súbory používateľského účtu:

ls -l /run/munge
ls -l /var/spool/slurmd/conf-cache
ls -l ~/llm/.container_passwd
ls -l ~/llm/.container_group

Overte, či kontajner dokáže vykonávať príkazy SLURM:

singularity exec \
    --bind /run/munge:/run/munge \
    --bind /var/spool/slurmd/conf-cache:/etc/slurm \
    --bind "$HOME/llm/.container_passwd:/etc/passwd" \
    --bind "$HOME/llm/.container_group:/etc/group" \
    --env "PATH=/opt/slurm/bin:/opt/slurm/sbin:/usr/bin:/bin" \
    "$CLAUDE_SIF" squeue -u "$USER"

Pripojenie SLURM na clustri Devana

Na clustri Devana je potrebné pripojiť SLURM nasledovne -- bind /etc/slurm:/etc/slurm & --env "PATH=/usr/local/bin:/opt/agent_env/bin:$HOME/.local/bin:/usr/bin:/bin"

Prejav Možná príčina
squeue: command not found V premennej PATH chýbajú binárne súbory SLURM.
Invalid user alebo chyby pri identifikácii účtu Súbory passwd alebo group chýbajú alebo sú zastarané.
Chyby prihlasovacích údajov Munge Socket Munge nie je pripojený alebo služba Munge nebeží.
Unable to contact slurm controller Konfigurácia SLURM chýba alebo odkazuje na nesprávny cluster.
Chyba pripojenia adresára Zdrojová cesta na hostiteľskom systéme neexistuje alebo nie je prístupná.

Claude Code nemá prístup k projektovým súborom

Overte, či je pracovný adresár pripojený a či máte právo zápisu:

ls -ld "$PWD"

Pre ďalšie adresáre pridajte explicitné pripojenie pomocou -B:

~/llm/claude.sh "$PWD" -B /project/shared:/project/shared

Reláciu nemožno obnoviť

Údaje relácií Claude Code sa ukladajú do domovského adresára používateľa. Overte, či je $HOME pripojený do kontajnera a či je dostupná rovnaká používateľská konfigurácia.

Interaktívny výber relácie otvoríte pomocou --resume:

~/llm/claude.sh --resume

Referenčná príručka

Príkazy

Úloha Príkaz
Interaktívne menu ~/llm/claude.sh
Pokračovať v poslednej relácii ~/llm/claude.sh --continue
Spustiť novú reláciu ~/llm/claude.sh --new
Vybrať predchádzajúcu reláciu ~/llm/claude.sh --resume
Zobraziť/vybrať relácie ~/llm/claude.sh --list
Spustiť v inom pracovnom adresári ~/llm/claude.sh ~/myproject/path
Pridať pripojenie adresára ~/llm/claude.sh -B /data:/data
Odovzdať argumenty programu Claude Code ~/llm/claude.sh -- --help

Konfigurácia

Premenná Účel
CLAUDE_SIF Cesta ku kontajnerovému obrazu Singularity s Claude Code.

Odkazy

Created by: Marek Štekláč