#!/usr/bin/env bash set -euo pipefail # Lobster AI Skill Installer # Usage: curl -fsSL https://skills.lobsterbio.com | bash # # Installs lobster-use and lobster-dev skills # for your coding agent (Claude Code, Codex, Gemini CLI, OpenClaw). REPO="the-omics-os/lobster" BRANCH="main" BASE_URL="https://raw.githubusercontent.com/${REPO}/${BRANCH}" # Skill source paths in the repo USER_SKILL_PATH="skills/lobster-use" DEV_SKILL_PATH="skills/lobster-dev" # Files to download per skill USER_SKILL_FILES=( "SKILL.md" "references/cli-commands.md" "references/single-cell-workflow.md" "references/bulk-rnaseq-workflow.md" "references/research-workflow.md" "references/visualization.md" "references/agents.md" ) DEV_SKILL_FILES=( "SKILL.md" "references/architecture.md" "references/creating-agents.md" "references/creating-services.md" "references/code-layout.md" "references/testing.md" "references/cli.md" ) # Colors RED='\033[0;31m' GREEN='\033[0;32m' DIM='\033[2m' BOLD='\033[1m' RESET='\033[0m' info() { echo -e "${DIM}$1${RESET}"; } ok() { echo -e "${GREEN}✓${RESET} $1"; } err() { echo -e "${RED}✗${RESET} $1"; } echo "" echo -e "${BOLD}🦞 Lobster AI Skill Installer${RESET}" echo "" # Detect platforms PLATFORMS=() if [ -d "$HOME/.claude" ] || command -v claude &>/dev/null; then PLATFORMS+=("claude") fi if [ -d "$HOME/.agents" ] || command -v codex &>/dev/null; then PLATFORMS+=("codex") fi if [ -d "$HOME/.gemini" ] || command -v gemini &>/dev/null; then PLATFORMS+=("gemini") fi if [ -d "$HOME/.openclaw" ] || command -v openclaw &>/dev/null; then PLATFORMS+=("openclaw") fi if [ ${#PLATFORMS[@]} -eq 0 ]; then info "No coding agent detected. Installing for Claude Code (default)." PLATFORMS+=("claude") fi echo -e "Detected: ${BOLD}${PLATFORMS[*]}${RESET}" echo "" # Map platform to skills directory get_skills_dir() { case "$1" in claude) echo "$HOME/.claude/skills" ;; codex) echo "$HOME/.agents/skills" ;; gemini) echo "$HOME/.gemini/skills" ;; openclaw) echo "$HOME/.openclaw/skills" ;; esac } # Download a single skill install_skill() { local platform="$1" local skill_name="$2" local repo_path="$3" shift 3 local files=("$@") local skills_dir skills_dir="$(get_skills_dir "$platform")" local dest="${skills_dir}/${skill_name}" mkdir -p "${dest}/references" local failed=0 for file in "${files[@]}"; do local url="${BASE_URL}/${repo_path}/${file}" local target="${dest}/${file}" if curl -fsSL "$url" -o "$target" 2>/dev/null; then : # success else failed=1 fi done if [ $failed -eq 0 ]; then ok "Installed ${skill_name} → ${dest}/" return 0 else err "Some files failed for ${skill_name} (check ${BASE_URL}/${repo_path}/)" return 1 fi } # Install both skills for each platform ANY_FAILED=0 for platform in "${PLATFORMS[@]}"; do install_skill "$platform" "lobster-use" "$USER_SKILL_PATH" "${USER_SKILL_FILES[@]}" || ANY_FAILED=1 install_skill "$platform" "lobster-dev" "$DEV_SKILL_PATH" "${DEV_SKILL_FILES[@]}" || ANY_FAILED=1 done echo "" if [ $ANY_FAILED -eq 0 ]; then ok "Your agent now knows how to install, use, and extend Lobster AI" echo "" info "Skills installed:" info " lobster-use — CLI, workflows, analysis patterns" info " lobster-dev — Architecture, agents, services, testing" echo "" info "Open your project in Claude Code / Codex and ask:" echo -e " ${BOLD}\"Analyze the RNA-seq data in ./data/\"${RESET}" else err "Installation failed — could not download skill files." echo "" info "This usually means the lobster repo hasn't been pushed yet," info "or GitHub is temporarily unavailable." echo "" info "Try again: curl -fsSL https://skills.lobsterbio.com | bash" fi echo "" info "Follows the AgentSkills open standard (https://agentskills.io)" echo ""