Install
$ agentstack add skill-sunnnybala-rstack-setup-skill ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Preamble (run first)
# --- GENERATED PREAMBLE START ---
_PROJECT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
if ! git rev-parse --show-toplevel >/dev/null 2>&1; then
echo "WARNING: Not inside a git repository. Files will be written to $(pwd)."
fi
mkdir -p ~/.rstack/sessions ~/.rstack/analytics "$_PROJECT_ROOT/.rstack"
touch ~/.rstack/sessions/"$PPID"
find ~/.rstack/sessions -mmin +120 -type f -delete 2>/dev/null || true
_SESSIONS=$(find ~/.rstack/sessions -mmin -120 -type f 2>/dev/null | wc -l | tr -d ' ')
_RSTACK_DIR="$(cd "$(dirname "$0")/.." 2>/dev/null && pwd || echo "$HOME/.claude/skills/rstack")"
_RSTACK_CONFIG="$_RSTACK_DIR/bin/rstack-config"
_UPD=$("$_RSTACK_DIR/bin/rstack-update-check" 2>/dev/null || true)
[ -n "$_UPD" ] && echo "$_UPD" || true
_VENUE=$("$_RSTACK_CONFIG" get venue 2>/dev/null || echo "arxiv")
_COMPUTE=$("$_RSTACK_CONFIG" get compute_preferred 2>/dev/null || echo "modal")
_PROACTIVE=$("$_RSTACK_CONFIG" get proactive 2>/dev/null || echo "true")
_TEL=$("$_RSTACK_CONFIG" get telemetry 2>/dev/null || echo "off")
_TEL_PROMPTED=$([ -f ~/.rstack/.telemetry-prompted ] && echo "yes" || echo "no")
_BRANCH=$(git branch --show-current 2>/dev/null || echo "unknown")
echo "PROJECT_ROOT: $_PROJECT_ROOT"
echo "BRANCH: $_BRANCH"
echo "VENUE: $_VENUE"
echo "COMPUTE: $_COMPUTE"
echo "PROACTIVE: $_PROACTIVE"
if [ ! -f ~/.rstack/.setup-complete ]; then
echo "NEEDS_SETUP"
fi
_TEL_START=$(date +%s)
_SESSION_ID="$$-$(date +%s)"
echo "TELEMETRY: ${_TEL:-off}"
echo "TEL_PROMPTED: $_TEL_PROMPTED"
if [ "$_TEL" != "off" ]; then
echo '{"skill":"setup","ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","repo":"'$(basename "$(git rev-parse --show-toplevel 2>/dev/null)" 2>/dev/null || echo "unknown")'"}' >> ~/.rstack/analytics/skill-usage.jsonl 2>/dev/null || true
fi
if [ "$_TEL" != "off" ]; then
echo '{"skill":"setup","ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","session_id":"'"$_SESSION_ID"'","rstack_version":"'"$(cat "$_RSTACK_DIR/VERSION" 2>/dev/null | tr -d "[:space:]" || echo "unknown")"'"}' > ~/.rstack/analytics/.pending-"$_SESSION_ID" 2>/dev/null || true
fi
for _PF in $(find ~/.rstack/analytics -maxdepth 1 -name '.pending-*' 2>/dev/null); do
if [ -f "$_PF" ]; then
_PF_BASE="$(basename "$_PF")"
_PF_SID="${_PF_BASE#.pending-}"
[ "$_PF_SID" = "$_SESSION_ID" ] && continue
if [ "$_TEL" != "off" ] && [ -x "$_RSTACK_DIR/bin/rstack-telemetry-log" ]; then
"$_RSTACK_DIR/bin/rstack-telemetry-log" --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true
fi
rm -f "$_PF" 2>/dev/null || true
fi
break
done
eval "$("$_RSTACK_DIR/bin/rstack-slug" 2>/dev/null)" 2>/dev/null || true
echo "SLUG: ${SLUG:-unknown}"
echo "=== RStack Setup ==="
# --- GENERATED PREAMBLE END ---
If output shows UPGRADE_AVAILABLE : read rstack-upgrade/SKILL.md and follow the "Inline Upgrade Flow". Then continue with this skill. If output shows JUST_UPGRADED : tell user "Running RStack v{to} (just updated!)" and continue.
If TEL_PROMPTED is no: Ask the user about telemetry. Use AskUserQuestion:
> Help RStack get better! Community mode shares usage data (which skills you use, > how long they take, crash info) with a stable device ID so we can track trends > and fix bugs faster. No code, file paths, or repo names are ever sent. > Change anytime with rstack-config set telemetry off.
Options:
- A) Help RStack get better! (recommended)
- B) No thanks
If A: run rstack-config set telemetry community
If B: ask a follow-up: > How about anonymous mode? Just a counter that helps us know if anyone's out there.
Options:
- A) Sure, anonymous is fine
- B) No thanks, fully off
If B→A: run rstack-config set telemetry anonymous If B→B: run rstack-config set telemetry off
Always run:
touch ~/.rstack/.telemetry-prompted
This only happens once. If TEL_PROMPTED is yes, skip this entirely.
Step 1: Detect Environment
Run the compute detection script:
~/.claude/skills/rstack/bin/rstack-compute-detect
Note the output. This shows what's installed and what's authenticated.
Step 2: Configure Modal (Primary Compute)
Check if Modal is installed and authenticated from the detection output.
If Modal NOT installed: Tell user: "Modal is the primary compute provider for running experiments on cloud GPUs."
Use AskUserQuestion: > Modal is not installed. It's needed for /experiment to run training on cloud GPUs. > Install now? > > A) Yes — install Modal (pip install modal) > B) Skip — I'll use local GPU only > C) Skip — I'll install it later
If A: Run pip install modal. Then run modal token new — this opens a browser for authentication. Wait for user to complete. Verify with modal token info.
If Modal installed but NOT authenticated: Tell user: "Modal is installed but not authenticated." Run: Tell the user to execute modal token new in their terminal (or type ! modal token new in Claude Code's prompt to run it in-session). Verify with modal token info.
If Modal installed AND authenticated: Tell user: "Modal is configured. Default GPU will be A100."
Save status:
~/.claude/skills/rstack/bin/rstack-config set modal_installed true
~/.claude/skills/rstack/bin/rstack-config set modal_authenticated true
~/.claude/skills/rstack/bin/rstack-config set modal_default_gpu A100
Step 3: Configure LaTeX Compiler
Check if tectonic or pdflatex is available from the detection output.
If neither installed: Use AskUserQuestion: > No LaTeX compiler found. Tectonic is recommended (single binary, auto-downloads packages). > Install now? > > A) Yes — install tectonic > B) Skip — I'll install it later (/write-paper will remind you)
If A:
- macOS:
brew install tectonic - Linux: Download binary from https://tectonic-typesetting.github.io/
- Windows/WSL: Download binary or
cargo install tectonicif Rust is installed
Save status:
~/.claude/skills/rstack/bin/rstack-config set latex_compiler tectonic
If already installed: Note which compiler and save to config.
Step 4: Set Default Venue
Use AskUserQuestion: > Default venue for paper formatting? > > A) arXiv (preprint, no page limit) — recommended for v1 > B) I'll choose per paper
Save choice:
~/.claude/skills/rstack/bin/rstack-config set venue arxiv
Step 5: Mark Complete
touch ~/.rstack/.setup-complete
touch ~/.rstack/.providers-configured
Show summary:
=== RStack Setup Complete ===
Compute: Modal (authenticated, default GPU: A100)
LaTeX: tectonic
Venue: arXiv
Config: ~/.rstack/config.yaml
Run /research to start your first project.
Run /lit-review, /experiment, or /write-paper individually.
Re-running Setup
If the user runs /setup again:
- Re-detect everything (providers may have changed)
- Show current config and ask if they want to change anything
- Don't re-prompt for things already configured unless the user asks
Telemetry (run last)
After the skill workflow completes (success, error, or abort), log the telemetry event.
# --- GENERATED EPILOGUE START ---
_TEL_END=$(date +%s)
_TEL_DUR=$(( _TEL_END - _TEL_START ))
rm -f ~/.rstack/analytics/.pending-"$_SESSION_ID" 2>/dev/null || true
if [ "$_TEL" != "off" ]; then
echo '{"skill":"setup","duration_s":"'"$_TEL_DUR"'","outcome":"OUTCOME","session":"'"$_SESSION_ID"'","ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'"}' >> ~/.rstack/analytics/skill-usage.jsonl 2>/dev/null || true
fi
if [ "$_TEL" != "off" ] && [ -x "$_RSTACK_DIR/bin/rstack-telemetry-log" ]; then
"$_RSTACK_DIR/bin/rstack-telemetry-log" \
--skill "setup" --duration "$_TEL_DUR" --outcome "OUTCOME" \
--session-id "$_SESSION_ID" 2>/dev/null &
fi
# --- GENERATED EPILOGUE END ---
Replace OUTCOME with success/error/abort based on the workflow result.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: sunnnybala
- Source: sunnnybala/Rstack
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.