Handout peserta

Hermes Workshop

Seluruh langkah teknis dari 27 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

03

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
04

Delapan konsep ringkas

Buka slide ↗
KonsepFungsiDibahas di
ModelOtak — bisa ditukar, punya batas, bukan sumber kebenaran
AgentMemutuskan langkah, memilih tool, berhenti dan melapor
ProfilePaket konteks + perilaku + tools + skills + constraintsCh 06
SkillProsedur on-demand, nol token sampai dipakaiCh 07
ToolIzin — yang tidak aktif tidak bisa dipakaiCh 05
WorkspaceVPS Anda — batas baca/tulis yang Anda tentukanCh 05
MemoryFakta antar sesi — ringkas, bukan prosedurCh 07
ExecutionPerintah nyata di VPS — ada hasil, log, kegagalanCh 05

Bedakan: 'Saya pakai Postgres' itu memory (fakta). 'Cara deploy ke staging' itu skill (prosedur). Tool = izin: terminal di mesin produksi dan file berisi secret pikir dua kali; pakai toolset safe untuk demo read-only.

05

Siapa menyiapkan apa + kredensial

Buka slide ↗

Hermes sudah berjalan di VPS yang disiapkan trainer — supaya satu jam pertama tidak habis untuk perbedaan macOS, Windows, dan Linux.

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

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.

06

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
07

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
08

Masuk, verifikasi & catatan instalasi

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
peserta — di dalam VPSbash
hermes version      # nomor versi tercetak
hermes doctor       # laporan environment
hermes              # masuk ke sesi chat
ls -la ~/.hermes/
cat ~/.hermes/config.yaml

Di bawah ini cara installer resmi memasang Hermes. Dipakai TRAINER saat menyiapkan VPS — peserta tidak menjalankannya hari ini. Disertakan supaya Anda bisa mengulang 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
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

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).

09

Perintah config & setup

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
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
10

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
11

Peta provider dan perintah

Buka slide ↗
Hermes
OpenRouter
Model A
Model B
Model C
Provider langsung
Model
Model
Custom endpoint
apa pun yang OpenAI-compatible
hermes model/model
Dijalankan dariterminal, di luar sesidi dalam sesi chat
Bisatambah provider, OAuth, API key, custom endpointhanya berpindah antar yang sudah ada
Tidak bisa—menambah provider, OAuth, minta API key
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

Untuk menambah provider baru: keluar sesi (Ctrl+C atau /quit), jalankan hermes model, lalu buka sesi baru. Satu provider bisa membawa banyak model — mengganti model di dalam satu provider berbeda dari menambah provider baru.

custom endpoint - cara yang dianjurkanbash
hermes model
# pilih: Custom endpoint (self-hosted / VLLM / etc.)
~/.hermes/config.yaml - customyaml
model:
  default: your-model-name
  provider: custom
  base_url: http://localhost:8000/v1
  api_key: your-key-or-leave-empty-for-local
TODO - Sumopod (nilai belum ada, jangan dikarang)yaml
# TODO(trainer): base URL OpenAI-compatible Sumopod,
# nama env var API key, daftar model, extra_body/headers.
# Sumber: docs/hermes-training-blueprint.md section 7 item 1
providers:
  sumopod:
    api: <TODO base URL>
    key_env: <TODO nama env var>
    transport: chat_completions
12

Mengganti model & fallback

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
cara yang dianjurkan — fallbackbash
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
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

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

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
13

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.

14

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
mengaktifkanbash
hermes chat --toolsets web,file,terminal
hermes chat --toolsets debugging   # composite — melebar jadi file + terminal + web
hermes chat --toolsets all         # semuanya
hermes tools
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

Kebijakan minimum untuk hari ini

  • Aktifkan yang dibutuhkan tugas itu saja
  • Pakai toolset safe untuk demo yang tidak boleh mengubah data
  • Periksa hasil sebelum mempercayainya
15

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.

16

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.

17

Apa yang terisolasi

Buka slide ↗

Definisi resminya: profile adalah home directory Hermes yang terpisah. Storage-nya di ~/.hermes/profiles/<name>/. Bukan setting, bukan model baru.

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
18

Membuat & mengelola 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
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

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
19

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
20

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.

22

Menemukan, memasang, dan isi SKILL.md

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
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.

Jebakan

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

Skill disimpan di ~/.hermes/skills/<kategori>/<nama>/SKILL.md. Yang wajib cuma SKILL.md. Empat bagian formula yang membuatnya berguna — yang paling sering dilupakan adalah Pitfalls (kegagalan yang sudah dialami) dan Verification (cara memeriksa benar). Tanpa dua itu skill hanya catatan langkah. Deskripsi frontmatter jangan seadanya: itu yang dibaca agent untuk memutuskan relevan.

23

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
24

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.

25

OAuth penuh — console, perintah, troubleshooting

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

Lima langkah di Console

  • 1. Buat/pilih project — console.cloud.google.com/projectselector2/home/dashboard
  • 2. Aktifkan enam API — console.cloud.google.com/apis/library (Gmail, Calendar, Drive, Sheets, Docs, People)
  • 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 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
otorisasi headless — lima langkahbash
'GSETUP="python ${HERMES_HOME:-$HOME/.hermes}/skills/productivity/google-workspace/scripts/setup.py"'

# 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

Kesalahan yang paling sering

  • Memilih "Web application" — alur paste-the-code tidak akan bekerja
  • Melewati langkah test-user → Error 403: access_denied saat otorisasi
  • Mengaktifkan hanya Gmail API lalu kaget Drive gagal
  • Lupa di project mana OAuth client dibuat
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

Tidak ada presentations — Slides memang tidak tercakup. drive adalah Drive PENUH, bukan drive.file: agent bisa menyentuh file apa pun yang bisa Anda sentuh, termasuk yang dibagikan kepada Anda. Versi setup.py ini tidak bisa mempersempit scope — kalau tidak bisa diterima, pakai akun terpisah. Flag --services dan --format di dokumentasi TIDAK ADA di setup.py terpasang; jalankan $GSETUP --help di VPS sebelum sesi.

Setelah selesaiLokasi
Token, diperbarui otomatis~/.hermes/google_token.json
State OAuth sementara~/.hermes/google_oauth_pending.json
Mencabut izin$GSETUP --revoke
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
26

Perintah tiap surface + gws

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:boss@company.com newer_than:1d"'
'$GAPI gmail search "has:attachment filename:pdf newer_than:7d"'
$GAPI gmail get MESSAGE_ID
'$GAPI gmail send --to user@example.com --subject "Hello" --body "Message text"'
'$GAPI gmail send --to user@example.com --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
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 "alice@co.com,bob@co.com"'
$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 alice@example.com --role reader
$GAPI drive download FILE_ID --output ~/doc.pdf
$GAPI drive delete FILE_ID            # ke trash, bisa dibatalkan
Sheets & Docsbash
'$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"]]\''
$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 — melewati trash). Display name pengirim bisa dikustomisasi, tapi --from dengan ALAMAT berbeda harus terdaftar sebagai Send As alias di Gmail Settings → Accounts.

Skill bawaan Hermesgws
CakupanGmail, Calendar, Drive, Contacts, Sheets, Docs+ Slides, Chat, Admin, Forms, Meet, Tasks, Keep
SlidesTidak adaAda — gws slides
StatusBagian dari HermesBukan produk resmi Google
gws — Slides & discoverybash
gws slides presentations create
gws slides presentations get
gws slides presentations batchUpdate

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\''

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
27

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
28

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.

34

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