Handout peserta

Hermes Workshop

Seluruh langkah teknis dari 37 slide, urut seperti di sesi. Tombol Copy di tiap blok perintah menyalin isinya apa adanya — satu karakter salah bisa membuat satu langkah gagal, jadi jangan diketik ulang.

← Kembali ke deck

04

Arsitektur Hermes

Buka slide ↗

Peta ini dipakai ulang sepanjang hari. Kalau Anda bingung sebuah perintah bekerja di lapisan mana, kembali ke sini.

Laptop Anda (hanya jendela)
SSH
VPS
Hermesagent
Provider → Modelotak
Toolsetstangan: web, file, terminal
Skillskemampuan yang dimuat saat dibutuhkan
Profileskonteks + perilaku per role
Memoryyang diingat antar sesi

Yang perlu dipegang

  • Mengganti model tidak mengubah Hermes
  • Mengganti profile tidak mengganti model
  • Tool yang tidak diaktifkan tidak bisa dipakai agent
11

Siapa menyiapkan apa

Buka slide ↗

Tidak ada instalasi di laptop Anda hari ini. Hermes sudah berjalan di VPS yang disiapkan trainer.

Peserta membawa
Laptop
SSH clientbawaan OS atau PuTTY
Internet
tethering cadangan
Akun AI / OpenRouter
API key aktif
Trainer menyiapkan (sebelum hari-H)
VPS per peserta
Hermes terpasang & berjalan
VPS cadangan
Template konfigurasi
Contoh skills
12

Perintah verifikasi pre-flight

Buka slide ↗
di laptop Andabash
# 1. SSH client ada dan bisa dipakai
ssh -V

# 2. Masuk ke VPS yang diberikan trainer
ssh <user>@<host-vps>

# 3. Di dalam VPS — Hermes hidup?
hermes version

Langkah 1 hanya membuktikan client-nya ada. Yang membuktikan kredensial Anda benar adalah langkah 2 — kalau gagal di situ, itu pekerjaan chapter ini, bukan chapter berikutnya.

Kalau langkah 2 gagal

  • Periksa host dan user — bukan password dulu
  • Coba tethering: sebagian jaringan kantor memblokir port 22
  • Minta VPS cadangan ke trainer daripada menunggu
13

Daftar kredensial

Buka slide ↗

Yang harus Anda pegang sekarang

  • Host / IP VPS
  • User SSH
  • Kunci atau password SSH
  • API key provider sudah diterima
  • Tahu di mana API key itu nanti disimpan
TODO — prosedur akses VPSbash
# TODO(trainer): ganti dengan prosedur akses yang sebenarnya.
# Belum ditentukan dan TIDAK boleh dikarang:
#   - host / IP VPS
#   - pola nama user (per peserta atau shared)
#   - cara distribusi kunci SSH
# Sumber: docs/hermes-training-blueprint.md §7 item 3

ssh <user>@<host-vps>

API key tidak pernah disimpan di laptop peserta. Ia masuk ke ~/.hermes/.env di dalam VPS — chapter 03 menunjukkan caranya, dan hermes config set merutekannya otomatis.

14

Verifikasi Checkpoint #0

Buka slide ↗
di dalam VPSbash
hermes version
hermes doctor

hermes doctor adalah perintah diagnostik resmi: ia menyebut apa yang kurang sekaligus cara memperbaikinya. Kalau ada yang merah di situ, selesaikan sekarang — bukan di chapter berikutnya.

Sudah lulus? Bantu tetangga

  • Angkat tangan supaya trainer tahu
  • Dampingi satu peserta yang belum lulus
  • Jangan membuka chapter berikutnya dulu
15

Masuk ke VPS

Buka slide ↗
di laptop Andabash
ssh <user>@<host-vps>

Sejak baris ini, semua perintah dijalankan DI DALAM VPS. Kalau Anda ragu sedang di mana, jalankan hostname.

Kebiasaan yang menyelamatkan

  • Perhatikan prompt shell Anda — berubah setelah SSH berhasil
  • Satu terminal untuk Hermes, satu lagi untuk memeriksa file
  • Jangan menutup terminal saat sesi chat masih jalan
16

Verifikasi & catatan instalasi

Buka slide ↗
peserta — di dalam VPSbash
hermes version      # nomor versi tercetak
hermes doctor       # laporan environment
hermes              # masuk ke sesi chat

