Switch to user-managed npm for AI coding tools
- Remove manual /usr/local/bin/claude install - Remove claude symlink setup from learner-add.sh - Update onboarding docs with npm install instructions - Users choose their AI coder: claude, opencode, gemini, codex 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
21d3038aca
commit
1b1a91f9cb
|
|
@ -24,6 +24,7 @@
|
|||
{"id":"ops-jrz1-9x8","title":"Claude CLI update mechanism","description":"Claude Code CLI is manually installed to /usr/local/bin/claude.\n\n## Current state\n- Installed via: curl -fsSL https://claude.ai/install.sh | bash\n- Copied to /usr/local/bin/claude\n- No automatic updates\n\n## Options\n1. Periodic manual update (run install script again)\n2. Systemd timer to check for updates\n3. Package via nix (would need custom derivation)\n\n## Acceptance criteria\nDocument the update process at minimum.","status":"open","priority":3,"issue_type":"task","created_at":"2026-01-02T16:46:03.908575951-08:00","created_by":"dan","updated_at":"2026-01-02T16:46:03.908575951-08:00"}
|
||||
{"id":"ops-jrz1-av0","title":"Configure wildcard DNS and ACME cert","description":"Set up *.code.clarun.xyz DNS record and wildcard SSL cert via ACME. Depends on subdomain routing decision (kg0).","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-05T17:16:54.387356964-08:00","updated_at":"2025-12-05T17:16:54.387356964-08:00","dependencies":[{"issue_id":"ops-jrz1-av0","depends_on_id":"ops-jrz1-3so","type":"parent-child","created_at":"2025-12-05T17:17:36.34918436-08:00","created_by":"daemon","metadata":"{}"},{"issue_id":"ops-jrz1-av0","depends_on_id":"ops-jrz1-kg0","type":"blocks","created_at":"2025-12-05T17:17:38.676800677-08:00","created_by":"daemon","metadata":"{}"}]}
|
||||
{"id":"ops-jrz1-ayl","title":"Rename sna-instagram-bot to something memorable","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-08T16:54:31.223265094-08:00","updated_at":"2025-12-08T16:54:31.223265094-08:00"}
|
||||
{"id":"ops-jrz1-b09","title":"Research: Forgejo backup strategy","description":"Consider backup strategy for the Forgejo instance.\n\n## Questions\n- What data needs backing up? (repos, issues, users, config)\n- Where to back up to? (off-site, object storage, etc.)\n- Frequency?\n- Restore procedure?\n\n## Context\nForgejo runs on ops-jrz1 at :3000, stores git repos and metadata.","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-02T19:01:55.854723242-08:00","created_by":"dan","updated_at":"2026-01-02T19:01:55.854723242-08:00"}
|
||||
{"id":"ops-jrz1-b8v","title":"Enable nix-ld for VS Code Remote SSH","description":"VS Code Remote-SSH requires nix-ld to run the VS Code Server on NixOS.\n\n## Status\n- [x] Config added to hosts/ops-jrz1.nix\n- [x] nix flake check passed\n- [ ] Deploy to server\n\n## Config Added\n```nix\nprograms.nix-ld.enable = true;\nprograms.nix-ld.libraries = with pkgs; [\n stdenv.cc.cc.lib\n zlib\n openssl\n];\n```\n\n## Blocks\n- VS Code Remote-SSH (won't work without this)\n- Testing Claude Code extension over Remote-SSH\n- JetBrains Gateway (same issue)\n\n## Deploy Command\n```bash\nnixos-rebuild switch --flake .#ops-jrz1 --target-host root@ops-jrz1 --build-host localhost\n```","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-30T22:24:15.465531482-05:00","created_by":"dan","updated_at":"2026-01-02T10:22:07.3354851-08:00","closed_at":"2026-01-02T10:22:07.3354851-08:00","close_reason":"Deployed - nix-ld active at /lib64/ld-linux-x86-64.so.2"}
|
||||
{"id":"ops-jrz1-bbn","title":"Research: Resource limits and quotas","description":"Should we limit CPU/memory/disk per learner?\n\n## Current state\n- No limits configured\n- Single VPS shared by all users\n- 2GB RAM, 1 vCPU (Vultr $6 tier?)\n\n## Options\n1. **No limits** - Trust learners, monitor manually\n2. **Systemd slices** - cgroups for user sessions\n3. **Disk quotas** - Limit ~/\n4. **ulimits** - Process limits\n\n## Questions\n- What resources does a typical dev session use?\n- What about `go build` or `npm install`?\n- Is this premature optimization?","status":"open","priority":3,"issue_type":"task","created_at":"2026-01-02T12:27:34.884865507-08:00","created_by":"dan","updated_at":"2026-01-02T12:27:34.884865507-08:00"}
|
||||
{"id":"ops-jrz1-bhk","title":"Add disk quotas for user workspaces","description":"User could fill host disk via /var/lib/vscode/\u003cuser\u003e/. Add per-directory quotas or monitoring/alerting on disk usage.","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-05T15:32:41.199417226-08:00","updated_at":"2025-12-28T00:05:44.7635372-05:00","closed_at":"2025-12-28T00:05:44.7635372-05:00","close_reason":"Parent epic cancelled - browser-based dev approach abandoned","dependencies":[{"issue_id":"ops-jrz1-bhk","depends_on_id":"ops-jrz1-3so","type":"parent-child","created_at":"2025-12-05T17:05:47.309592029-08:00","created_by":"daemon","metadata":"{}"}]}
|
||||
|
|
|
|||
|
|
@ -28,22 +28,27 @@ Host dev-server
|
|||
ssh dev-server
|
||||
```
|
||||
|
||||
### 3. Authenticate Claude (first time only)
|
||||
### 3. Install your AI coding tool
|
||||
|
||||
```bash
|
||||
claude
|
||||
npm install -g @anthropic-ai/claude-code # or gemini-cli, codex
|
||||
```
|
||||
|
||||
This will show a URL like `http://localhost:8080/...`. Open it in your browser, sign in with your Claude account, and the token flows back automatically.
|
||||
### 4. Authenticate (first time only)
|
||||
|
||||
```bash
|
||||
claude auth # Opens browser for OAuth
|
||||
```
|
||||
|
||||
## Your First Bot
|
||||
|
||||
```bash
|
||||
mkdir ~/mybot && cd ~/mybot
|
||||
claude "create a python slack bot using slack-bolt that responds 'Hello!' when someone says hello"
|
||||
# or: opencode, gemini, codex - whichever you installed
|
||||
```
|
||||
|
||||
Claude will:
|
||||
Your AI coder will:
|
||||
1. Create the bot code
|
||||
2. You review and run it: `python bot.py`
|
||||
3. Test in Slack - say "hello" and see it respond
|
||||
|
|
@ -54,9 +59,25 @@ Claude will:
|
|||
|------|---------|
|
||||
| Python | `python3` |
|
||||
| Package manager | `uv add slack-bolt` |
|
||||
| Claude AI | `claude "your prompt"` |
|
||||
| opencode | `opencode` (pre-installed) |
|
||||
| Install more tools | `nix profile install nixpkgs#go` |
|
||||
|
||||
### AI Coding Tools (install your choice)
|
||||
|
||||
```bash
|
||||
# Claude Code
|
||||
npm install -g @anthropic-ai/claude-code
|
||||
claude auth # then: claude "your prompt"
|
||||
|
||||
# Google Gemini
|
||||
npm install -g @google/gemini-cli
|
||||
gemini
|
||||
|
||||
# OpenAI Codex
|
||||
npm install -g @openai/codex
|
||||
codex
|
||||
```
|
||||
|
||||
## Slack Tokens
|
||||
|
||||
Already configured in your environment:
|
||||
|
|
@ -77,8 +98,9 @@ uv add slack-bolt
|
|||
# Run your bot
|
||||
python bot.py
|
||||
|
||||
# Get Claude's help
|
||||
# Get AI help (whichever you installed)
|
||||
claude "add a dice roll command to my bot"
|
||||
opencode "add a dice roll command"
|
||||
|
||||
# Install Go (example)
|
||||
nix profile install nixpkgs#go
|
||||
|
|
@ -87,7 +109,7 @@ go version
|
|||
|
||||
## Need Help?
|
||||
|
||||
- Claude: `claude "how do I..."`
|
||||
- Your AI coder: `claude "how do I..."` / `opencode` / `gemini`
|
||||
- Slack Bolt docs: https://slack.dev/bolt-python/
|
||||
|
||||
---
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@
|
|||
# Creates:
|
||||
# - Unix user account with SSH key
|
||||
# - Adds to learners group (Slack token access)
|
||||
# - Sets up claude CLI symlink
|
||||
# - Outputs onboarding instructions
|
||||
|
||||
set -euo pipefail
|
||||
|
|
@ -80,12 +79,6 @@ create_user() {
|
|||
echo '# Slack bot development tokens' >> "/home/$username/.bashrc"
|
||||
echo 'source /etc/slack-learner.env' >> "/home/$username/.bashrc"
|
||||
|
||||
# Set up ~/.local/bin with claude symlink
|
||||
local local_bin="/home/$username/.local/bin"
|
||||
mkdir -p "$local_bin"
|
||||
ln -sf /usr/local/bin/claude "$local_bin/claude"
|
||||
chown -R "$username:users" "/home/$username/.local"
|
||||
|
||||
log_info "User created with SSH access"
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue