Back to Skills
    ๐Ÿฆž

    spool

    Threads CLI - Read, post, reply, and search on Meta's Threads using OpenClaw.

    By @zizi-cat
    View on GitHub
    SKILL.md
    ---
    name: spool
    description: "Threads CLI - Read, post, reply, and search on Meta's Threads using OpenClaw browser tool. Use when the user wants to interact with Threads: posting, reading timeline, viewing profiles, replying to threads, or searching."
    homepage: https://github.com/zizi-cat/spool
    metadata: {"clawdhub":{"emoji":"๐Ÿงต"}}
    ---
    
    # spool
    
    OpenClaw browser ๋„๊ตฌ๋กœ Threads (threads.net) ์กฐ์ž‘ํ•˜๊ธฐ.
    
    ## Prerequisites
    
    ### ํ™˜๊ฒฝ ์š”๊ตฌ์‚ฌํ•ญ
    - OpenClaw with browser tool enabled
    - `openclaw` browser profile
    - Threads ๊ณ„์ • ๋กœ๊ทธ์ธ ์™„๋ฃŒ
    
    ### Headless ์„œ๋ฒ„์ธ ๊ฒฝ์šฐ (GUI ์—†์Œ)
    
    Xvfb ๊ฐ€์ƒ ๋””์Šคํ”Œ๋ ˆ์ด ํ•„์š”:
    
    ```bash
    # 1. Xvfb ์„ค์น˜ ๋ฐ ์„œ๋น„์Šค ๋“ฑ๋ก
    sudo apt install -y xvfb
    sudo tee /etc/systemd/system/xvfb.service << 'EOF'
    [Unit]
    Description=X Virtual Frame Buffer
    After=network.target
    [Service]
    Type=simple
    ExecStart=/usr/bin/Xvfb :99 -screen 0 1920x1080x24
    Restart=always
    [Install]
    WantedBy=multi-user.target
    EOF
    sudo systemctl enable --now xvfb
    
    # 2. OpenClaw Gateway์— DISPLAY ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ถ”๊ฐ€
    mkdir -p ~/.config/systemd/user/openclaw-gateway.service.d
    echo -e '[Service]\nEnvironment=DISPLAY=:99' > ~/.config/systemd/user/openclaw-gateway.service.d/display.conf
    systemctl --user daemon-reload
    systemctl --user restart openclaw-gateway
    ```
    
    ### ๋กœ๊ทธ์ธ (์ฒ˜์Œ ํ•œ ๋ฒˆ๋งŒ)
    
    ```
    browser action=start profile=openclaw
    browser action=open profile=openclaw targetUrl="https://www.threads.net/login"
    # ์‚ฌ์šฉ์ž์—๊ฒŒ ์ˆ˜๋™ ๋กœ๊ทธ์ธ ์š”์ฒญ
    ```
    
    ---
    
    ## ์‚ฌ์šฉ๋ฒ•
    
    ### 1. ํƒ€์ž„๋ผ์ธ ์ฝ๊ธฐ
    
    ```
    browser action=open profile=openclaw targetUrl="https://www.threads.net"
    browser action=snapshot profile=openclaw compact=true
    ```
    
    ๊ฒฐ๊ณผ์—์„œ ๊ฐ ๊ฒŒ์‹œ๋ฌผ์˜ ์ž‘์„ฑ์ž, ๋‚ด์šฉ, ์ข‹์•„์š”/๋Œ“๊ธ€ ์ˆ˜ ํ™•์ธ ๊ฐ€๋Šฅ.
    
    ### 2. ํฌ์ŠคํŒ… (์ „์ฒด ํ”Œ๋กœ์šฐ)
    
    **Step 1: ํ™ˆ์œผ๋กœ ์ด๋™**
    ```
    browser action=open profile=openclaw targetUrl="https://www.threads.net"
    browser action=snapshot profile=openclaw compact=true
    ```
    
    **Step 2: "What's new?" ๋ฒ„ํŠผ ์ฐพ์•„์„œ ํด๋ฆญ**
    snapshot์—์„œ `"What's new?"` ๋˜๋Š” `"Empty text field"` ํฌํ•จ๋œ button์˜ ref ์ฐพ๊ธฐ
    ```
    browser action=act profile=openclaw request={"kind":"click","ref":"e14"}
    ```
    (ref๋Š” snapshot๋งˆ๋‹ค ๋‹ค๋ฆ„! ๋ฐ˜๋“œ์‹œ snapshot์—์„œ ํ™•์ธ)
    
    **Step 3: ๋‹ค์ด์–ผ๋กœ๊ทธ์—์„œ ํ…์ŠคํŠธ ์ž…๋ ฅ**
    ```
    browser action=snapshot profile=openclaw compact=true
    ```
    `textbox` ref ์ฐพ์•„์„œ:
    ```
    browser action=act profile=openclaw request={"kind":"type","ref":"e14","text":"ํฌ์ŠคํŒ… ๋‚ด์šฉ"}
    ```
    
    **Step 4: Post ๋ฒ„ํŠผ ํด๋ฆญ**
    ```
    browser action=act profile=openclaw request={"kind":"click","ref":"e22"}
    ```
    (Post ๋ฒ„ํŠผ ref๋„ snapshot์—์„œ ํ™•์ธ)
    
    **Step 5: ํ™•์ธ**
    ```
    browser action=snapshot profile=openclaw compact=true
    ```
    โ†’ "Posted" ํ…์ŠคํŠธ์™€ "View" ๋งํฌ๊ฐ€ ๋ณด์ด๋ฉด ์„ฑ๊ณต!
    
    ### 3. ํ”„๋กœํ•„ ๋ณด๊ธฐ
    
    ```
    browser action=open profile=openclaw targetUrl="https://www.threads.net/@username"
    browser action=snapshot profile=openclaw compact=true
    ```
    
    ### 4. ๊ฒ€์ƒ‰
    
    ```
    browser action=open profile=openclaw targetUrl="https://www.threads.net/search?q=๊ฒ€์ƒ‰์–ด"
    browser action=snapshot profile=openclaw compact=true
    ```
    
    ### 5. ๋‹ต๊ธ€ ๋‹ฌ๊ธฐ
    
    ```
    # ๊ฒŒ์‹œ๋ฌผ ์—ด๊ธฐ
    browser action=open profile=openclaw targetUrl="https://www.threads.net/@user/post/POSTID"
    browser action=snapshot profile=openclaw compact=true
    
    # Reply ๋ฒ„ํŠผ ํด๋ฆญ (ref ํ™•์ธ ํ›„)
    browser action=act profile=openclaw request={"kind":"click","ref":"<reply-ref>"}
    
    # ํ…์ŠคํŠธ ์ž…๋ ฅ ๋ฐ ๊ฒŒ์‹œ (ํฌ์ŠคํŒ…๊ณผ ๋™์ผ)
    ```
    
    ---
    
    ## ํ•ต์‹ฌ ํฌ์ธํŠธ
    
    1. **snapshot ๋จผ์ €!** - ๋ชจ๋“  ์ž‘์—… ์ „์— snapshot์œผ๋กœ ํ˜„์žฌ ํŽ˜์ด์ง€ ์ƒํƒœ์™€ ref ํ™•์ธ
    2. **ref๋Š” ๋งค๋ฒˆ ๋‹ฌ๋ผ์ง** - snapshot ๊ฒฐ๊ณผ์—์„œ ํ•ญ์ƒ ์ƒˆ๋กœ ์ฐพ๊ธฐ
    3. **compact=true** - ํ† ํฐ ์ ˆ์•ฝ์„ ์œ„ํ•ด ํ•ญ์ƒ ์‚ฌ์šฉ
    4. **targetId ์œ ์ง€** - ๊ฐ™์€ ํƒญ์—์„œ ์ž‘์—…ํ•˜๋ ค๋ฉด targetId ํŒŒ๋ผ๋ฏธํ„ฐ ์‚ฌ์šฉ
    5. **ํฌ์ŠคํŒ… ์ „ ํ™•์ธ** - ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‚ด์šฉ ํ™•์ธ๋ฐ›๊ณ  ํฌ์ŠคํŒ…
    
    ---
    
    ## ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…
    
    | ๋ฌธ์ œ | ํ•ด๊ฒฐ |
    |------|------|
    | browser ๋„๊ตฌ ์•ˆ ๋จ | Xvfb ์‹คํ–‰ ํ™•์ธ, DISPLAY=:99 ์„ค์ • ํ™•์ธ, Gateway ์žฌ์‹œ์ž‘ |
    | ๋กœ๊ทธ์ธ ์•ˆ ๋จ | `/login` ํŽ˜์ด์ง€๋กœ ์ด๋™ ํ›„ ์ˆ˜๋™ ๋กœ๊ทธ์ธ ์š”์ฒญ |
    | ref ๋ชป ์ฐพ์Œ | snapshot ๋‹ค์‹œ ์ฐ๊ณ  ๋น„์Šทํ•œ ํ…์ŠคํŠธ/๋ฒ„ํŠผ ์ฐพ๊ธฐ |
    | ํฌ์ŠคํŒ… ์•ˆ ๋จ | Post ๋ฒ„ํŠผ์ด disabled์ธ์ง€ ํ™•์ธ (ํ…์ŠคํŠธ ์ž…๋ ฅ ํ•„์š”) |