Di bawah ini cara installer resmi memasang Hermes. Ini dipakai TRAINER saat menyiapkan VPS — peserta tidak menjalankannya hari ini. Disertakan supaya Anda bisa mengulang sendiri di mesin lain.

trainer — menyiapkan VPSbash
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash

# VPS headless tanpa browser: lewati langkah Playwright
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash -s -- --skip-browser

# setelah instalasi
source ~/.bashrc    # atau: source ~/.zshrc
hermes

Installer menangani Python 3.11 (via uv), Node.js v22, ripgrep, ffmpeg, clone repo, virtualenv, dan perintah hermes global. Prasyaratnya hanya git — dan di Linux curl + xz-utils.

trainer — service user tanpa sudobash
# dijalankan admin lebih dulu
sudo npx playwright install-deps chromium

# lalu installer dijalankan sebagai user biasa, arahkan PATH
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc

# bila gateway perlu hidup setelah logout
sudo loginctl enable-linger <service-user>
TODO — versi acuantext
# TODO(trainer): sebutkan satu versi/tag Hermes sebagai acuan
# training, supaya perintah di deck ini bisa ditelusuri.
# Sumber: docs/hermes-training-blueprint.md §7 item 5
17

Struktur ~/.hermes/

Buka slide ↗
~/.hermes/
config.yamlmodel, terminal, TTS, compression, dll
.envAPI key dan secret
auth.jsonkredensial provider OAuth
SOUL.mdidentitas utama agent — slot #1 system prompt
memories/MEMORY.md, USER.md
skills/dikelola lewat tool skill_manage
cron/job terjadwal
sessions/sesi gateway
logs/errors.log, gateway.log — secret diredaksi otomatis

Kalau Hermes dipasang sebagai root, layout-nya berbeda: kode di /usr/local/lib/hermes-agent/, binary di /usr/local/bin/hermes, data di /root/.hermes/ (atau $HERMES_HOME).

melihat isinya sendiribash
ls -la ~/.hermes/
cat ~/.hermes/config.yaml
18

Perintah config

Buka slide ↗
PerintahFungsi
hermes configLihat konfigurasi sekarang
hermes config editBuka config.yaml di editor
hermes config get KEYCetak satu nilai
hermes config set KEY VALSet satu nilai
hermes config unset KEYHapus nilai yang di-set user
hermes config checkCek opsi yang hilang setelah update
hermes config migrateTambahkan opsi yang hilang
contohbash
hermes config get model
hermes config set model anthropic/claude-opus-4
hermes config set terminal.backend docker
hermes config unset terminal.backend

# API key: otomatis dirutekan ke .env, bukan config.yaml
hermes config set OPENROUTER_API_KEY sk-or-...

Urutan prioritas — tertinggi dulu

  • Argumen CLI
  • config.yaml
  • .env
  • Default bawaan

Kalau satu setting non-secret ada di dua tempat, config.yaml yang menang. Itu sebabnya --model pada satu perintah hanya berlaku sekali jalan dan tidak mengubah default Anda.

19

Perintah setup

Buka slide ↗
perintah setup resmibash
hermes model          # pilih provider dan model
hermes tools          # atur tool mana yang aktif
hermes gateway setup  # atur platform messaging
hermes config set     # set satu nilai
hermes config get     # baca satu nilai
hermes setup          # wizard lengkap

Kenapa bukan edit YAML

  • Indentasi YAML salah = Hermes tidak mau start
  • Wizard memvalidasi nilai; editor tidak
  • Secret bisa salah tempat dan ikut ter-commit
20

Verifikasi Checkpoint #1

Buka slide ↗
di dalam VPSbash
hermes version
hermes doctor
hermes chat -q "Balas dengan satu kata: siap"

hermes chat -q adalah mode satu-query: ia menjawab lalu keluar. Cocok untuk checkpoint karena tidak meninggalkan sesi interaktif menggantung.

Kalau belum lulus

  • Model belum dipilih → tunggu chapter 04, itu normal
  • hermes doctor merah → selesaikan itu dulu
  • SSH putus-putus → pindah ke tethering
21

Peta provider dan model

Buka slide ↗
Hermes
OpenRouter
Model A
Model B
Model C
Provider langsung
Model
Model
Custom endpoint
apa pun yang OpenAI-compatible

Satu provider bisa membawa banyak model. Mengganti model di dalam satu provider berbeda dari menambah provider baru — slide berikutnya soal itu, dan itu kesalahan paling sering.

