[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71BB6N1EJDAMAWAF0FSGFRR":3,"skill-same:01M71BB6N1EJDAMAWAF0FSGFRR":76},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":26,"publishedAt":46,"linkOnly":47,"markdownContent":48,"markdownBody":49,"frontMatter":50,"refName":53,"commitSha":54,"skillDirectory":55,"forksCount":56,"repositoryHtmlUrl":57,"repositoryHomepageUrl":6,"ownerHtmlUrl":58,"ownerBlogUrl":59,"ownerDescription":60,"updatedAt":61,"install":62,"resources":75},"01M71BB6N1EJDAMAWAF0FSGFRR","start",null,"Starts the full MCP stack: LiteLLM proxy + Docker services (Hindsight, Atlassian, Google Workspace) + skills-manager + notebooklm. All services connect directly — no proxy. Use \u002Fstart at the beginning of any session where MCP tools are needed, or when any service is stopped. LiteLLM must start before Docker — Hindsight depends on it at startup.","Wizarck\u002Fnexandro","Wizarck","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F23051550?v=4","01M71B3AAVR67GRWFV5ZXXZP31","arturo6ramirez","01M71B3ABYG1BFNXHX4KZ3PPK6",2,"AGPL-3.0","https:\u002F\u002Fgithub.com\u002FWizarck\u002Fnexandro\u002Fblob\u002Fmaster\u002Fskills\u002Fstart\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[5,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],"when","startup","google","notebooklm","at","workspace","services","haiku","stack","Bash","connect","use","MCP","litellm","session","docker","proxy","google workspace","hindsight","2026-11-10 10:12:30",false,"---\nname: start\ndescription: >\n  Starts the full MCP stack: LiteLLM proxy + Docker services (Hindsight, Atlassian, Google Workspace)\n  + skills-manager + notebooklm. All services connect directly — no proxy.\n  Use \u002Fstart at the beginning of any session where MCP tools are needed, or when any service is stopped.\n  LiteLLM must start before Docker — Hindsight depends on it at startup.\nargument-hint: \"\"\nmodel: haiku\nallowed-tools: Bash\n---\n\n# Start — MCP Stack Launcher\n\nEnsures the full MCP stack is running:\n- **LiteLLM proxy** at `http:\u002F\u002Flocalhost:4000` (HOST) — Claude Haiku gateway for Hindsight\n- **Docker stack** (Hindsight :8888, atlassian-marlink :9000, atlassian-geeplo :9001, google-workspace-arturo :9003, google-workspace-palafito :9004)\n- **skills-manager server** at `http:\u002F\u002Flocalhost:9002` (Python on HOST)\n- **notebooklm server** at `http:\u002F\u002Flocalhost:9005` (Python on HOST)\n\n**Start order matters**: LiteLLM → Docker (Hindsight calls LiteLLM on `verify_connection` at startup).\n\n## Steps\n\n### Step 1 — Check if stack is already running\n\n```bash\nHINDSIGHT=$(curl -s --max-time 1 -o \u002Fdev\u002Fnull -w \"%{http_code}\" http:\u002F\u002Flocalhost:8888\u002Fhealth 2>\u002Fdev\u002Fnull)\nSKILLS_MGR=$(curl -s --max-time 1 -o \u002Fdev\u002Fnull -w \"%{http_code}\" http:\u002F\u002Flocalhost:9002 2>\u002Fdev\u002Fnull)\nLITELLM=$(curl -s --max-time 1 -o \u002Fdev\u002Fnull -w \"%{http_code}\" http:\u002F\u002Flocalhost:4000\u002Fhealth 2>\u002Fdev\u002Fnull)\n```\n\n- Hindsight != 000 AND skills_mgr != 000 AND litellm != 000 → stack is active. Print status (Step 9 format) and stop.\n\n### Step 2 — Resolve paths and load secrets\n\nThis must run before LiteLLM and before Docker — both need secrets and paths.\n\n```bash\n# Resolve ONEDRIVE_PATH\nif [ -z \"$ONEDRIVE_PATH\" ]; then\n  DEVICE_JSON=\"$USERPROFILE\u002F.claude\u002Feligia\u002Flocal_device.json\"\n  if [ -f \"$DEVICE_JSON\" ]; then\n    export ONEDRIVE_PATH=$(python -c \"import json; print(json.load(open('$DEVICE_JSON'))['onedrive_path'])\")\n  else\n    [ -n \"$ONEDRIVE\" ] && export ONEDRIVE_PATH=\"$ONEDRIVE\"\n    if [ -z \"$ONEDRIVE_PATH\" ]; then\n      for _od in \"$USERPROFILE\u002FOneDrive\" \"$USERPROFILE\u002FOneDrive - UNITAS\" \"$USERPROFILE\u002FOneDrive - Personal\"; do\n        [ -d \"$_od\u002F.eligia\" ] && export ONEDRIVE_PATH=\"$_od\" && break\n      done\n    fi\n    [ -z \"$ONEDRIVE_PATH\" ] && echo \"ERROR: ONEDRIVE_PATH no encontrada. Ejecuta install-eligia.bat primero.\" && exit 1\n    echo \"WARNING: ONEDRIVE_PATH resuelto por fallback: $ONEDRIVE_PATH (ejecuta install-eligia.bat para persistir)\"\n  fi\nfi\n\n# Resolve ELIGIA_DIR\nif [ -z \"$ELIGIA_DIR\" ]; then\n  DEVICE_JSON=\"$USERPROFILE\u002F.claude\u002Feligia\u002Flocal_device.json\"\n  if [ -f \"$DEVICE_JSON\" ]; then\n    export ELIGIA_DIR=$(python -c \"import json; print(json.load(open('$DEVICE_JSON'))['eligia_dir'])\")\n  else\n    export ELIGIA_DIR=\"${ONEDRIVE_PATH}\u002F.eligia\"\n    echo \"WARNING: ELIGIA_DIR resuelto por fallback: $ELIGIA_DIR\"\n  fi\nfi\n\nSECRETS=\"${ONEDRIVE_PATH}\u002F.eligia\u002Fsecrets.env\"\nAGE_KEY=\"$USERPROFILE\u002F.config\u002Fsops\u002Fage\u002Fkeys.txt\"\n\nif [ ! -f \"$SECRETS\" ]; then\n  echo \"ERROR: $SECRETS no encontrado. Verifica que OneDrive esté sincronizado.\"\n  exit 1\nfi\n\nset -a\nsource \u003C(SOPS_AGE_KEY_FILE=\"$AGE_KEY\" sops --input-type dotenv --output-type dotenv --decrypt \"$SECRETS\" | grep -v '^#')\nset +a\n```\n\n### Step 3 — Start LiteLLM proxy (if not running)\n\n```bash\ncurl -s --max-time 1 http:\u002F\u002Flocalhost:4000\u002Fhealth > \u002Fdev\u002Fnull 2>&1\n```\n\n- Returns any HTTP code → already running, skip.\n- Fails \u002F empty → start it:\n\n```bash\nLITELLM=$(which litellm 2>\u002Fdev\u002Fnull || echo \"$USERPROFILE\u002FAppData\u002FRoaming\u002FPython\u002FPython313\u002FScripts\u002Flitellm\")\nPYTHONIOENCODING=utf-8 nohup \"$LITELLM\" --config \"${ONEDRIVE_PATH}\u002F.eligia\u002Fstack\u002Flitellm_config.yaml\" --port 4000 > \u002Ftmp\u002Flitellm.log 2>&1 &\nsleep 6\n```\n\nVerify: `curl -s --max-time 3 -o \u002Fdev\u002Fnull -w \"%{http_code}\" http:\u002F\u002Flocalhost:4000\u002Fhealth`\n- Any response → running.\n- No response → print `ERROR: LiteLLM no arrancó. Revisa: \u002Ftmp\u002Flitellm.log` and stop.\n\n### Step 4 — Check if Docker daemon is running\n\n```bash\ndocker info 2>&1\n```\n\n- Success → Docker is running. Skip to Step 6.\n- Failure → Docker Desktop is closed. Continue to Step 5.\n\n### Step 5 — Start Docker Desktop\n\n```bash\ncmd \u002Fc start \"\" \"C:\\Program Files\\Docker\\Docker\\Docker Desktop.exe\"\n```\n\nPoll until Docker daemon responds (max 60s, check every 5s):\n\n```bash\nfor i in $(seq 1 12); do\n  docker info 2>&1 | grep -q \"Server Version\" && break\n  sleep 5\ndone\n```\n\nIf timeout reached without success, print:\n```\nERROR: Docker Desktop no respondió en 60s.\nAbre Docker Desktop manualmente y vuelve a ejecutar \u002Fstart.\n```\nThen stop.\n\n### Step 6 — Deploy Docker stack\n\n```bash\nCOMPOSE=\"${ONEDRIVE_PATH}\u002F.eligia\u002Fstack\u002Fdocker-compose.yml\"\ndocker compose -f \"$COMPOSE\" up -d --remove-orphans\n```\n\nWait 5 seconds, verify Hindsight is up:\n\n```bash\ncurl -s --max-time 3 -o \u002Fdev\u002Fnull -w \"%{http_code}\" http:\u002F\u002Flocalhost:8888\u002Fhealth\n```\n\n- Any response → running.\n- No response → print `ERROR: Hindsight no arrancó. Revisa: docker logs hindsight` and stop.\n\n### Step 7 — Start skills-manager MCP server (if not running)\n\n```bash\ncurl -s --max-time 1 http:\u002F\u002Flocalhost:9002 > \u002Fdev\u002Fnull 2>&1\n```\n\n- Returns any HTTP code → already running, skip.\n- Fails \u002F empty → start it:\n\n```bash\npython -c \"import websockets\" 2>\u002Fdev\u002Fnull || pip install \"websockets\" -q\nnohup python \"$USERPROFILE\u002F.skills-manager\u002Fserver.py\" > \u002Fdev\u002Fnull 2>&1 &\nsleep 3\n```\n\nVerify: `curl -s --max-time 2 -o \u002Fdev\u002Fnull -w \"%{http_code}\" http:\u002F\u002Flocalhost:9002`\n- Any response → running.\n- No response → print `ERROR: skills-manager server no arrancó. Ejecuta manualmente: python ~\u002F.skills-manager\u002Fserver.py`\n\n### Step 8 — Start paperclip-mcp server (if not running)\n\n```bash\ncurl -s --max-time 1 http:\u002F\u002Flocalhost:9011\u002Fmcp > \u002Fdev\u002Fnull 2>&1\n```\n\n- Returns any HTTP code → already running, skip.\n- Fails \u002F empty → start it:\n\n```bash\npython -c \"import paperclip_mcp\" 2>\u002Fdev\u002Fnull || pip install -e \"$USERPROFILE\u002F.paperclip\u002Fmcp-server\" -q\n\nPAPERCLIP_API_KEY=\"$PAPERCLIP_API_KEY\" \\\nPAPERCLIP_COMPANY_ID=\"$PAPERCLIP_COMPANY_ID\" \\\nPAPERCLIP_BASE_URL=\"${PAPERCLIP_BASE_URL:-http:\u002F\u002Flocalhost:3100\u002Fapi}\" \\\nnohup paperclip-mcp > \u002Ftmp\u002Fpaperclip-mcp.log 2>&1 &\nsleep 3\n```\n\nVerify: `curl -s --max-time 2 -o \u002Fdev\u002Fnull -w \"%{http_code}\" http:\u002F\u002Flocalhost:9011\u002Fmcp`\n- Any response → running.\n- No response → print `ERROR: paperclip-mcp no arrancó. Revisa: \u002Ftmp\u002Fpaperclip-mcp.log`\n\n### Step 9 — Start notebooklm MCP server (if not running)\n\n\n```bash\ncurl -s --max-time 1 http:\u002F\u002Flocalhost:9005 > \u002Fdev\u002Fnull 2>&1\n```\n\n- Returns any HTTP code → already running, skip.\n- Fails \u002F empty → ensure deps and start:\n\n```bash\npython -c \"import notebooklm\" 2>\u002Fdev\u002Fnull || pip install \"notebooklm-py[browser]\" fastmcp -q\n\nexport NOTEBOOKLM_HOME=\"${ELIGIA_DIR}\u002Fdata\u002Fnotebooklm-py\"\nexport NOTEBOOKLM_DEFAULT_NOTEBOOK=\"4752df21-5550-4d55-924a-540ec2a82c3f\"\nnohup python \"$USERPROFILE\u002F.claude\u002Fnotebooklm-server\u002Fserver.py\" > \u002Ftmp\u002Fnotebooklm.log 2>&1 &\nsleep 3\n```\n\nVerify: `curl -s --max-time 5 -o \u002Fdev\u002Fnull -w \"%{http_code}\" http:\u002F\u002Flocalhost:9005\u002Fmcp\u002F`\n- Any response → running.\n- No response → print `ERROR: notebooklm server no arrancó. Revisa: \u002Ftmp\u002Fnotebooklm.log`\n\n#### Setup inicial (nueva máquina — una vez)\n\nAuth se almacena como cookies en `$ELIGIA_DIR\u002Fdata\u002Fnotebooklm-py\u002F` (local, gitignored).\n\n```bash\nexport NOTEBOOKLM_HOME=\"${ELIGIA_DIR}\u002Fdata\u002Fnotebooklm-py\"\nnotebooklm auth   # Abre browser → login con Google → cierra → cookies guardadas\n```\n\n### Step 10 — Print status\n\n```\nStack activo:\n  Atlassian Marlink :9000  (http direct)\n  Atlassian Geeplo  :9001  (http direct)\n  skills-manager    :9002  (http direct)\n  Google Arturo    :9003  (http direct)\n  Google Palafito  :9004  (http direct)\n  notebooklm       :9005  (http direct)\n  Hindsight        :8888  (http direct)\n  LiteLLM proxy    :4000  [claude-haiku]\n  context7         https:\u002F\u002Fmcp.context7.com\u002Fmcp  (remote)\n  miro             https:\u002F\u002Fmcp.miro.com\u002F          (remote)\n  trello           stdio (npx -y trello-mcp)      [needs TRELLO_API_KEY\u002FTRELLO_TOKEN]\n  camoufox         stdio (npx -y camoufox-mcp-server)\n  rag              :9010  (SSE, host Python)\n  paperclip-mcp    :9011  (http direct)\n```\n\n$ARGUMENTS\n","# Start — MCP Stack Launcher\n\nEnsures the full MCP stack is running:\n- **LiteLLM proxy** at `http:\u002F\u002Flocalhost:4000` (HOST) — Claude Haiku gateway for Hindsight\n- **Docker stack** (Hindsight :8888, atlassian-marlink :9000, atlassian-geeplo :9001, google-workspace-arturo :9003, google-workspace-palafito :9004)\n- **skills-manager server** at `http:\u002F\u002Flocalhost:9002` (Python on HOST)\n- **notebooklm server** at `http:\u002F\u002Flocalhost:9005` (Python on HOST)\n\n**Start order matters**: LiteLLM → Docker (Hindsight calls LiteLLM on `verify_connection` at startup).\n\n## Steps\n\n### Step 1 — Check if stack is already running\n\n```bash\nHINDSIGHT=$(curl -s --max-time 1 -o \u002Fdev\u002Fnull -w \"%{http_code}\" http:\u002F\u002Flocalhost:8888\u002Fhealth 2>\u002Fdev\u002Fnull)\nSKILLS_MGR=$(curl -s --max-time 1 -o \u002Fdev\u002Fnull -w \"%{http_code}\" http:\u002F\u002Flocalhost:9002 2>\u002Fdev\u002Fnull)\nLITELLM=$(curl -s --max-time 1 -o \u002Fdev\u002Fnull -w \"%{http_code}\" http:\u002F\u002Flocalhost:4000\u002Fhealth 2>\u002Fdev\u002Fnull)\n```\n\n- Hindsight != 000 AND skills_mgr != 000 AND litellm != 000 → stack is active. Print status (Step 9 format) and stop.\n\n### Step 2 — Resolve paths and load secrets\n\nThis must run before LiteLLM and before Docker — both need secrets and paths.\n\n```bash\n# Resolve ONEDRIVE_PATH\nif [ -z \"$ONEDRIVE_PATH\" ]; then\n  DEVICE_JSON=\"$USERPROFILE\u002F.claude\u002Feligia\u002Flocal_device.json\"\n  if [ -f \"$DEVICE_JSON\" ]; then\n    export ONEDRIVE_PATH=$(python -c \"import json; print(json.load(open('$DEVICE_JSON'))['onedrive_path'])\")\n  else\n    [ -n \"$ONEDRIVE\" ] && export ONEDRIVE_PATH=\"$ONEDRIVE\"\n    if [ -z \"$ONEDRIVE_PATH\" ]; then\n      for _od in \"$USERPROFILE\u002FOneDrive\" \"$USERPROFILE\u002FOneDrive - UNITAS\" \"$USERPROFILE\u002FOneDrive - Personal\"; do\n        [ -d \"$_od\u002F.eligia\" ] && export ONEDRIVE_PATH=\"$_od\" && break\n      done\n    fi\n    [ -z \"$ONEDRIVE_PATH\" ] && echo \"ERROR: ONEDRIVE_PATH no encontrada. Ejecuta install-eligia.bat primero.\" && exit 1\n    echo \"WARNING: ONEDRIVE_PATH resuelto por fallback: $ONEDRIVE_PATH (ejecuta install-eligia.bat para persistir)\"\n  fi\nfi\n\n# Resolve ELIGIA_DIR\nif [ -z \"$ELIGIA_DIR\" ]; then\n  DEVICE_JSON=\"$USERPROFILE\u002F.claude\u002Feligia\u002Flocal_device.json\"\n  if [ -f \"$DEVICE_JSON\" ]; then\n    export ELIGIA_DIR=$(python -c \"import json; print(json.load(open('$DEVICE_JSON'))['eligia_dir'])\")\n  else\n    export ELIGIA_DIR=\"${ONEDRIVE_PATH}\u002F.eligia\"\n    echo \"WARNING: ELIGIA_DIR resuelto por fallback: $ELIGIA_DIR\"\n  fi\nfi\n\nSECRETS=\"${ONEDRIVE_PATH}\u002F.eligia\u002Fsecrets.env\"\nAGE_KEY=\"$USERPROFILE\u002F.config\u002Fsops\u002Fage\u002Fkeys.txt\"\n\nif [ ! -f \"$SECRETS\" ]; then\n  echo \"ERROR: $SECRETS no encontrado. Verifica que OneDrive esté sincronizado.\"\n  exit 1\nfi\n\nset -a\nsource \u003C(SOPS_AGE_KEY_FILE=\"$AGE_KEY\" sops --input-type dotenv --output-type dotenv --decrypt \"$SECRETS\" | grep -v '^#')\nset +a\n```\n\n### Step 3 — Start LiteLLM proxy (if not running)\n\n```bash\ncurl -s --max-time 1 http:\u002F\u002Flocalhost:4000\u002Fhealth > \u002Fdev\u002Fnull 2>&1\n```\n\n- Returns any HTTP code → already running, skip.\n- Fails \u002F empty → start it:\n\n```bash\nLITELLM=$(which litellm 2>\u002Fdev\u002Fnull || echo \"$USERPROFILE\u002FAppData\u002FRoaming\u002FPython\u002FPython313\u002FScripts\u002Flitellm\")\nPYTHONIOENCODING=utf-8 nohup \"$LITELLM\" --config \"${ONEDRIVE_PATH}\u002F.eligia\u002Fstack\u002Flitellm_config.yaml\" --port 4000 > \u002Ftmp\u002Flitellm.log 2>&1 &\nsleep 6\n```\n\nVerify: `curl -s --max-time 3 -o \u002Fdev\u002Fnull -w \"%{http_code}\" http:\u002F\u002Flocalhost:4000\u002Fhealth`\n- Any response → running.\n- No response → print `ERROR: LiteLLM no arrancó. Revisa: \u002Ftmp\u002Flitellm.log` and stop.\n\n### Step 4 — Check if Docker daemon is running\n\n```bash\ndocker info 2>&1\n```\n\n- Success → Docker is running. Skip to Step 6.\n- Failure → Docker Desktop is closed. Continue to Step 5.\n\n### Step 5 — Start Docker Desktop\n\n```bash\ncmd \u002Fc start \"\" \"C:\\Program Files\\Docker\\Docker\\Docker Desktop.exe\"\n```\n\nPoll until Docker daemon responds (max 60s, check every 5s):\n\n```bash\nfor i in $(seq 1 12); do\n  docker info 2>&1 | grep -q \"Server Version\" && break\n  sleep 5\ndone\n```\n\nIf timeout reached without success, print:\n```\nERROR: Docker Desktop no respondió en 60s.\nAbre Docker Desktop manualmente y vuelve a ejecutar \u002Fstart.\n```\nThen stop.\n\n### Step 6 — Deploy Docker stack\n\n```bash\nCOMPOSE=\"${ONEDRIVE_PATH}\u002F.eligia\u002Fstack\u002Fdocker-compose.yml\"\ndocker compose -f \"$COMPOSE\" up -d --remove-orphans\n```\n\nWait 5 seconds, verify Hindsight is up:\n\n```bash\ncurl -s --max-time 3 -o \u002Fdev\u002Fnull -w \"%{http_code}\" http:\u002F\u002Flocalhost:8888\u002Fhealth\n```\n\n- Any response → running.\n- No response → print `ERROR: Hindsight no arrancó. Revisa: docker logs hindsight` and stop.\n\n### Step 7 — Start skills-manager MCP server (if not running)\n\n```bash\ncurl -s --max-time 1 http:\u002F\u002Flocalhost:9002 > \u002Fdev\u002Fnull 2>&1\n```\n\n- Returns any HTTP code → already running, skip.\n- Fails \u002F empty → start it:\n\n```bash\npython -c \"import websockets\" 2>\u002Fdev\u002Fnull || pip install \"websockets\" -q\nnohup python \"$USERPROFILE\u002F.skills-manager\u002Fserver.py\" > \u002Fdev\u002Fnull 2>&1 &\nsleep 3\n```\n\nVerify: `curl -s --max-time 2 -o \u002Fdev\u002Fnull -w \"%{http_code}\" http:\u002F\u002Flocalhost:9002`\n- Any response → running.\n- No response → print `ERROR: skills-manager server no arrancó. Ejecuta manualmente: python ~\u002F.skills-manager\u002Fserver.py`\n\n### Step 8 — Start paperclip-mcp server (if not running)\n\n```bash\ncurl -s --max-time 1 http:\u002F\u002Flocalhost:9011\u002Fmcp > \u002Fdev\u002Fnull 2>&1\n```\n\n- Returns any HTTP code → already running, skip.\n- Fails \u002F empty → start it:\n\n```bash\npython -c \"import paperclip_mcp\" 2>\u002Fdev\u002Fnull || pip install -e \"$USERPROFILE\u002F.paperclip\u002Fmcp-server\" -q\n\nPAPERCLIP_API_KEY=\"$PAPERCLIP_API_KEY\" \\\nPAPERCLIP_COMPANY_ID=\"$PAPERCLIP_COMPANY_ID\" \\\nPAPERCLIP_BASE_URL=\"${PAPERCLIP_BASE_URL:-http:\u002F\u002Flocalhost:3100\u002Fapi}\" \\\nnohup paperclip-mcp > \u002Ftmp\u002Fpaperclip-mcp.log 2>&1 &\nsleep 3\n```\n\nVerify: `curl -s --max-time 2 -o \u002Fdev\u002Fnull -w \"%{http_code}\" http:\u002F\u002Flocalhost:9011\u002Fmcp`\n- Any response → running.\n- No response → print `ERROR: paperclip-mcp no arrancó. Revisa: \u002Ftmp\u002Fpaperclip-mcp.log`\n\n### Step 9 — Start notebooklm MCP server (if not running)\n\n\n```bash\ncurl -s --max-time 1 http:\u002F\u002Flocalhost:9005 > \u002Fdev\u002Fnull 2>&1\n```\n\n- Returns any HTTP code → already running, skip.\n- Fails \u002F empty → ensure deps and start:\n\n```bash\npython -c \"import notebooklm\" 2>\u002Fdev\u002Fnull || pip install \"notebooklm-py[browser]\" fastmcp -q\n\nexport NOTEBOOKLM_HOME=\"${ELIGIA_DIR}\u002Fdata\u002Fnotebooklm-py\"\nexport NOTEBOOKLM_DEFAULT_NOTEBOOK=\"4752df21-5550-4d55-924a-540ec2a82c3f\"\nnohup python \"$USERPROFILE\u002F.claude\u002Fnotebooklm-server\u002Fserver.py\" > \u002Ftmp\u002Fnotebooklm.log 2>&1 &\nsleep 3\n```\n\nVerify: `curl -s --max-time 5 -o \u002Fdev\u002Fnull -w \"%{http_code}\" http:\u002F\u002Flocalhost:9005\u002Fmcp\u002F`\n- Any response → running.\n- No response → print `ERROR: notebooklm server no arrancó. Revisa: \u002Ftmp\u002Fnotebooklm.log`\n\n#### Setup inicial (nueva máquina — una vez)\n\nAuth se almacena como cookies en `$ELIGIA_DIR\u002Fdata\u002Fnotebooklm-py\u002F` (local, gitignored).\n\n```bash\nexport NOTEBOOKLM_HOME=\"${ELIGIA_DIR}\u002Fdata\u002Fnotebooklm-py\"\nnotebooklm auth   # Abre browser → login con Google → cierra → cookies guardadas\n```\n\n### Step 10 — Print status\n\n```\nStack activo:\n  Atlassian Marlink :9000  (http direct)\n  Atlassian Geeplo  :9001  (http direct)\n  skills-manager    :9002  (http direct)\n  Google Arturo    :9003  (http direct)\n  Google Palafito  :9004  (http direct)\n  notebooklm       :9005  (http direct)\n  Hindsight        :8888  (http direct)\n  LiteLLM proxy    :4000  [claude-haiku]\n  context7         https:\u002F\u002Fmcp.context7.com\u002Fmcp  (remote)\n  miro             https:\u002F\u002Fmcp.miro.com\u002F          (remote)\n  trello           stdio (npx -y trello-mcp)      [needs TRELLO_API_KEY\u002FTRELLO_TOKEN]\n  camoufox         stdio (npx -y camoufox-mcp-server)\n  rag              :9010  (SSE, host Python)\n  paperclip-mcp    :9011  (http direct)\n```\n\n$ARGUMENTS\n",{"name":5,"model":34,"description":51,"allowed-tools":36,"argument-hint":52},"Starts the full MCP stack: LiteLLM proxy + Docker services (Hindsight, Atlassian, Google Workspace) + skills-manager + notebooklm. All services connect directly — no proxy. Use \u002Fstart at the beginning of any session where MCP tools are needed, or when any service is stopped. LiteLLM must start before Docker — Hindsight depends on it at startup.\n","","master","f57cddf3a79f076c1bb1ba9c187850fba797c0c9","skills\u002Fstart",1,"https:\u002F\u002Fgithub.com\u002FWizarck\u002Fnexandro","https:\u002F\u002Fgithub.com\u002FWizarck","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Framirezarturo\u002F","Geek by birth, with not much to say but plenty to talk about.","2026-09-25 20:04:26",{"source":8,"skillName":5,"commands":63,"prompt":73,"zipAvailable":74},[64,67,70],{"tool":65,"command":66},"npx","npx skills add Wizarck\u002Fnexandro --skill start",{"tool":68,"command":69},"bunx","bunx skills add Wizarck\u002Fnexandro --skill start",{"tool":71,"command":72},"pnpm","pnpm dlx skills add Wizarck\u002Fnexandro --skill start","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FWizarck\u002Fnexandro\u002Fblob\u002Fmaster\u002Fskills\u002Fstart\u002FSKILL.md",true,[],[77,109,135,157,171,183],{"skillNo":78,"name":79,"nameZh":6,"description":80,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":81,"categories":82,"keywords":91,"publishedAt":46},"01M71BBM78XJY2YXFXJ2YNCEGY","xlsx","Use this skill any time a spreadsheet file is the primary input or output. This means any task where the user wants to: open, read, edit, or fix an existing .xlsx, .xlsm, .csv, or .tsv file; create a new spreadsheet from scratch or from other data sources; or convert between tabular file formats. Trigger especially when the user references a spreadsheet file by name or path and wants something done to it or produced from it. Also trigger for cleaning or restructuring messy tabular data files into proper spreadsheets.","https:\u002F\u002Fgithub.com\u002FWizarck\u002Fnexandro\u002Fblob\u002Fmaster\u002Fskills\u002Fxlsx\u002FSKILL.md",[83,86],{"categoryNo":84,"categoryName":85,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000004","电子表格",{"categoryNo":87,"categoryName":88,"taxonomyType":89,"taxonomyTypeDesc":90},"01JBSEEDCAT000000000000034","行政与办公人员","PROFESSION","适用职业",[79,92,93,94,95,96,97,98,99,100,101,102,103,38,104,27,105,106,107,108],"sources","tsv","by name","for","spreadsheet","time","trigger","fix","scratch","open","new","files","Existing","done","convert","file","tabular",{"skillNo":110,"name":111,"nameZh":6,"description":112,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":113,"categories":114,"keywords":119,"publishedAt":46},"01M71BBGZJG2FKCPJZWR32SCZ5","use-case-research","Creates JTBD-aligned Use Cases CSVs through structured user interviews, parallel vendor\u002Findustry research, and Jobs-to-be-Done synthesis. Generates 17-column CSV (OFFER-001 format) and validates with \u002Fqa-use-cases. Use when creating or updating use case research for an offering.","https:\u002F\u002Fgithub.com\u002FWizarck\u002Fnexandro\u002Fblob\u002Fmaster\u002Fskills\u002Fuse-case-research\u002FSKILL.md",[115,118],{"categoryNo":116,"categoryName":117,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000021","资料检索与研究",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[120,38,121,122,123,124,125,126,27,105,36,127,128,129,130,131,132,133,95,134],"use case research","case","research","industry research","user interviews","qa","jtbd","websearch","read","write","edit","interviews","opus","parallel","true",{"skillNo":136,"name":137,"nameZh":6,"description":138,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":139,"categories":140,"keywords":142,"publishedAt":46},"01M71BBCCGXCBJZSYK72CT7MJW","sync-jira","Two-way sync between PROGRESS.md pipeline status and JIRA CIT tasks. Use when syncing offering progress with JIRA, checking JIRA status, bootstrapping JIRA tasks for new offerings, or pushing\u002Fpulling status updates. Also use when the user mentions JIRA, CIT tasks, or pipeline sync.","https:\u002F\u002Fgithub.com\u002FWizarck\u002Fnexandro\u002Fblob\u002Fmaster\u002Fskills\u002Fsync-jira\u002FSKILL.md",[141],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[143,144,145,146,147,95,148,149,102,39,38,27,150,36,151,152,153,154,155,156],"sync jira","jira","sync","pull","push","pipeline","status updates","updates","tasks","bootstrap","dry","two","with","id",{"skillNo":158,"name":159,"nameZh":6,"description":160,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":161,"categories":162,"keywords":164,"publishedAt":46},"01M71BBAV2F4ABBVAM9FMZ692C","strategy","Tunes business strategy and aligns with corporate ABC Goals. Use when working on 01_BS\u002F business strategy files.","https:\u002F\u002Fgithub.com\u002FWizarck\u002Fnexandro\u002Fblob\u002Fmaster\u002Fskills\u002Fstrategy\u002FSKILL.md",[163],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[159,134,103,38,165,27,155,156,166,167,128,129,130,168,169,170],"business","goals","business strategy","corporate","grep","sonnet",{"skillNo":172,"name":173,"nameZh":6,"description":174,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":175,"categories":176,"keywords":178,"publishedAt":46},"01M71BB50307CW202PCTECJ3BB","start-palafito","Úsalo cuando el usuario quiere arrancar el stack palafito-prod (Paperclip) y, si hace falta, levantar Docker Desktop antes.","https:\u002F\u002Fgithub.com\u002FWizarck\u002Fnexandro\u002Fblob\u002Fmaster\u002Fskills\u002Fstart-palafito\u002FSKILL.md",[177],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[5,179,35,180,181,182,36,42,170],"start palafito","desktop","fork","paperclip",{"skillNo":184,"name":185,"nameZh":6,"description":186,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":187,"categories":188,"keywords":190,"publishedAt":46},"01M71BB0S9F0966D41VP6SJHS3","skill-creator","Creates new skills, modifies existing skills, and optimizes skill descriptions for better triggering accuracy. Adapted from Anthropic's official skill-creator. Use when creating a skill from scratch, editing or improving an existing skill, or optimizing a skill's description. Also use when \u002Fqa-improve identifies that a skill needs structural changes, new skills are needed, or descriptions need optimization.","https:\u002F\u002Fgithub.com\u002FWizarck\u002Fnexandro\u002Fblob\u002Fmaster\u002Fskills\u002Fskill-creator\u002FSKILL.md",[189],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[191,192,185,193,194,195,102,125,27,36,196,197,128,129,130,198,132,199,200,95],"skill creator","creator","official","structural","improve","create","optimize","a skill","existing skill","modify"]