이 안내는 Linux 계정과 비공개 GitHub 저장소를 관리할 수 있는 자체 호스팅 Hermes Agent 운영자를 위한 것입니다. 목표는 명확합니다. Hermes의 전체 사용자 데이터를 보관 파일로 만들고 호스트를 떠나기 전에 암호화한 뒤, 지정한 비공개 원격 저장소 도착을 확인하고 별도의 임시 시험 컴퓨터에서 가져옵니다. 문서상 절차의 기준은 Hermes CLI의 고정 커밋 86fa9e6이며 2026년 10월 19일 확인했습니다. BIG CHANGE는 무해한 로컬 시험 자료로 셸 문법과 제어 흐름만 확인했으며 실제 Hermes 백업, age 암호화, GitHub 전송, 예약 실행, 복원을 수행하지 않았습니다. 아래 모든 확인을 직접 수행한 뒤에만 해당 설치에서 검증된 백업으로 보세요.
큰 변화
- 달라진 점: Hermes 전체 백업 명령은 작업 데이터를 ZIP으로 모으고 에이전트 없는 cron 모드는 검토한 스크립트를 실행할 수 있습니다. 함께 사용하면 AI 모델에 백업을 맡기지 않고 예약된 암호화 사본을 만들 수 있습니다.
- 중요한 이유: 운영자는 Hermes의 보관 파일 완성, 암호문의 지정 비공개 저장소 도착, 새 설치의 가져오기 가능 여부를 따로 확인할 수 있습니다. 각각 다른 실패를 발견합니다. 그래도 애플리케이션 자체와 일부 컴퓨터 로컬 데이터는 제외됩니다.
- 살펴볼 점: 보관 파일과 증가하는 Git 이력이 이 제한된 방식에 맞을 만큼 작은지가 실제 판단 기준입니다. 복구 연습이 실패하거나 크기 중단 조건에 닿으면 예약에 의존하기 전에 다른 저장 계획이 필요합니다.
1. 호스트, 키, 저장소 준비
Linux와 Bash, GNU stat -c 및 du -sb에 더해 설치된 Hermes CLI, Git, GitHub CLI(gh), age, unzip, sha256sum, SSH와 cron용으로 작동 중인 Hermes 게이트웨이를 사용하세요. 설치된 hermes backup, hermes import, hermes cron create --help가 고정 커밋의 CLI 참고 문서, 자주 묻는 질문, cron 설명서와 일치하는지 확인하세요. 게이트웨이의 OS 사용자와 HERMES_HOME을 확인하세요. 호스트 설정과 첫 수동 백업을 모두 같은 사용자로 수행하세요. 예제는 전용의 깨끗한 Git 복제본과 main 브랜치를 전제로 합니다.
Hermes 전체 백업에는 데이터 루트 아래의 설정, 자격 증명, 기억, 스킬, 세션, 프로필이 포함됩니다. Hermes 코드, 다운로드한 종속성과 실행 환경, 이전 백업, 체크포인트, 브라우저 자격 증명 프로필, SQLite 부속 파일과 일부 로컬 파일은 제외됩니다. 호스트의 다른 위치에 있는 무관한 파일도 수집하지 않습니다. 이 전체 데이터 백업 목적에는 --quick을 사용하지 마세요. 범위 밖의 중요한 자료는 검토하고 따로 보호하세요. 목적지 저장소가 비공개여도 ZIP에는 비밀 정보가 들어갑니다.
보관 파일을 복호화하는 비공개 키인 age identity를 보호된 위치에 생성하세요. 위치는 HERMES_HOME, 준비 디렉터리, Git 복제본 밖이어야 합니다. identity의 복구 사본을 독립된 저장소에 보관하세요. 출력된 수신자 age1…는 공개 정보이므로 설정에 넣지만 비공개 identity는 넣지 않습니다. age 사용 참고 문서를 따르세요.
umask 077
install -d -m 700 /PRIVATE-KEY-STORE
age-keygen -o /PRIVATE-KEY-STORE/hermes-backup-identity.txt
age-keygen -y /PRIVATE-KEY-STORE/hermes-backup-identity.txt이 백업 전용 비공개 저장소를 만들고 접근자를 확인한 뒤 Hermes cron을 실행하는 동일 OS 사용자에게 비대화형 gh 읽기와 Git SSH 쓰기를 설정하세요. 토큰과 SSH 비공개 키는 Hermes 데이터, 준비 디렉터리, Git 밖에 두세요. 다른 계정으로 대화형 로그인에 성공해도 예약 접근이 입증되지는 않습니다. 예제 실행 전 대문자 자리표시자를 바꾸세요. 저장소 생성 때 이미 README나 main 브랜치가 만들어졌다면 확인하고 충돌하는 초기화 명령을 건너뛰세요.
gh repo create ACCOUNT/PRIVATE-REPOSITORY --private --clone
gh repo view ACCOUNT/PRIVATE-REPOSITORY --json isPrivate --jq .isPrivate
cd PRIVATE-REPOSITORY
git remote set-url origin git@github.com:ACCOUNT/PRIVATE-REPOSITORY.git
git remote get-url --all origin
git remote get-url --push --all origin
git branch -M main
printf '%s\n' 'Encrypted Hermes backup storage; ciphertext and checksum only.' > README.md
git add README.md
git commit -m 'Initialize private backup repository'
git push -u origin HEAD:main
git ls-remote --heads origin maingh repo create --clone는 로컬 설정에 따라 HTTPS를 고를 수 있습니다. 위의 명시적 SSH 원격 주소가 이 절차의 목적지입니다. isPrivate가 true를 반환하고 협업자가 의도한 사람이며, 실제 가져오기 및 전송 URL이 각각 검토한 단일 SSH URL과 일치하고 예약 사용자로 원격 접근에 성공한 경우에만 계속하세요. Git 원격 규칙은 URL 재작성, 추가 목적지, 별도의 pushurl를 허용합니다. 아래 스크립트는 매 실행마다 원래 값과 실제 값을 확인합니다.
다음 두 코드 블록을 저장하기 전에 복제본 디렉터리에서 나오세요. Hermes 데이터 루트, Git 복제본, 준비 디렉터리, 키 저장소 밖에 비공개 설정 디렉터리를 만드세요. hermes-github-backup.sh와 hermes-github-backup.conf를 여기에 저장하면 설치 명령이 소유 프로필로 복사합니다. 전용 Git 복제본은 깨끗하게 유지해야 합니다.
install -d -m 700 /ABSOLUTE/PRIVATE-SETUP
cd /ABSOLUTE/PRIVATE-SETUP2. 검토한 백업 스크립트 설치
아래 Bash 블록 전체를 hermes-github-backup.sh로 비공개 설정 디렉터리에 저장하세요. 두 번째 블록은 hermes-github-backup.conf로 옆에 저장하고 모든 자리표시자를 절대 경로나 공개 수신자로 바꾸세요. 로컬에서 검토할 셸 설정이므로 불러오기 전에 확인하고 소유자만 접근하도록 권한을 지정하세요. 암호, 토큰, 비공개 age identity를 넣으면 안 됩니다. 제시한 스크립트는 완전한 예제입니다. 문법과 무해한 제어 흐름은 확인했지만 자신의 설치에 맞게 조정하고 시험해야 합니다. 생성되는 latest.zip.age는 암호화된 보관 파일, 즉 암호문입니다.
#!/usr/bin/env bash
# Documentation-based Linux sample for an operator to review and adapt.
# Place with hermes-github-backup.conf under the owning HERMES_HOME/scripts/.
# Requires GNU stat -c and du -sb. Git Bash was used only for inert fixtures.
set -Eeuo pipefail
umask 077
script_dir=$(CDPATH= cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)
owning_home=$(CDPATH= cd -- "$script_dir/.." && pwd -P)
if [[ -n ${HERMES_HOME:-} && $(CDPATH= cd -- "$HERMES_HOME" && pwd -P) != "$owning_home" ]]; then
printf 'Backup stopped: cron profile and script directory differ.\n' >&2
exit 1
fi
export HERMES_HOME="$owning_home"
config="$script_dir/hermes-github-backup.conf"
[[ -f "$config" ]] || { printf 'Backup stopped: reviewed configuration missing.\n' >&2; exit 1; }
# This file is local, owner-reviewed shell configuration. It must contain no secret.
# shellcheck source=/dev/null
source "$config"
: "${HERMES_BIN:?set an absolute Hermes executable path}"
: "${REPO_DIR:?set an absolute private clone path}"
: "${STAGING_PARENT:?set an absolute private staging path}"
: "${AGE_RECIPIENT:?set an age public recipient}"
: "${EXPECTED_REMOTE:?set the exact private GitHub SSH remote}"
: "${BRANCH:=main}"
fail() { printf 'Backup stopped: %s.\n' "$1" >&2; exit 1; }
for path in "$HERMES_BIN" "$REPO_DIR" "$STAGING_PARENT"; do
[[ $path == /* ]] || fail 'a configured path is not absolute'
done
[[ -x "$HERMES_BIN" ]] || fail 'Hermes executable unavailable'
[[ $AGE_RECIPIENT == age1* ]] || fail 'age public recipient invalid'
[[ $EXPECTED_REMOTE == git@github.com:*/*.git ]] || fail 'remote is not the reviewed GitHub SSH URL'
[[ $BRANCH =~ ^[a-zA-Z0-9._/-]+$ ]] || fail 'branch name invalid'
[[ -d "$STAGING_PARENT" ]] || fail 'staging directory unavailable'
stage_parent=$(CDPATH= cd -- "$STAGING_PARENT" && pwd -P)
[[ $stage_parent != "$owning_home" && $stage_parent != "$owning_home"/* ]] || fail 'staging is inside Hermes data'
# Atomic, nonblocking whole-flow lock: keep it through push and remote readback.
# A stale directory after a crash requires operator inspection; never steal it.
lockdir="$stage_parent/.hermes-github-backup-flow.lock"
mkdir -- "$lockdir" 2>/dev/null || fail 'another backup flow holds the lock or a stale lock needs review'
work=''
cleanup() {
if [[ -n $work ]]; then
rm -f -- "$work/hermes.zip" "$work/latest.zip.age" "$work/latest.sha256" "$work/backup.log"
rmdir -- "$work" 2>/dev/null || true
fi
rmdir -- "$lockdir" 2>/dev/null || true
}
trap cleanup EXIT
[[ -d "$REPO_DIR/.git" ]] || fail 'Git repository unavailable'
repo=$(CDPATH= cd -- "$REPO_DIR" && pwd -P)
[[ $repo != "$owning_home" && $repo != "$owning_home"/* ]] || fail 'repository is inside Hermes data'
[[ $stage_parent != "$repo" && $stage_parent != "$repo"/* ]] || fail 'staging is inside Git repository'
[[ $repo != "$stage_parent"/* ]] || fail 'Git repository is inside staging'
command -v age >/dev/null || fail 'age unavailable'
command -v gh >/dev/null || fail 'GitHub CLI unavailable for private visibility check'
command -v unzip >/dev/null || fail 'zip verifier unavailable'
command -v git >/dev/null || fail 'Git unavailable'
remote_repo=${EXPECTED_REMOTE#git@github.com:}
remote_repo=${remote_repo%.git}
visibility=$(gh repo view "$remote_repo" --json isPrivate --jq .isPrivate 2>/dev/null) || fail 'GitHub repository visibility unreadable'
[[ $visibility == true ]] || fail 'GitHub repository is not confirmed private'
raw_fetch_urls=$(git -C "$repo" config --get-all remote.origin.url) || fail 'Git fetch URL missing'
[[ $raw_fetch_urls == "$EXPECTED_REMOTE" ]] || fail 'Git has multiple or unexpected raw fetch URLs'
raw_push_urls=$(git -C "$repo" config --get-all remote.origin.pushurl || true)
[[ -z $raw_push_urls ]] || fail 'separate Git pushurl requires independent review'
effective_fetch_urls=$(git -C "$repo" remote get-url --all origin) || fail 'effective fetch URL unreadable'
effective_push_urls=$(git -C "$repo" remote get-url --push --all origin) || fail 'effective push URL unreadable'
[[ $effective_fetch_urls == "$EXPECTED_REMOTE" ]] || fail 'Git fetch URL rewrite or extra destination'
[[ $effective_push_urls == "$EXPECTED_REMOTE" ]] || fail 'Git push URL rewrite or extra destination'
[[ $(git -C "$repo" branch --show-current) == "$BRANCH" ]] || fail 'local branch changed'
[[ -z $(git -C "$repo" status --porcelain --untracked-files=all) ]] || fail 'repository has unrelated changes'
# No interactive prompt is possible in an unattended Hermes cron tick.
export GIT_TERMINAL_PROMPT=0
export GIT_SSH_COMMAND='ssh -o BatchMode=yes'
remote_head=$(git -C "$repo" ls-remote --heads origin "$BRANCH" | awk '{print $1}')
[[ -n $remote_head && $remote_head == "$(git -C "$repo" rev-parse HEAD)" ]] || fail 'remote unreadable or branch has changed'
work=$(mktemp -d "$stage_parent/hermes-backup.XXXXXXXX") || fail 'private staging creation failed'
if "$HERMES_BIN" backup -o "$work/hermes.zip" >"$work/backup.log" 2>&1; then
:
else
backup_rc=$?
fail "Hermes full backup returned $backup_rc; temporary zip/log will be removed, so diagnose with a separate controlled manual run"
fi
[[ -s "$work/hermes.zip" ]] || fail 'Hermes archive absent or empty'
unzip -tq "$work/hermes.zip" >"$work/backup.log" 2>&1 || fail 'zip integrity check failed'
age -r "$AGE_RECIPIENT" -o "$work/latest.zip.age" "$work/hermes.zip" >"$work/backup.log" 2>&1 || fail 'archive encryption failed'
[[ -s "$work/latest.zip.age" ]] || fail 'encrypted archive absent or empty'
# Deliberately below GitHub's 50 MiB warning. Git history retains every version.
cipher_bytes=$(stat -c %s "$work/latest.zip.age")
(( cipher_bytes <= 40000000 )) || fail 'encrypted archive exceeds this small-repository recipe'
git_bytes=$(du -sb "$repo/.git" | awk '{print $1}')
(( git_bytes + cipher_bytes + 10000000 <= 500000000 )) || fail 'repository history approaches the review limit'
hash=$(sha256sum "$work/latest.zip.age" | awk '{print $1}')
printf '%s latest.zip.age\n' "$hash" >"$work/latest.sha256"
cp -- "$work/latest.zip.age" "$repo/latest.zip.age"
cp -- "$work/latest.sha256" "$repo/latest.sha256"
git -C "$repo" add -- latest.zip.age latest.sha256
staged=$(git -C "$repo" diff --cached --name-only)
[[ $staged == $'latest.sha256\nlatest.zip.age' ]] || fail 'staged paths are not the two reviewed files'
git -C "$repo" diff --cached --check >/dev/null || fail 'staged content check failed'
git -C "$repo" commit -m "Encrypted Hermes backup $(date -u +%Y-%m-%dT%H:%M:%SZ)" >/dev/null || fail 'local backup commit failed'
run_head=$(git -C "$repo" rev-parse HEAD)
(( $(du -sb "$repo/.git" | awk '{print $1}') <= 500000000 )) || fail 'Git history exceeds review limit before push'
[[ $(git -C "$repo" rev-parse HEAD) == "$run_head" ]] || fail 'local HEAD changed before push'
git -C "$repo" push origin "$run_head:refs/heads/$BRANCH" >/dev/null || fail 'remote push failed; inspect exact remote before retrying'
remote_head=$(git -C "$repo" ls-remote --heads origin "$BRANCH" | awk '{print $1}')
[[ $remote_head == "$run_head" ]] || fail 'this run commit not confirmed at remote'
printf 'Encrypted backup verified at private remote commit %s.\n' "$run_head"# No passwords, tokens, age identities or private keys belong here.
HERMES_BIN=/absolute/path/to/hermes
REPO_DIR=/absolute/path/to/dedicated-private-github-clone
STAGING_PARENT=/absolute/path/to/private-staging-outside-hermes-and-git
AGE_RECIPIENT=age1replace_with_operator_public_recipient
EXPECTED_REMOTE=git@github.com:ACCOUNT/PRIVATE-REPOSITORY.git
BRANCH=main준비 디렉터리는 Hermes 데이터 루트와 Git 복제본 밖에 만드세요. 검토한 파일을 소유 프로필의 scripts/ 디렉터리에 두세요. 실행 전마다 복제본을 깨끗하게 하고 원격 main에 맞추세요. 스크립트는 전송과 재확인까지 전체 흐름을 잠그며, 점유 중이거나 오래된 잠금을 빼앗지 않습니다. Git에 새 백업 경로로 준비할 수 있는 것은 latest.zip.age와 latest.sha256 뿐입니다. 암호문이 40,000,000바이트를 넘거나 로컬 .git와 여유 공간이 500,000,000바이트에 가까워지면 중단합니다. 예제의 보수적 한도이며 GitHub 저장 보장이 아닙니다.
export HERMES_HOME=/absolute/path/to/owning-hermes-data-root
install -d -m 700 /ABSOLUTE/PRIVATE-STAGING
install -d -m 700 "$HERMES_HOME/scripts"
install -m 700 hermes-github-backup.sh "$HERMES_HOME/scripts/hermes-github-backup.sh"
install -m 600 hermes-github-backup.conf "$HERMES_HOME/scripts/hermes-github-backup.conf"
"$HERMES_HOME/scripts/hermes-github-backup.sh"수동 실행은 종료 코드 0으로 끝나고 새 원격 조회 후 그 실행에서 생성한 커밋을 출력해야 합니다. gh repo view가 여전히 비공개라고 보고하는지, 복제본의 추적 경로와 지정 원격의 정확한 커밋을 확인하세요. 로컬 보관 파일이나 커밋만으로는 외부 저장이 아닙니다. 중단한 실행을 외부 백업 성공으로 기록하면 안 됩니다. Hermes 전체 백업은 모든 선택 파일이 추가된 경우에만 0, ZIP이 있어도 불완전하면 1, 다른 백업이 실행 중이면 2를 반환합니다. 스크립트는 종료 때 임시 ZIP과 로그를 삭제합니다. 일반 삭제는 안전한 완전 삭제가 아닙니다. 누락된 파일은 별도의 통제된 수동 hermes backup -o /PRIVATE-DIAGNOSTIC/hermes.zip으로 조사하고 종료 상태와 보고서를 확인하여 누락 자료의 보호 방법을 결정하세요.
3. 예약하고 첫 예정 실행 확인
수동 결과를 얻은 후에만 같은 프로필에서 Hermes의 문서화된 --no-agent --script 모드를 사용하세요. LLM 호출 없이 파일을 실행합니다. 주기와 비밀 정보가 없는 로컬 상태 전달을 의도적으로 정하세요. 게이트웨이 OS 사용자, 프로필, 다음 실행 시간을 확인하세요. Hermes의 스크립트 제한 시간은 HERMES_CRON_SCRIPT_TIMEOUT, 다음으로 cron.script_timeout_seconds, 마지막으로 기본값 3,600초 순서로 정해집니다. 실제 관찰한 실행에 맞는 값을 설정하고 확인하세요. 시간 초과는 실패입니다. 정리된 스크립트 환경은 Hermes 관리 공급자 자격 증명을 자동으로 받지 않으므로 의존하기 전에 실제 예약 사용자로 무인 gh 및 SSH 접근을 확인하세요.
hermes cron create '0 3 * * *' --no-agent --script hermes-github-backup.sh --deliver local --name 'Encrypted Hermes backup'
hermes cron list
hermes cron status
hermes cron doctor첫 예약 시간이 지난 뒤 정확한 작업 ID와 실행 기록, 로컬 출력(기본 프로필의 위치는 ~/.hermes/cron/output/), 사고 기록, 지정 원격의 최신 커밋을 확인하세요. 게이트웨이가 계속 가동되고 이번 예약 실행이 생성한 원격 커밋을 보고했는지 확인하세요. 수동 호출은 cron이 실행됐다는 증거가 아닙니다. 출력이 없으면 같은 작업과 게이트웨이를 확인하고 두 번째 예약을 만들지 마세요. 상태 메시지에는 ZIP 내용, 비밀, 자격 증명을 넣지 마세요.
4. 새 컴퓨터에서 가져오기와 복원 입증
다음 환경을 사용하세요: 운영 Hermes 프로필이나 게이트웨이가 없는 별도의 임시 Linux 컴퓨터. 먼저 호환되는 Hermes 버전을 설치하세요. 보관 파일은 사용자 데이터이지 애플리케이션이나 실행 환경 이미지가 아닙니다. 시험 컴퓨터에 지정 비공개 저장소와 독립 보관한 age identity의 별도 승인된 읽기 접근을 주세요. 복제본 원격 주소와 선택한 커밋을 확인하세요. 원본 호스트나 기존 프로필에서 hermes import를 실행하지 마세요. 복구한 모든 예약과 외부 작업은 사람이 목적지를 검토하고 활성화를 결정하기 전까지 비활성 상태로 두세요.
umask 077
unset HERMES_HOME
git clone git@github.com:ACCOUNT/PRIVATE-REPOSITORY.git /PRIVATE-RECOVERY/hermes-backup-clone
cd /PRIVATE-RECOVERY/hermes-backup-clone
sha256sum -c latest.sha256
age --decrypt -i /PRIVATE-KEY-STORE/hermes-backup-identity.txt -o /PRIVATE-RECOVERY/hermes.zip latest.zip.age
unzip -tq /PRIVATE-RECOVERY/hermes.zip
hermes import /PRIVATE-RECOVERY/hermes.zip
hermes setup
hermes cron list가져온 프로필, 스킬, 기억, 세션, cron 정의를 의도한 보호 범위와 비교하세요. hermes setup은 공급자 설정을 확인하지만 조정할 자격 증명과 컴퓨터별 경로도 살펴보세요. 실제 결과를 기록하세요. 체크섬 일치와 복호화 가능한 ZIP만으로 사용 가능한 복원이 증명되지는 않습니다. 연습 뒤 로컬 취급 정책에 따라 평문 시험 ZIP을 제거하세요. 일반 삭제는 안전한 완전 삭제를 보장하지 않습니다.
검사가 중단될 때
불완전한 Hermes 백업, ZIP 또는 암호화 오류, 예상과 다른 실제 Git URL, 비공개가 아니거나 읽을 수 없는 저장소, 점유된 흐름 잠금, 크기 제한, 전송 실패, 원격 커밋 불일치, 가져오기 실패는 이 실행을 미확인 상태로 남깁니다. 원인을 해결하고 재시도 전 현재 상태를 확인하세요. 전송 결과가 불확실하면 정확한 원격 브랜치와 커밋부터 검사하세요. 충돌 뒤 잠금이 남으면 살아 있는 프로세스와 로컬·원격 상태를 확인하고 활성 잠금을 절대 삭제하지 마세요. 비공개 age identity를 잃으면 복호화에 유효한 독립 사본이 필요합니다. 평문 비밀이 Git에 들어가면 노출된 자격 증명을 먼저 교체하세요. 나중에 파일을 지워도 이전 이력이나 다른 복제본은 사라지지 않습니다.
GitHub 대용량 파일 안내는 50 MiB에서 경고하고 100 MiB를 넘는 일반 Git 파일을 차단하며 Git은 백업 도구로 설계되지 않았다고 설명합니다. 예제는 그보다 낮은 값에서 의도적으로 멈춥니다. 바뀐 암호문은 latest.zip.age를 교체해도 Git 이력에 남습니다. 40 MB/500 MB 중단 값을 몰래 올리거나 이력을 재작성하거나 비공개 설정을 암호화로 생각하지 마세요. 크기나 복구 검사가 실패하면 백업 전용 저장소나 따로 검토한 LFS 계획을 재평가하세요. 계정, 저장소, 네트워크, 호스트 비용은 적용됩니다. 에이전트 없는 스크립트 자체에는 LLM 호출이 필요 없습니다. 소요 시간, 성공률, 절약액은 측정하지 않았습니다.
별도의 더 좁은 Hermes 예약 작업은 스킬 기반 반복 Hermes 작업을 설정하고 첫 실행을 확인하는 방법을 참고하세요. 그 작업의 보고서 확인은 암호화 보관 파일과 복구 연습을 대신하지 않습니다.
출처와 추가 읽을거리
- Hermes Agent CLI 명령, 고정 커밋
86fa9e6— 전체 백업 명령, 범위, 제외 항목, 종료 상태. 2026년 10월 19일 고정 소스로 확인했으며 실제 프로필 실행을 입증하지 않습니다. - Hermes Agent FAQ, 같은 고정 커밋 — 전체 백업 전송,
hermes import및hermes setup. 보관 파일은 데이터이지 실행 환경 이미지가 아닙니다. - Hermes 예약 작업 설명서, 같은 고정 커밋 — 에이전트 없는 스크립트 모드, 전달, 정리된 환경, 게이트웨이, 제한 시간. 예약 전 설치 버전 도움말을 확인하세요.
- age README — 수신자 암호화와 identity 복호화. 계속 바뀌는
main페이지는 2026년 10월 19일 확인했으며 무해한 시험에서 실제 암호화는 검사하지 않았습니다. - GitHub 저장소 비공개 설정, 저장소 만들기 및 GitHub CLI repo view — 비공개 접근과 공개 범위 재확인. 접근은 여전히 검토한 협업자와 자격 증명에 달려 있습니다.
- Git remote 및 Git push — 실제 목적지와 전송 참조. 스크립트가 그 실행의 정확한 원격 최신 커밋 확인을 추가합니다.
- GitHub 대용량 파일 안내 및 민감한 데이터 제거 — Git 크기·이력 제한과 유출된 자격 증명을 파일 삭제만 하지 말고 교체해야 하는 이유. 변경되는 설명서는 2026년 10월 19일 확인했습니다.