22

hermes model vs /model

Buka slide ↗
hermes model/model
Dijalankan dariterminal, di luar sesidi dalam sesi chat
Bisatambah provider, OAuth, API key, custom endpointhanya berpindah antar yang sudah ada
Tidak bisamenambah provider, OAuth, minta API key

Untuk menambah provider baru: keluar sesi (Ctrl+C atau /quit), jalankan hermes model, lalu buka sesi baru.

berpindah di dalam sesitext
/model custom:qwen-2.5             # model di custom endpoint
/model custom                      # deteksi model dari endpoint
/model openrouter:claude-sonnet-4  # kembali ke provider cloud
named custom provider — tiga bagiantext
/model custom:local:qwen-2.5
/model custom:work:llama3
23

Konfigurasi custom endpoint

Buka slide ↗
~/.hermes/config.yamlyaml
model:
  default: your-model-name
  provider: custom
  base_url: http://localhost:8000/v1
  api_key: your-key-or-leave-empty-for-local
lewat wizard — dianjurkanbash
hermes model
# Pilih "Custom endpoint (self-hosted / VLLM / etc.)"
# Masukkan: base URL, API key, nama model
named custom provider — kalau lebih dari satu endpointyaml
providers:
  work:
    api: https://gpu-server.internal.corp/v1
    key_env: CORP_API_KEY
    transport: chat_completions

Tiap entry menerima: api (alias base_url/url), name, key_env atau api_key, transport (chat_completions / anthropic_messages / codex_responses), default_model, models, context_length, discover_models, extra_body, extra_headers, ssl_ca_cert / ssl_verify, dan enabled: false.

TODO — Sumopodyaml
# TODO(trainer): Sumopod masuk lewat jalur custom endpoint di atas,
# tetapi keempat nilai ini belum ada dan TIDAK boleh dikarang:
#   1. base URL OpenAI-compatible Sumopod
#   2. nama env var API key-nya (mis. SUMOPOD_API_KEY)
#   3. nama model yang tersedia
#   4. apakah butuh extra_body / extra_headers khusus
#
# Catatan: "sumopod" tidak muncul sama sekali di dokumentasi resmi
# Hermes, jadi tidak ada provider bawaan bernama itu.
# Sumber: docs/hermes-training-blueprint.md §7 item 1

providers:
  sumopod:
    api: <TODO base URL>
    key_env: <TODO nama env var>
    transport: chat_completions
24

Mengganti model

Buka slide ↗
di dalam VPSbash
hermes config set model anthropic/claude-opus-4
hermes chat --model anthropic/claude-sonnet-4   # override sekali jalan
hermes config get model

Latihan yang dinilai di checkpoint

  • Ganti ke model lain
  • Kirim satu prompt
  • Ganti kembali ke model semula
  • Ulangi sekali lagi tanpa melihat slide ini

Yang dinilai bukan isi jawaban prompt-nya, tapi bahwa Anda bisa mengulang urutannya tanpa panduan.

25

Konfigurasi fallback

Buka slide ↗
cara yang dianjurkanbash
hermes fallback          # memakai ulang picker dari hermes model
hermes fallback add
hermes fallback list     # atau: ls
hermes fallback remove   # atau: rm
hermes fallback clear
~/.hermes/config.yamlyaml
fallback_providers:
  - provider: openrouter
    model: anthropic/claude-sonnet-4

Tiap entry WAJIB punya provider dan model. Entry yang kehilangan salah satunya diabaikan tanpa peringatan.

fallback ke custom endpointyaml
fallback_providers:
  - provider: custom
    model: my-local-model
    base_url: http://localhost:8000/v1
    key_env: MY_LOCAL_KEY   # nama env var berisi API key

Dua fakta yang mengubah keputusan Anda

  • Fallback itu per-turn, bukan per-session — tiap pesan baru mulai dari model utama lagi
  • Dalam satu turn, fallback menyala paling banyak sekali
  • Fallback menghapus prompt cache — permintaan berikutnya membaca ulang seluruh riwayat dengan harga input penuh
  • Sesi panjang yang bolak-balik antar provider bisa jauh lebih mahal
26

Verifikasi Checkpoint #2

Buka slide ↗
di dalam VPSbash
hermes config get model
hermes config get fallback_providers --json
hermes chat -q "Model apa kamu?"

