KeiSeiKit-1.0/skills/vm-provision/phase-1-select-provider.md
Parfii-bot a4e667de10 KeiSeiKit-public — clean state
Single-commit clean baseline after security scrub of niche-tells,
project codenames, internal jargon, and contributor-email leaks.

Contents:
- 100 Rust crates (_primitives/_rust/)
- 37 agent manifests (_manifests/) + generated specs (_generated/)
- 67 user-invocable skills (skills/)
- 33 hooks (hooks/)
- Composition blocks (_blocks/)
- Documentation (docs/, README.md)
- TS adapter packages (_ts_packages/)
- Assembler (_assembler/)
- Roles (_roles/)
- Templates (_templates/)
- Forgejo CI (.forgejo/)

Author: Denis Parfionovich <info@greendragon.info>

License: see LICENSE.
2026-05-01 12:09:03 +08:00

3.6 KiB

Phase 1 — Select Provider + Region + Plan

Goal: lock PROVIDER, REGION, PLAN, ARCH via two AskUserQuestion calls. No provisioning yet — this is pure decision. Verify criterion: all four variables set; provider credentials (one env-var name) identified in ~/.claude/secrets/.env.


1.a — First AskUserQuestion (4 options max)

Provider? (single-select, stored as PROVIDER):

  • Hetzner Cloud — cheapest EU, CX22 x86 / CAX11 ARM64 both €3.79/mo [VERIFIED _blocks/deploy-hetzner-cloud.md]. Requires HCLOUD_TOKEN.
  • Vultr — broad region list, HF compute, $5-10/mo tiers. Requires VULTR_API_KEY.
  • DigitalOcean — strong US presence, simple API. Requires DIGITALOCEAN_TOKEN. Uses deploy-vps-generic.md cloud-init.
  • UpCloud — preferred for RU-routed workloads (Finnish ASN). Requires UPCLOUD_USERNAME + UPCLOUD_PASSWORD.

If the intent argument mentions a provider already, pre-select it.

Credential check BEFORE the click: read ~/.claude/secrets/.env; if the chosen provider's env var is absent, surface a ONE-line remediation:

"Provider X needs <VAR> in ~/.claude/secrets/.env. Add it and re-invoke — I don't accept tokens pasted into chat (RULE 0.8)."

Do NOT proceed until the token is in place.


1.b — Second AskUserQuestion (region + plan + arch, 3 Q's)

Send three questions in one AskUserQuestion call. Options are provider-specific; generate them from the following matrix (do NOT hallucinate codes — re-verify against the provider doc link on each run):

Region (stored as REGION):

  • Hetzner: fsn1 (Falkenstein DE), nbg1 (Nürnberg DE), hel1 (Helsinki FI), ash (Ashburn US), hil (Hillsboro US), sin (Singapore) [VERIFIED https://docs.hetzner.com/cloud/general/locations].
  • Vultr: ams (Amsterdam), fra (Frankfurt), ewr (Newark), lax (LA), nrt (Tokyo), sgp (Singapore).
  • DigitalOcean: nyc1/2/3, sfo3, ams3, fra1, lon1, sgp1.
  • UpCloud: de-fra1, fi-hel1, fi-hel2, us-nyc1, sg-sin1.

Pick the closest region to the user's stated audience. Prefer the EU when the user doesn't specify (lower GDPR exposure).

Plan (stored as PLAN):

  • Hetzner x86: cx22 (2 vCPU / 4 GB / 40 GB / €3.79/mo), cx32 (4 vCPU / 8 GB / €6.79/mo).
  • Hetzner ARM: cax11 (2 vCPU / 4 GB / €3.79/mo), cax21 (4 vCPU / 8 GB / €6.49/mo).
  • Vultr: vc2-1c-1gb ($6/mo), vc2-2c-4gb ($24/mo), vhp-1c-2gb-amd ($14/mo).
  • DigitalOcean: s-1vcpu-1gb ($6/mo), s-2vcpu-2gb ($18/mo).
  • UpCloud: 1xCPU-1GB, 2xCPU-2GB.

Quote only the plans you can verify against the provider's live pricing at call-time; do not embed stale pricing as fact.

Arch (stored as ARCH):

  • x86_64 — default; works with every Debian 12 image.
  • arm64 — Hetzner cax*, AWS Graviton, Oracle Ampere. ~25% cheaper. Rust builds run natively; Node/Python binary wheels may need extra install steps.

1.c — Verify criterion

Before moving to Phase 2:

  • PROVIDER, REGION, PLAN, ARCH all set.
  • The provider credential env-var EXISTS in ~/.claude/secrets/.env (we only read the env-var name, never the value).
  • The user clicked OK, not "back".

Emit one-liner:

Phase 1 done: PROVIDER=<x> REGION=<y> PLAN=<z> ARCH=<a>. Credentials ref: $<VAR>.

Proceed to Phase 2.


1.d — Constructive-fail paths

If the user says "I don't know":

  • (A) Default to Hetzner CX22 fsn1 x86 (cheapest EU). 1-click.
  • (B) Clone an existing project's provider (ask which project, pattern-match from ~/.claude/projects/*/memory/*.md).
  • (C) Defer provisioning — emit a decision memo and exit cleanly.

Never pick silently.