{"slug": "firecrawl-skills-auto-update-updates-cli-skills-cli-build-workflows-repos-llm-to", "title": "Firecrawl Skills Auto-Update — updates CLI, skills (cli/build/workflows repos), LLM context files from Crawl4AI docs, and Crawl4AI skill package. Logs to startup_stack.log.", "summary": "A developer has created an auto-update script for Firecrawl that updates the CLI, skills from three separate repositories (cli, build, and workflows), and LLM context files sourced from Crawl4AI documentation. The script logs all update activity to a startup_stack.log file and copies updated skills to the Hermes skills directory.", "body_md": "| #!/usr/bin/env bash | |\n| # Firecrawl Skills & CLI Auto-Update Script | |\n| # Updates all Firecrawl components: CLI, skills, workflows, and LLM context files | |\n| # Run via scheduled task or manually | |\n| LOG=\"$HOME/startup_stack.log\" | |\n| SKILLS_DIR=\"$HOME/AppData/Local/hermes/skills/firecrawl\" | |\n| CONTEXT_DIR=\"$HOME/AppData/Local/hermes/llm-context/crawl4ai\" | |\n| echo \"========================================\" >> \"$LOG\" | |\n| echo \"$(date '+%Y-%m-%d %H:%M:%S') - Firecrawl Skills Auto-Update Starting\" >> \"$LOG\" | |\n| echo \"========================================\" >> \"$LOG\" | |\n| # Update Firecrawl CLI (npm global package) | |\n| echo \"$(date '+%Y-%m-%d %H:%M:%S') - Updating Firecrawl CLI...\" >> \"$LOG\" | |\n| if command -v npm &> /dev/null; then | |\n| npm update -g firecrawl-cli >> \"$LOG\" 2>&1 | |\n| CLI_VERSION=$(firecrawl --version 2>/dev/null || echo \"unknown\") | |\n| echo \"$(date '+%Y-%m-%d %H:%M:%S') - Firecrawl CLI updated to: $CLI_VERSION\" >> \"$LOG\" | |\n| else | |\n| echo \"$(date '+%Y-%m-%d %H:%M:%S') - npm not found, skipping CLI update\" >> \"$LOG\" | |\n| fi | |\n| # Update CLI Skills (firecrawl/cli repo) | |\n| echo \"$(date '+%Y-%m-%d %H:%M:%S') - Updating CLI skills...\" >> \"$LOG\" | |\n| if [ -d \"/c/Tools/firecrawl-cli-skills/.git\" ]; then | |\n| cd /c/Tools/firecrawl-cli-skills | |\n| BEFORE=$(git rev-parse HEAD) | |\n| git pull origin main >> \"$LOG\" 2>&1 | |\n| AFTER=$(git rev-parse HEAD) | |\n| if [ \"$BEFORE\" != \"$AFTER\" ]; then | |\n| echo \"$(date '+%Y-%m-%d %H:%M:%S') - CLI skills updated: $BEFORE -> $AFTER\" >> \"$LOG\" | |\n| # Copy updated skills to Hermes | |\n| cp -r skills/* \"$SKILLS_DIR/\" >> \"$LOG\" 2>&1 | |\n| echo \"$(date '+%Y-%m-%d %H:%M:%S') - CLI skills copied to Hermes\" >> \"$LOG\" | |\n| else | |\n| echo \"$(date '+%Y-%m-%d %H:%M:%S') - CLI skills already up-to-date\" >> \"$LOG\" | |\n| fi | |\n| else | |\n| echo \"$(date '+%Y-%m-%d %H:%M:%S') - CLI skills repo not found, skipping\" >> \"$LOG\" | |\n| fi | |\n| # Update Build Skills (firecrawl/skills repo) | |\n| echo \"$(date '+%Y-%m-%d %H:%M:%S') - Updating build skills...\" >> \"$LOG\" | |\n| if [ -d \"/c/Tools/firecrawl-build-skills/.git\" ]; then | |\n| cd /c/Tools/firecrawl-build-skills | |\n| BEFORE=$(git rev-parse HEAD) | |\n| git pull origin main >> \"$LOG\" 2>&1 | |\n| AFTER=$(git rev-parse HEAD) | |\n| if [ \"$BEFORE\" != \"$AFTER\" ]; then | |\n| echo \"$(date '+%Y-%m-%d %H:%M:%S') - Build skills updated: $BEFORE -> $AFTER\" >> \"$LOG\" | |\n| cp -r skills/* \"$SKILLS_DIR/\" >> \"$LOG\" 2>&1 | |\n| echo \"$(date '+%Y-%m-%d %H:%M:%S') - Build skills copied to Hermes\" >> \"$LOG\" | |\n| else | |\n| echo \"$(date '+%Y-%m-%d %H:%M:%S') - Build skills already up-to-date\" >> \"$LOG\" | |\n| fi | |\n| else | |\n| echo \"$(date '+%Y-%m-%d %H:%M:%S') - Build skills repo not found, skipping\" >> \"$LOG\" | |\n| fi | |\n| # Update Workflow Skills (firecrawl/firecrawl-workflows repo) | |\n| echo \"$(date '+%Y-%m-%d %H:%M:%S') - Updating workflow skills...\" >> \"$LOG\" | |\n| if [ -d \"/c/Tools/firecrawl-workflows/.git\" ]; then | |\n| cd /c/Tools/firecrawl-workflows | |\n| BEFORE=$(git rev-parse HEAD) | |\n| git pull origin main >> \"$LOG\" 2>&1 | |\n| AFTER=$(git rev-parse HEAD) | |\n| if [ \"$BEFORE\" != \"$AFTER\" ]; then | |\n| echo \"$(date '+%Y-%m-%d %H:%M:%S') - Workflow skills updated: $BEFORE -> $AFTER\" >> \"$LOG\" | |\n| cp -r skills/* \"$SKILLS_DIR/\" >> \"$LOG\" 2>&1 | |\n| echo \"$(date '+%Y-%m-%d %H:%M:%S') - Workflow skills copied to Hermes\" >> \"$LOG\" | |\n| else | |\n| echo \"$(date '+%Y-%m-%d %H:%M:%S') - Workflow skills already up-to-date\" >> \"$LOG\" | |\n| fi | |\n| else | |\n| echo \"$(date '+%Y-%m-%d %H:%M:%S') - Workflow skills repo not found, skipping\" >> \"$LOG\" | |\n| fi | |\n| # Update LLM Context Files (Crawl4AI llm.txt approach) | |\n| echo \"$(date '+%Y-%m-%d %H:%M:%S') - Updating LLM context files...\" >> \"$LOG\" | |\n| mkdir -p \"$CONTEXT_DIR\" | |\n| cd \"$CONTEXT_DIR\" | |\n| COMPONENTS=( | |\n| \"installation\" | |\n| \"simple_crawling\" | |\n| \"config_objects\" | |\n| \"extraction-llm\" | |\n| \"extraction-no-llm\" | |\n| \"multi_urls_crawling\" | |\n| \"deep_crawling\" | |\n| \"docker\" | |\n| \"cli\" | |\n| \"http_based_crawler_strategy\" | |\n| \"url_seeder\" | |\n| \"deep_crawl_advanced_filters_scorers\" | |\n| ) | |\n| UPDATED_COUNT=0 | |\n| for component in \"${COMPONENTS[@]}\"; do | |\n| # Download memory (what) context | |\n| MEMORY_URL=\"https://docs.crawl4ai.com/assets/llm.txt/txt/${component}.txt\" | |\n| MEMORY_FILE=\"${component}_memory.txt\" | |\n| if curl -s -o \"$MEMORY_FILE.new\" \"$MEMORY_URL\" 2>> \"$LOG\"; then | |\n| if [ ! -f \"$MEMORY_FILE\" ] || ! cmp -s \"$MEMORY_FILE\" \"$MEMORY_FILE.new\"; then | |\n| mv \"$MEMORY_FILE.new\" \"$MEMORY_FILE\" | |\n| ((UPDATED_COUNT++)) | |\n| echo \"$(date '+%Y-%m-%d %H:%M:%S') - Updated: $MEMORY_FILE\" >> \"$LOG\" | |\n| else | |\n| rm \"$MEMORY_FILE.new\" | |\n| fi | |\n| fi | |\n| # Download reasoning (how/why) context | |\n| REASONING_URL=\"https://docs.crawl4ai.com/assets/llm.txt/diagrams/${component}.txt\" | |\n| REASONING_FILE=\"${component}_reasoning.txt\" | |\n| if curl -s -o \"$REASONING_FILE.new\" \"$REASONING_URL\" 2>> \"$LOG\"; then | |\n| if [ ! -f \"$REASONING_FILE\" ] || ! cmp -s \"$REASONING_FILE\" \"$REASONING_FILE.new\"; then | |\n| mv \"$REASONING_FILE.new\" \"$REASONING_FILE\" | |\n| ((UPDATED_COUNT++)) | |\n| echo \"$(date '+%Y-%m-%d %H:%M:%S') - Updated: $REASONING_FILE\" >> \"$LOG\" | |\n| else | |\n| rm \"$REASONING_FILE.new\" | |\n| fi | |\n| fi | |\n| done | |\n| if [ $UPDATED_COUNT -gt 0 ]; then | |\n| echo \"$(date '+%Y-%m-%d %H:%M:%S') - LLM context: $UPDATED_COUNT files updated\" >> \"$LOG\" | |\n| else | |\n| echo \"$(date '+%Y-%m-%d %H:%M:%S') - LLM context: all files up-to-date\" >> \"$LOG\" | |\n| fi | |\n| # Update Crawl4AI Skill Package | |\n| echo \"$(date '+%Y-%m-%d %H:%M:%S') - Updating Crawl4AI skill package...\" >> \"$LOG\" | |\n| CRAWL4AI_SKILL=\"$HOME/AppData/Local/hermes/skills/web/crawl4ai\" | |\n| cd /tmp | |\n| if curl -L -s -o crawl4ai-skill.zip.new \"https://docs.crawl4ai.com/assets/crawl4ai-skill.zip\" 2>> \"$LOG\"; then | |\n| if [ ! -f \"crawl4ai-skill.zip\" ] || ! cmp -s \"crawl4ai-skill.zip\" \"crawl4ai-skill.zip.new\"; then | |\n| mv crawl4ai-skill.zip.new crawl4ai-skill.zip | |\n| unzip -q -o crawl4ai-skill.zip -d /tmp/crawl4ai-new | |\n| # Backup existing skill | |\n| if [ -d \"$CRAWL4AI_SKILL\" ]; then | |\n| cp -r \"$CRAWL4AI_SKILL\" \"$CRAWL4AI_SKILL.backup\" 2>> \"$LOG\" | |\n| fi | |\n| # Replace with updated skill | |\n| mkdir -p \"$CRAWL4AI_SKILL\" | |\n| cp -r /tmp/crawl4ai-new/crawl4ai/* \"$CRAWL4AI_SKILL/\" 2>> \"$LOG\" | |\n| rm -rf /tmp/crawl4ai-new | |\n| echo \"$(date '+%Y-%m-%d %H:%M:%S') - Crawl4AI skill package updated\" >> \"$LOG\" | |\n| else | |\n| rm crawl4ai-skill.zip.new | |\n| echo \"$(date '+%Y-%m-%d %H:%M:%S') - Crawl4AI skill package already up-to-date\" >> \"$LOG\" | |\n| fi | |\n| fi | |\n| echo \"========================================\" >> \"$LOG\" | |\n| echo \"$(date '+%Y-%m-%d %H:%M:%S') - Firecrawl Skills Auto-Update Complete\" >> \"$LOG\" | |\n| echo \"========================================\" >> \"$LOG\" | |\n| exit 0 |", "url": "https://wpnews.pro/news/firecrawl-skills-auto-update-updates-cli-skills-cli-build-workflows-repos-llm-to", "canonical_source": "https://gist.github.com/ar27111994/5cd41648d79220ef311fcd2ad1a2678b", "published_at": "2026-06-06 11:57:03+00:00", "updated_at": "2026-06-06 12:15:07.658896+00:00", "lang": "en", "topics": ["ai-tools", "ai-infrastructure", "ai-products"], "entities": ["Firecrawl", "Crawl4AI", "npm", "Git", "Hermes"], "alternates": {"html": "https://wpnews.pro/news/firecrawl-skills-auto-update-updates-cli-skills-cli-build-workflows-repos-llm-to", "markdown": "https://wpnews.pro/news/firecrawl-skills-auto-update-updates-cli-skills-cli-build-workflows-repos-llm-to.md", "text": "https://wpnews.pro/news/firecrawl-skills-auto-update-updates-cli-skills-cli-build-workflows-repos-llm-to.txt", "jsonld": "https://wpnews.pro/news/firecrawl-skills-auto-update-updates-cli-skills-cli-build-workflows-repos-llm-to.jsonld"}}