Uji ganti model yang benar: ganti ke model lain, kirim satu prompt, ganti kembali. Yang dinilai bukan hasil prompt-nya, tapi bahwa Anda bisa mengulangnya tanpa membuka slide.

28

Toolset dan cara mengaktifkannya

Buka slide ↗
ToolsetToolKegunaan
webweb_extract, web_searchCari dan baca halaman web
searchweb_searchHanya cari, tanpa extract
filepatch, read_file, search_files, write_fileBaca / tulis / cari file
terminalprocess, terminalJalankan perintah shell
skillsskill_manage, skill_view, skills_listKelola skill
memorymemoryMemory antar-sesi
browserbrowser_*, web_searchOtomasi browser
safeimage_generate, vision_analyze, web_extract, web_searchRiset read-only
codingfile + terminal + search + web + skills + browser + todo + memory + …Bundel untuk kerja software
per sesibash
hermes chat --toolsets web,file,terminal
hermes chat --toolsets debugging   # composite — melebar jadi file + terminal + web
hermes chat --toolsets all         # semuanya
interaktifbash
hermes tools   # UI curses, atur per platform
di dalam sesitext
/tools list
/tools disable browser
/tools enable homeassistant
~/.hermes/config.yamlyaml
toolsets:
  - hermes-cli          # default untuk CLI
30

Challenge: chatbot vs agent

Buka slide ↗
jalankan keduanyabash
# 1. tanpa tool — jawaban dari ingatan model
hermes chat -q "Cari informasi <X> dan buat summary dengan sumbernya"

# 2. dengan web — agent mencari dulu
hermes chat --toolsets web -q "Cari informasi <X> dan buat summary dengan sumbernya"

Yang harus Anda perhatikan

  • Apakah ada URL di jawaban kedua
  • Berapa lama selisih waktunya
  • Apakah isinya berbeda — dan mana yang benar

Pilih topik yang Anda tahu jawabannya dan yang berubah belakangan ini. Topik yang stabil membuat kedua jawaban terlihat sama dan pelajarannya hilang.

31

Verifikasi Checkpoint #3

Buka slide ↗
di dalam VPSbash
hermes chat --toolsets web -q "Cari berita terbaru soal <X> dan sebutkan URL sumbernya"

Yang dinilai satu hal: sumber dikembalikan. Jawaban bagus tanpa URL tetap tidak lulus checkpoint ini.

33

Apa yang terisolasi

Buka slide ↗

Definisi resminya: profile adalah home directory Hermes yang terpisah. Storage-nya di ~/.hermes/profiles/<name>/.

Yang terisolasi per profileArtinya
config.yamlmodel dan setting bisa berbeda
.envAPI key bisa berbeda
memories/yang diingat tidak tercampur
skills/kemampuan tidak saling bocor
sessions/riwayat percakapan terpisah
state gatewayplatform messaging terpisah

Jebakan yang sering kena

  • Membuat profile TIDAK mengubah working directory perintah terminal
  • Kalau ingin profile mulai di proyek tertentu, set terminal.cwd di config.yaml profile itu
34

Membuat profile

Buka slide ↗
empat cara membuatbash
# Profile kosong — perlu setup penuh
hermes profile create mybot

# Clone config saja dari profile sekarang
hermes profile create work --clone

# Clone semuanya dari profile sekarang
hermes profile create backup --clone-all

# Clone config dari profile tertentu
hermes profile create work2 --clone-from work
OpsiEfek
--cloneSalin config.yaml, .env, SOUL.md, dan skills dari profile sekarang
--clone-allSalin semuanya (config, memories, skills, cron, plugins). TIDAK menyalin sessions, state.db, backups, state-snapshots, checkpoints
--clone-from <profile>Clone dari profile tertentu, bukan yang sekarang
--description "<text>"Deskripsi 1–2 kalimat tentang keahlian profile ini
--no-skillsProfile kosong tanpa skill bawaan
--no-aliasLewati pembuatan wrapper script

Saran untuk latihan hari ini

  • Buat profile pertama dengan --clone supaya model dan key tidak perlu diatur ulang
  • Beri --description supaya nanti Anda ingat gunanya
  • Jangan pakai --clone-all dulu — memory bercampur membingungkan saat membandingkan
35

Perintah profile

