vps-hybrid-networking 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -5
- package/bin/install.mjs +17 -0
- package/package.json +1 -1
- package/skills/vps-hybrid-networking/SKILL.md +10 -6
package/README.md
CHANGED
|
@@ -19,7 +19,7 @@ The skill lives in [`skills/vps-hybrid-networking/`](skills/vps-hybrid-networkin
|
|
|
19
19
|
npx skills add AnandaAp/vps-hybrid-networking
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
-
The [skills CLI](https://skills.sh) auto-detects 75+ agents (Claude Code, Codex, Cursor, OpenCode, Gemini CLI, Antigravity, Windsurf, …) and installs the skill into the right folder for each. Add `-g` for a global install, or `--agent <name>` to target one agent.
|
|
22
|
+
The [skills CLI](https://skills.sh) auto-detects 75+ agents (Claude Code, Codex, Cursor, OpenCode, Gemini CLI, Antigravity, Hermes Agent, Windsurf, Cline, …) and installs the skill into the right folder for each. Add `-g` for a global install, or `--agent <name>` to target one agent.
|
|
23
23
|
|
|
24
24
|
### Claude Code — plugin marketplace
|
|
25
25
|
|
|
@@ -57,17 +57,29 @@ Or as an extension (bundles the same skill):
|
|
|
57
57
|
gemini extensions install https://github.com/AnandaAp/vps-hybrid-networking
|
|
58
58
|
```
|
|
59
59
|
|
|
60
|
+
### Hermes Agent (Nous Research)
|
|
61
|
+
|
|
62
|
+
Hermes installs skills straight from GitHub — the identifier is the repo-relative path to the skill folder:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
hermes skills install AnandaAp/vps-hybrid-networking/skills/vps-hybrid-networking
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Hermes security-scans skills on install. You can also register this repo as a reusable source once with `hermes skills tap add AnandaAp/vps-hybrid-networking`.
|
|
69
|
+
|
|
70
|
+
> **Note on the Hermes security scan:** this skill is a root-level server-administration runbook, so Hermes' pattern scanner flags its subject matter (`sudo`, systemd units, files under `/etc`, network tunnels) and hub installs are currently blocked with a "dangerous" verdict. The flagged operations are the setup itself, run on your own server with your own tokens — but review the findings before trusting any skill, including this one. If you have reviewed it and want it anyway, install manually: copy `skills/vps-hybrid-networking/` into your Hermes skills folder (`%LOCALAPPDATA%\hermes\skills\` on Windows, `~/.hermes/skills\` elsewhere) and restart Hermes.
|
|
71
|
+
|
|
60
72
|
### npm / npx installer (this repo's own package)
|
|
61
73
|
|
|
62
74
|
```bash
|
|
63
|
-
npx vps-hybrid-networking@1.0.
|
|
75
|
+
npx vps-hybrid-networking@1.0.2
|
|
64
76
|
```
|
|
65
77
|
|
|
66
|
-
Auto-detects your installed agents and copies the skill into each one's skills folder. Useful flags: `--all`, `--agent claude-code,antigravity`, `--list`, `--dry-run`. (If the npm package is not yet published, clone this repo and run `node bin/install.mjs --all` — it is the same code with the same result.)
|
|
78
|
+
Auto-detects your installed agents and copies the skill into each one's skills folder. Targets: Claude Code, Antigravity, Codex / agents standard, Gemini CLI, OpenCode, Cursor, Hermes Agent, Cline, Roo Code, Goose, Amp, Windsurf, Kiro CLI, Qwen Code, GitHub Copilot, Trae, and Continue. Useful flags: `--all`, `--agent claude-code,antigravity`, `--list`, `--dry-run`. (If the npm package is not yet published, clone this repo and run `node bin/install.mjs --all` — it is the same code with the same result.)
|
|
67
79
|
|
|
68
80
|
### Manual
|
|
69
81
|
|
|
70
|
-
Copy the `skills/vps-hybrid-networking/` folder into your agent's skills directory (e.g. `~/.claude/skills/`, `~/.agents/skills/`, `~/.gemini/config/skills/`). Done — the skill is just files.
|
|
82
|
+
Copy the `skills/vps-hybrid-networking/` folder into your agent's skills directory (e.g. `~/.claude/skills/`, `~/.agents/skills/`, `~/.gemini/config/skills/`, `~/.hermes/skills/` — on Windows, Hermes uses `%LOCALAPPDATA%\hermes\skills\`). Done — the skill is just files.
|
|
71
83
|
|
|
72
84
|
## Installer security
|
|
73
85
|
|
|
@@ -76,7 +88,7 @@ The npm installer is built to be boring and auditable:
|
|
|
76
88
|
- **Zero dependencies** — Node.js standard library only; there is no dependency tree to compromise.
|
|
77
89
|
- **No install hooks** — `package.json` defines no lifecycle scripts, so nothing runs implicitly on `npm install`/`npx`. The installer runs only when you invoke it.
|
|
78
90
|
- **No network, no execution** — the installer never downloads anything and never spawns a process. It only copies the skill files bundled inside the package into a fixed allow-list of well-known agent folders, and it verifies every destination stays inside its allow-listed folder before copying.
|
|
79
|
-
- **Pin the version** (`npx vps-hybrid-networking@1.0.
|
|
91
|
+
- **Pin the version** (`npx vps-hybrid-networking@1.0.2`) if you want reproducible installs, and read [`bin/install.mjs`](bin/install.mjs) — it is short on purpose.
|
|
80
92
|
- Prefer not to run third-party installers at all? Use `npx skills add` (which pulls straight from GitHub) or the manual copy above.
|
|
81
93
|
|
|
82
94
|
## What's inside
|
|
@@ -113,6 +125,7 @@ skills/vps-hybrid-networking/ the skill itself (SKILL.md + scripts/)
|
|
|
113
125
|
.agents/plugins/ Codex marketplace catalog
|
|
114
126
|
plugin.json Agent Plugins standard manifest (Codex/Cursor portable layout)
|
|
115
127
|
gemini-extension.json Gemini CLI extension manifest
|
|
128
|
+
assets/logo.jpg plugin logo (Antigravity Marketplace)
|
|
116
129
|
package.json + bin/install.mjs the zero-dependency npm/npx installer
|
|
117
130
|
```
|
|
118
131
|
|
package/bin/install.mjs
CHANGED
|
@@ -42,6 +42,12 @@ if (!existsSync(join(source, 'SKILL.md'))) {
|
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
const home = homedir();
|
|
45
|
+
// Hermes Agent keeps its home in ~/.hermes on POSIX, but a native Windows
|
|
46
|
+
// install lives in %LOCALAPPDATA%\hermes — resolve per platform.
|
|
47
|
+
const hermesHome = process.platform === 'win32'
|
|
48
|
+
? join(process.env.LOCALAPPDATA ?? join(home, 'AppData', 'Local'), 'hermes')
|
|
49
|
+
: join(home, '.hermes');
|
|
50
|
+
|
|
45
51
|
const TARGETS = {
|
|
46
52
|
'claude-code': { label: 'Claude Code', skillsDir: join(home, '.claude', 'skills'), detectDir: join(home, '.claude') },
|
|
47
53
|
'antigravity': { label: 'Antigravity', skillsDir: join(home, '.gemini', 'config', 'skills'), detectDir: join(home, '.gemini') },
|
|
@@ -49,6 +55,17 @@ const TARGETS = {
|
|
|
49
55
|
'gemini-cli': { label: 'Gemini CLI', skillsDir: join(home, '.gemini', 'skills'), detectDir: join(home, '.gemini') },
|
|
50
56
|
'opencode': { label: 'OpenCode', skillsDir: join(home, '.config', 'opencode', 'skills'), detectDir: join(home, '.config', 'opencode') },
|
|
51
57
|
'cursor': { label: 'Cursor', skillsDir: join(home, '.cursor', 'skills'), detectDir: join(home, '.cursor') },
|
|
58
|
+
'hermes': { label: 'Hermes Agent', skillsDir: join(hermesHome, 'skills'), detectDir: hermesHome },
|
|
59
|
+
'cline': { label: 'Cline', skillsDir: join(home, '.agents', 'skills'), detectDir: join(home, '.cline') },
|
|
60
|
+
'roo': { label: 'Roo Code', skillsDir: join(home, '.roo', 'skills'), detectDir: join(home, '.roo') },
|
|
61
|
+
'goose': { label: 'Goose', skillsDir: join(home, '.config', 'goose', 'skills'), detectDir: join(home, '.config', 'goose') },
|
|
62
|
+
'amp': { label: 'Amp', skillsDir: join(home, '.config', 'agents', 'skills'), detectDir: join(home, '.config', 'amp') },
|
|
63
|
+
'windsurf': { label: 'Windsurf', skillsDir: join(home, '.codeium', 'windsurf', 'skills'), detectDir: join(home, '.codeium') },
|
|
64
|
+
'kiro-cli': { label: 'Kiro CLI', skillsDir: join(home, '.kiro', 'skills'), detectDir: join(home, '.kiro') },
|
|
65
|
+
'qwen-code': { label: 'Qwen Code', skillsDir: join(home, '.qwen', 'skills'), detectDir: join(home, '.qwen') },
|
|
66
|
+
'github-copilot': { label: 'GitHub Copilot', skillsDir: join(home, '.copilot', 'skills'), detectDir: join(home, '.copilot') },
|
|
67
|
+
'trae': { label: 'Trae', skillsDir: join(home, '.trae', 'skills'), detectDir: join(home, '.trae') },
|
|
68
|
+
'continue': { label: 'Continue', skillsDir: join(home, '.continue', 'skills'), detectDir: join(home, '.continue') },
|
|
52
69
|
};
|
|
53
70
|
|
|
54
71
|
function parseArgs(argv) {
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"author":"Ananda Apriliansyah Cahya Utama","bin":{"vps-hybrid-networking":"bin/install.mjs"},"description":"Installer for the vps-hybrid-networking agent skill
|
|
1
|
+
{"author":"Ananda Apriliansyah Cahya Utama","bin":{"vps-hybrid-networking":"bin/install.mjs"},"description":"Installer for the vps-hybrid-networking agent skill \u2014 serves a NAT-blocked VPS via Tailscale + Cloudflare Tunnel + Caddy (DNS-01). Zero dependencies, no install hooks, no network access.","engines":{"node":">=18"},"files":["bin/install.mjs","skills","README.md","LICENSE"],"homepage":"https://github.com/AnandaAp/vps-hybrid-networking#readme","keywords":["agent-skill","claude-code","antigravity","codex","gemini-cli","opencode","cursor","hermes-agent","cline","roo-code","goose","amp","windsurf","kiro-cli","qwen-code","github-copilot","trae","continue","vps","caddy","cloudflare-tunnel","tailscale"],"license":"MIT","name":"vps-hybrid-networking","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/AnandaAp/vps-hybrid-networking.git"},"type":"module","version":"1.0.2"}
|
|
@@ -152,8 +152,12 @@ sudo killall python3
|
|
|
152
152
|
### Stage 2: Private Network Setup via Tailscale
|
|
153
153
|
|
|
154
154
|
```bash
|
|
155
|
-
# 1. Install official
|
|
156
|
-
|
|
155
|
+
# 1. Install Tailscale from its official apt repository (no pipe-to-shell installer).
|
|
156
|
+
# Replace <distro> with ubuntu or debian and <codename> with your
|
|
157
|
+
# release codename (e.g. noble for Ubuntu 24.04, bookworm for Debian 12).
|
|
158
|
+
curl -fsSL https://pkgs.tailscale.com/stable/<distro>/<codename>.noarmor.gpg | sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null
|
|
159
|
+
curl -fsSL https://pkgs.tailscale.com/stable/<distro>/<codename>.tailscale-keyring.list | sudo tee /etc/apt/sources.list.d/tailscale.list
|
|
160
|
+
sudo apt-get update && sudo apt-get install -y tailscale
|
|
157
161
|
|
|
158
162
|
# 2. Connect machine to your Tailnet
|
|
159
163
|
sudo tailscale up --hostname=my-vps --accept-routes
|
|
@@ -282,13 +286,13 @@ sudo apt-get update && sudo apt-get install -y cloudflared
|
|
|
282
286
|
|
|
283
287
|
# 2. Store the tunnel token in a protected file
|
|
284
288
|
sudo mkdir -p /etc/cloudflared
|
|
285
|
-
sudo
|
|
289
|
+
sudo tee /etc/cloudflared/token > /dev/null <<'EOF'
|
|
286
290
|
<YOUR_CLOUDFLARE_TUNNEL_TOKEN>
|
|
287
|
-
EOF
|
|
291
|
+
EOF
|
|
288
292
|
sudo chmod 600 /etc/cloudflared/token
|
|
289
293
|
|
|
290
294
|
# 3. Create Systemd Service File: /etc/systemd/system/cloudflared.service
|
|
291
|
-
sudo
|
|
295
|
+
sudo tee /etc/systemd/system/cloudflared.service > /dev/null <<'EOF'
|
|
292
296
|
[Unit]
|
|
293
297
|
Description=Cloudflare Tunnel client
|
|
294
298
|
After=network-online.target
|
|
@@ -303,7 +307,7 @@ RestartSec=5s
|
|
|
303
307
|
|
|
304
308
|
[Install]
|
|
305
309
|
WantedBy=multi-user.target
|
|
306
|
-
EOF
|
|
310
|
+
EOF
|
|
307
311
|
|
|
308
312
|
# 4. Reload systemd and start the tunnel daemon
|
|
309
313
|
sudo systemctl daemon-reload
|