Buka slide ↗
mengelolabash
hermes profile list         # profile aktif ditandai *
hermes profile use work     # jadikan aktif
hermes profile use default  # kembali ke base
hermes profile show work    # detail lengkap
hermes profile delete mybot --yes
satu perintah di bawah profile tertentubash
hermes -p work chat -q "Check the server status"
hermes --profile dev gateway start
hermes -p personal skills list
contoh keluaran: hermes profile show worktext
Profile: work
Path:    ~/.hermes/profiles/work
Model:   anthropic/claude-sonnet-4 (anthropic)
Gateway: stopped
Skills:  12
.env:    exists
SOUL.md: exists
Alias:   ~/.local/bin/work

Subcommand lain yang tersedia: describe, alias, rename, export, import, install, update, info.

36

Membuktikan perbedaan

Buka slide ↗
satu prompt, dua profilebash
hermes -p developer chat -q "<prompt identik>"
hermes -p researcher chat -q "<prompt identik>"

Pilih prompt yang cukup ambigu untuk ditafsirkan berbeda oleh dua peran. "Jelaskan repo ini" bekerja bagus: developer akan melihat struktur kode, researcher akan mencari konteks dan sumber.

Kalau hasilnya sama

  • Periksa SOUL.md tiap profile — di situ perilakunya ditentukan
  • Periksa toolset yang aktif: hermes -p <nama> tools
  • Prompt-nya mungkin terlalu spesifik sehingga hanya ada satu cara menjawab
37

Verifikasi Checkpoint #4

Buka slide ↗
di dalam VPSbash
hermes profile list
hermes profile show <nama>
hermes -p <nama> chat -q "<prompt identik>"

Untuk lulus, tunjukkan dua keluaran dari prompt yang sama di dua profile, dan sebutkan satu perbedaan yang bisa ditunjuk.

41

Menemukan dan memasang skill

Buka slide ↗
dari CLIbash
hermes skills list
di dalam sesi chattext
/skills
/skills search docker
/skills browse
memasang skill opsional resmibash
hermes skills install official/research/arxiv
/skills install official/creative/songwriting-and-ai-music

Jebakan

  • Skill yang baru dipasang berlaku di SESI BARU
  • Untuk sesi sekarang: pakai /reset
  • Atau tambahkan --now — biaya token lebih tinggi di turn berikutnya
42

Struktur dan isi SKILL.md

Buka slide ↗
my-skill/
SKILL.mddokumen skill utama
references/
api-docs.mdreferensi API
examples.mdcontoh input/output
templates/
config.yaml
scripts/
setup.shscript yang bisa dijalankan agent
SKILL.md — contoh resmi minimalmarkdown
---
name: my-skill
description: Brief description of what this skill does
version: 1.0.0
metadata:
  hermes:
    tags: [my-tag, automation]
    category: my-category
---

# My Skill

## When to Use
Use this skill when the user asks about [specific topic]
or needs to [specific task].

## Procedure
1. First, check if [prerequisite] is available
2. Run `command --with-flags`
3. Parse the output and present results

## Pitfalls
- Common failure: [description]. Fix: [solution]
- Watch out for [edge case]

## Verification
Run `check-command` to confirm the result is correct.

Skill disimpan di ~/.hermes/skills/<kategori>/<nama>/SKILL.md.

merujuk reference file dari dalam SKILL.mdmarkdown
For API details, load the reference: `skill_view("my-skill", "references/api-docs.md")`
43

Menulis skill pertama

Buka slide ↗
tiga langkahbash
mkdir -p ~/.hermes/skills/my-category/my-skill
# tulis SKILL.md
hermes chat -q "/my-skill bantu saya dengan hal itu"

Skill muncul otomatis — tidak ada registrasi. Taruh di ~/.hermes/skills/ dan langsung hidup. Kalau tidak muncul di sesi yang sedang jalan, pakai /reset.

Jaga skill tetap fokus

  • "Semua DevOps" → terlalu panjang dan kabur, tidak akan terpakai
  • "Deploy aplikasi Python ke Fly.io" → cukup spesifik untuk benar-benar berguna
  • Kalau ada dua tugas berbeda, buat dua skill

Kalau skill tidak terpanggil

  • Periksa description di frontmatter — itu yang dibaca agent untuk memutuskan
  • Periksa bagian When to Use
  • Pastikan toolset skills aktif
  • Coba di sesi baru
44

Verifikasi Checkpoint #5

Buka slide ↗
di dalam VPSbash
hermes skills list | grep my-skill
hermes chat -q "/my-skill <tugas>"

Termuat dan tereksekusi itu dua hal berbeda: yang pertama berarti Hermes melihat skill Anda, yang kedua berarti ia benar-benar mengikuti prosedurnya.

46

Empat langkah resmi

Buka slide ↗

Alur penuh

  • Buat Google Cloud project dan aktifkan API yang diperlukan (Gmail, Calendar, Drive, Sheets, Docs, People)
  • Buat kredensial OAuth 2.0 tipe Desktop app, unduh JSON client secret
  • Otorisasi — Hermes membuat auth URL, Anda menyetujui di browser, menempelkan kembali URL redirect
  • Selesai — token diperbarui otomatis sejak titik ini

Alternatif email-saja: kalau yang Anda butuhkan hanya email tanpa Calendar/Drive/Sheets, dokumentasi resmi menyarankan skill himalaya — bekerja dengan App Password Gmail, selesai dalam 2 menit, tanpa perlu Google Cloud project sama sekali.

scope yang diminta bundel ini — 8, tetaptext
https://www.googleapis.com/auth/gmail.readonly
https://www.googleapis.com/auth/gmail.send
https://www.googleapis.com/auth/gmail.modify
https://www.googleapis.com/auth/calendar
https://www.googleapis.com/auth/drive
https://www.googleapis.com/auth/contacts.readonly
https://www.googleapis.com/auth/spreadsheets
https://www.googleapis.com/auth/documents

Yang perlu Anda sadari tentang scope ini

  • Tidak ada presentations — Slides memang tidak tercakup
  • drive adalah Drive PENUH, bukan drive.file
  • Daftarnya tetap: versi setup.py ini tidak bisa mempersempit scope
47

Langkah di Google Cloud Console

Buka slide ↗

Anda mengerjakan ini sendiri, bukan memakai project trainer — supaya setelah training Anda bisa mengulangnya untuk proyek lain. Kerjakan berurutan; melewati langkah 4 adalah sebab error 403 paling umum.

Lima langkah

  • 1. Buat/pilih project — console.cloud.google.com/projectselector2/home/dashboard
  • 2. Aktifkan enam API — console.cloud.google.com/apis/library
  • 3. Buat OAuth client — console.cloud.google.com/apis/credentials → Create Credentials → OAuth 2.0 Client ID → Application type: Desktop app
  • 4. Kalau app masih status Testing, tambahkan akun Anda sebagai test user — console.cloud.google.com/auth/audience → Audience → Test users → Add users
  • 5. Unduh JSON client secret, catat path-nya

Kesalahan yang paling sering

  • Memilih "Web application" — alur paste-the-code tidak akan bekerja
  • Melewati langkah 4 → Error 403: access_denied saat otorisasi
  • Mengaktifkan hanya Gmail API lalu kaget Drive gagal
  • Lupa di project mana OAuth client dibuat
TODO — kebijakan Workspace organisasitext
# TODO(trainer): konfirmasi ke IT sebelum hari-H
#   - apakah domain memakai Google Advanced Protection
#   - akun mana yang boleh dipakai peserta (kerja atau pribadi)
# Peserta dengan Advanced Protection TIDAK bisa menyelesaikan
# alur ini sampai admin meng-allowlist OAuth client ID.
# Sumber: docs/hermes-training-blueprint.md §7 item 6
48

Otorisasi headless — langkah persis

Buka slide ↗
siapkan jalan pintas dulubash
GSETUP="python ${HERMES_HOME:-$HOME/.hermes}/skills/productivity/google-workspace/scripts/setup.py"
lima langkahbash
# 0. Cek dulu — kalau mencetak AUTHENTICATED, lewati ke pemakaian
$GSETUP --check

# 1. Daftarkan client secret yang sudah diunduh
$GSETUP --client-secret /path/to/client_secret.json

# 2. Minta auth URL
$GSETUP --auth-url

# 3. Tukar kode dengan token
$GSETUP --auth-code "URL_YANG_ANDA_TEMPEL"

# 4. Verifikasi
$GSETUP --check

Tiga hal yang akan terjadi — jangan panik

  • Setelah menyetujui, browser GAGAL membuka http://localhost:1 — ini normal dan diharapkan
  • Yang dibutuhkan adalah SELURUH URL dari address bar, bukan halaman yang tampil
  • Error 403 access_denied berarti akun belum jadi test user → console.cloud.google.com/auth/audience

Flag --services dan --format yang muncul di halaman dokumentasi TIDAK ADA di setup.py versi yang terpasang. Memakainya gagal dengan unrecognized argument. Jalankan $GSETUP --help di VPS sebelum sesi untuk memastikan versinya sama.

Kalau kode kedaluwarsa

  • --auth-code yang gagal akan mengembalikan fresh_auth_url
  • Pakai URL baru itu, dan ambil redirect dari tab browser TERBARU
  • Kode dari tab lama atau yang sudah dipakai selalu gagal
Setelah selesaiLokasi
Token, diperbarui otomatis~/.hermes/google_token.json
State OAuth sementara~/.hermes/google_oauth_pending.json
Mencabut izin$GSETUP --revoke
49

Perintah tiap surface

Buka slide ↗
siapkan jalan pintasbash
GAPI="python ${HERMES_HOME:-$HOME/.hermes}/skills/productivity/google-workspace/scripts/google_api.py"
Gmailbash
$GAPI gmail search "is:unread" --max 10
$GAPI gmail search "from:[email protected] newer_than:1d"
$GAPI gmail search "has:attachment filename:pdf newer_than:7d"
$GAPI gmail get MESSAGE_ID
$GAPI gmail send --to [email protected] --subject "Hello" --body "Message text"
$GAPI gmail send --to [email protected] --subject "Report" --body "<h1>Q4</h1>" --html
$GAPI gmail reply MESSAGE_ID --body "Thanks, that works for me."
$GAPI gmail labels
$GAPI gmail modify MESSAGE_ID --add-labels LABEL_ID

Display name pengirim bisa dikustomisasi — berguna kalau beberapa agent berbagi satu akun. Tapi kalau --from memakai ALAMAT yang berbeda dari akun terautentikasi, alamat itu harus terdaftar sebagai Send As alias di Gmail Settings → Accounts.

Calendar — waktu WAJIB bertimezonebash
$GAPI calendar list
$GAPI calendar list --start 2026-03-01T00:00:00Z --end 2026-03-07T23:59:59Z
$GAPI calendar create --summary "Team Standup" \
  --start 2026-03-01T10:00:00-07:00 --end 2026-03-01T10:30:00-07:00
$GAPI calendar create --summary "Review" \
  --start 2026-03-01T14:00:00Z --end 2026-03-01T15:00:00Z \
  --attendees "[email protected],[email protected]"
$GAPI calendar delete EVENT_ID
Drivebash
$GAPI drive search "quarterly report" --max 10
$GAPI drive search "mimeType='application/pdf'" --raw-query --max 5
$GAPI drive get FILE_ID
$GAPI drive upload /path/to/report.pdf
$GAPI drive create-folder "Reports"
$GAPI drive share FILE_ID --email [email protected] --role reader
$GAPI drive download FILE_ID --output ~/doc.pdf
$GAPI drive delete FILE_ID            # ke trash, bisa dibatalkan
Sheetsbash
$GAPI sheets create --title "Q4 Budget"
$GAPI sheets get SHEET_ID "Sheet1!A1:D10"
$GAPI sheets update SHEET_ID "Sheet1!A1:B2" --values '[["Name","Score"],["Alice","95"]]'
$GAPI sheets append SHEET_ID "Sheet1!A:C" --values '[["new","row","data"]]'
Docsbash
$GAPI docs get DOC_ID
$GAPI docs create --title "Meeting Notes"
$GAPI docs append DOC_ID --text "Additional content to append"

Sisa yang tersedia: contacts list --max 20, drive upload --parent FOLDER_ID, drive share --type anyone, dan drive delete --permanent (hati-hati — ini melewati trash).

50

gws — Slides dan discovery

Buka slide ↗
Slidesbash
gws slides presentations create
gws slides presentations get
gws slides presentations batchUpdate

Prinsip gws: temukan dulu, baru panggil. Jangan menghafal perintah — tanyakan skemanya.

discoverybash
gws slides --help                      # resource dan method yang tersedia
gws schema slides.presentations.create # params dan tipe sebuah method
gws schema drive.files.list            # params, tipe, default

gws drive files list --params '{"pageSize": 100}' --page-all | jq -r '.files[].name'
autentikasi gwsbash
gws auth setup     # sekali: siapkan Cloud project, aktifkan API, login
gws auth login     # login berikutnya / pilih scope

Kabar baiknya

  • google_api.py Hermes memilih gws sebagai backend kalau gws terpasang
  • Keduanya menunjuk ke token yang sama: ~/.hermes/google_token.json
  • Jadi Anda tidak perlu login dua kali
  • Binari gws bisa diarahkan manual lewat env HERMES_GWS_BIN

Sebelum memakainya di pekerjaan nyata

  • gws bukan produk resmi Google yang didukung
  • Pertimbangkan itu untuk apa pun yang menyentuh data produksi
  • Untuk workshop dan eksplorasi, ini jalur yang wajar
51

Aturan aman dan troubleshooting

Buka slide ↗

Aturan resmi, dikutip apa adanya: jangan mengirim email, membuat/menghapus event calendar, menghapus file Drive, membagikan file, atau mengubah Docs/Sheets tanpa mengonfirmasi ke user dulu. Tunjukkan apa yang akan dilakukan dan minta persetujuan.

Yang harus Anda ingat soal scope

  • Scope drive di bundel ini adalah Drive PENUH, bukan drive.file
  • Artinya agent bisa menyentuh file apa pun yang bisa Anda sentuh
  • Termasuk file yang dibagikan KEPADA Anda oleh orang lain
  • Versi setup.py ini tidak bisa mempersempit scope
  • Kalau itu tidak bisa diterima, pakai akun terpisah untuk agent
MasalahPerbaikan
NOT_AUTHENTICATEDJalankan setup (slide 08.3–08.4)
REFRESH_FAILEDToken dicabut/kedaluwarsa — ulangi otorisasi
403 Insufficient PermissionScope kurang — $GSETUP --revoke lalu otorisasi ulang
403 Access Not ConfiguredAPI belum diaktifkan di Google Cloud Console
ModuleNotFoundErrorJalankan setup dengan --install-deps
AUTHENTICATED (partial)Kemampuan tulis butuh otorisasi ulang
Advanced Protection memblokir authAdmin Workspace harus meng-allowlist OAuth client ID
52

Verifikasi Checkpoint #6

Buka slide ↗
di dalam VPSbash
$GSETUP --check                          # harus: AUTHENTICATED
$GAPI gmail search "is:unread" --max 3
$GAPI calendar list
$GAPI drive search "report" --max 3

Ide artifact yang cukup kecil untuk 15 menit

  • Sheet berisi daftar email belum dibaca hari ini
  • Doc berisi ringkasan tiga dokumen Drive yang Anda cari
  • Sheet berisi jadwal Anda minggu ini dari Calendar

Pilih yang read-heavy dan write-once: banyak membaca, satu kali menulis. Itu paling cepat selesai dan paling kecil risikonya.

61

Cheat sheet lengkap

Buka slide ↗
sehari-haribash
hermes                          # mulai chat
hermes chat -q "..."            # satu pertanyaan, lalu keluar
hermes chat --toolsets web      # sesi dengan toolset tertentu
hermes doctor                   # diagnosa kalau ada yang aneh
hermes update                   # perbarui
modelbash
hermes model                    # pilih provider/model, tambah provider baru
hermes config get model
hermes config set model <provider>/<model>
hermes fallback                 # atur fallback
profilebash
hermes profile list
hermes profile create <nama> --clone
hermes profile use <nama>
hermes profile show <nama>
hermes -p <nama> chat -q "..."  # sekali jalan, tanpa mengubah default
skill & toolsbash
hermes skills list
hermes skills install official/<kategori>/<nama>
hermes tools
mkdir -p ~/.hermes/skills/<kategori>/<nama>   # lalu tulis SKILL.md
google workspacebash
GSETUP="python ${HERMES_HOME:-$HOME/.hermes}/skills/productivity/google-workspace/scripts/setup.py"
GAPI="python ${HERMES_HOME:-$HOME/.hermes}/skills/productivity/google-workspace/scripts/google_api.py"

$GSETUP --check
$GAPI gmail search "is:unread" --max 10
$GAPI calendar list
$GAPI drive search "report" --max 10
$GAPI sheets create --title "..."

Kalau ada yang rusak

  • hermes doctor lebih dulu — ia menyebut apa yang kurang
  • Untuk Google: $GSETUP --check
  • Log ada di ~/.hermes/logs/ — secret sudah diredaksi
  • Skill baru tidak muncul? Pakai /reset atau buka sesi baru