{
  "schemaVersion": "1.0",
  "item": {
    "slug": "pine-assistant",
    "name": "Pine Assistant",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/bojieli/pine-assistant",
    "canonicalUrl": "https://clawhub.ai/bojieli/pine-assistant",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/pine-assistant",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=pine-assistant",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/pine-assistant"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/pine-assistant",
    "agentPageUrl": "https://openagent3.xyz/skills/pine-assistant/agent",
    "manifestUrl": "https://openagent3.xyz/skills/pine-assistant/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/pine-assistant/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Pine Assistant",
        "body": "Use the pine CLI to let Pine AI handle tasks on the user's behalf — customer service calls, bill negotiations, subscription cancellations, reservations, disputes, and more. Pine operates via phone calls, computer use (browser automation), emails, and faxes.\n\nPine is a service with multiple sessions — each task runs in its own session."
      },
      {
        "title": "CRITICAL: Always look up active sessions first",
        "body": "NEVER claim you don't know about a session or task. Before creating a new session, answering questions about Pine tasks, or saying you have no context, you MUST run:\n\npine sessions list --json\n\nMandatory session lookup triggers:\n\nThe user mentions anything that could relate to a Pine task (a company name, account, refund, call, booking, etc.)\nThe user asks you to do something that Pine could handle — check if a session already exists\nThe user asks about progress, status, or follow-up on any task\nYou are about to create a new session — verify no existing session covers the same task\n\nNEVER do any of these without listing sessions first:\n\nSay \"I don't have context about that\" or \"Can you remind me?\"\nCreate a duplicate session for a task that already exists\nAssume a task doesn't exist because you don't remember it"
      },
      {
        "title": "Multi-session awareness",
        "body": "The user may have multiple Pine tasks running at the same time (e.g., one session negotiating a bill, another making a reservation). You MUST keep them separate:\n\nAlways track session IDs — never mix up sessions.\nUse pine sessions list --json liberally to refresh your memory.\nWhen the user asks about \"my Pine task\" or \"how's that call going\", use the session list to find the right session. If ambiguous, ask the user which task they mean."
      },
      {
        "title": "Authentication",
        "body": "Before any operation, check if already authenticated:\n\npine auth status --json\n\nIf the authenticated field is false, run the auth flow. Ask the user for their Pine AI account email (sign up at https://19pine.ai)."
      },
      {
        "title": "Step 1: Request verification code",
        "body": "pine auth request --email USER_EMAIL\n\nThis sends a verification code and outputs JSON with a request_token. Tell the user: \"A verification code has been sent to your email. Check your inbox (and spam) and give me the code.\""
      },
      {
        "title": "Step 2: Verify code and save credentials",
        "body": "Once the user provides the code:\n\npine auth verify --email USER_EMAIL --request-token REQUEST_TOKEN --code CODE\n\nThis verifies the code and saves credentials to ~/.pine/config.json automatically."
      },
      {
        "title": "Interactive login (alternative for human users)",
        "body": "pine auth login\n\nThis interactive version prompts for email and code. It requires stdin access and may not work in all agent/scripted environments — prefer request + verify above."
      },
      {
        "title": "Token refresh",
        "body": "If operations fail with authentication errors or 401 responses, the token may have expired. Re-run the auth flow from the beginning."
      },
      {
        "title": "When to use",
        "body": "Pine Assistant can handle a wide range of tasks. Its primary strength is phone calls, but it also has built-in search and map capabilities, computer automation (browser), emails, and faxes. Use it when the user wants:\n\nCustomer service (primary strength): negotiate bills, cancel subscriptions, dispute charges, file complaints, get refunds, resolve account issues\nSearch & discovery: find restaurants, businesses, or service providers nearby. Pine can search, compare options, and then call to book.\nReservations & appointments: book restaurants, schedule doctor/dentist appointments, make hotel reservations, reserve services\nOutreach & research: call businesses to gather information, compare quotes, verify hours or availability\nOnline tasks: handle web-based account actions, submit forms on websites, send emails or faxes on the user's behalf\n\nIf the user asks Pine to do something, let Pine decide whether it can handle it — don't preemptively reject requests based on assumptions about Pine's capabilities."
      },
      {
        "title": "Resuming / following up on an existing session",
        "body": "If the user mentions anything that could relate to an existing Pine task — a company name, an account, a task description, or even vague references like \"that refund\" or \"the call\":\n\nAlways run pine sessions list --json to find matching sessions. Search by title or any keyword the user mentioned.\nCheck the session's state:\n\nActive (chat, task_processing, etc.) → resume it. Send follow-up messages with pine send \"...\" -s SESSION_ID --no-wait --json.\nFinished (task_finished, task_cancelled, etc.) → do NOT continue in that session. Instead, check its details for context, then create a new session and reference what you learned. This gives Pine a fresh task context while preserving continuity for the user.\n\nNever say \"I don't have context\" or \"Can you remind me?\" — the session list is always available. Look it up."
      },
      {
        "title": "Phase 1: Check existing sessions, then create if needed",
        "body": "First, run pine sessions list --json to check whether a session for this task already exists.\n\nIf an existing active session matches → resume it (see \"Resuming\" above).\nIf an existing session matches but is finished → read its details for context, then create a new session and include that context in your first message.\nIf no match → proceed to create.\n\n\nCreate a session and send the user's request in one step:\n\npine send \"Negotiate my Comcast bill down. Account holder: Jane Doe, account #12345. Current bill is $120/mo, target is $80/mo. 10-year customer.\" --new --no-wait --json\n\nThe --new flag creates a session and returns a session_created JSON event with the session_id. Save this ID for follow-ups. The --no-wait flag sends the message without blocking for Pine's response (fire-and-forget) — always use --no-wait to avoid hanging.\n\nAlternatively, create the session separately first:\n\npine sessions create --json\npine send \"Negotiate my Comcast bill down.\" -s SESSION_ID --no-wait --json\n\nTell the user the session link: https://www.19pine.ai/app/chat/SESSION_ID\nDo NOT ask \"want me to start?\" or hand back control. Continue handling Pine's responses autonomously."
      },
      {
        "title": "Phase 2: Information gathering",
        "body": "Pine will research the request and ask for details. Poll for conversation messages (includes both metadata and history):\n\npine sessions get SESSION_ID --json\n\nTo send follow-up messages:\n\npine send \"checking in\" -s SESSION_ID --no-wait --json\n\nYou will receive:\n\nText responses asking questions — answer if you can, ask the user if you can't\nForms requesting specific information — relay to the user, wait for answers, then reply with the filled values\n\nPine may send multiple rounds of questions/forms. Ask the user for what you don't know. Do NOT try to start the task during this phase — Pine is still gathering information.\n\nReal example: User says \"Negotiate my Comcast bill\". Pine will:\n\nResearch deals and plan a strategy\nAsk for: Full Name on Account, Service Address, Phone Number, Current Plan, etc.\nYou relay the questions to the user, fill what you know, ask for the rest\nPine may send more questions — keep answering"
      },
      {
        "title": "Phase 3: Billing event (determines how the task starts)",
        "body": "After Pine has enough information, it will indicate one of these billing states:\n\nNo payment needed (free tier or subscription) → run pine task start SESSION_ID\nPayment completed (user already paid) → run pine task start SESSION_ID\nPayment required — relay the full billing details to the user: current bill, potential savings, pre-authorized amount, and the payment URL. For percentage-based billing, explain that Pine only charges if it saves money. The user must review and confirm payment at the session URL. Do NOT start the task until payment is confirmed.\nTask auto-started — metered credits confirmed, backend already started the task. Do NOT run pine task start (it's already running). Tell the user the task has started.\nCredits insufficient — tell the user to add credits at the session URL.\n\nOnly run pine task start after free/payment-completed. Never when the task is already running."
      },
      {
        "title": "Phase 4: Task execution",
        "body": "The task runs asynchronously (Pine makes calls, sends emails, automates browsers, etc.). Poll for state and conversation updates:\n\npine sessions get SESSION_ID --json\n\nKey states:\n\nchat — Pine is still gathering info\ntask_processing — task is running\ntask_finished — done, check results\n\nIMPORTANT: The task is NOT done when you run pine task start. Pine may need more input during execution. Keep polling and watching for:\n\nThree-party call requests: URGENT. Tell the user to answer their phone immediately. Include the caller ID number.\nOTP / verification codes: Ask the user for the code. NEVER guess OTPs, PINs, or security answers.\nLocation requests: Ask the user for their location or present location options with name, full address, and Google Maps link (https://www.google.com/maps/search/?api=1&query=NAME+ADDRESS).\nScheduling confirmation: The user must confirm availability.\nComputer use intervention: Pine needs the user's help (CAPTCHA, 2FA on a website). Tell the user to open the Pine web session and take over directly.\nStatus updates (\"I'm on the line with Bank of America\", \"calling you now\", \"went to voicemail\"): Relay to the user."
      },
      {
        "title": "Phase 5: After completion",
        "body": "When state is task_finished, share results with the user.\nIf Pine suggests social sharing, encourage: \"Share your success to earn Pine credits!\""
      },
      {
        "title": "Responding to Forms",
        "body": "When Pine asks for structured information (a form), decide whether to fill it yourself or ask the user:\n\nIf you can confidently fill ALL fields from information the user already provided (name, address, phone, account numbers), respond directly. Tell the user what you submitted.\nIf ANY field is uncertain or unknown — especially preferences, strategy choices, or information not previously mentioned — ALWAYS ask the user first."
      },
      {
        "title": "Asking the user",
        "body": "Summarize what Pine is asking in plain language:\n\nWhat the form is for\nEach field name, type, and available options (for select/multi-select)\nYour recommendation if you have one (but let the user decide)\n\nDo NOT proceed until the user has answered. If they give partial answers, ask about the remaining fields."
      },
      {
        "title": "Submitting form values",
        "body": "Reply to Pine with the field values via pine send:\n\npine send \"Full Name on Account: Jane Doe, Service Address: 123 Main St, Phone: +14155551234, Current Monthly Bill: 120\" -s SESSION_ID --no-wait --json\n\nNEVER fill forms autonomously with guessed preferences. Wrong answers will cause the task to fail."
      },
      {
        "title": "CRITICAL: When to respond vs. stay silent",
        "body": "DO NOT respond to every message from Pine. If you reply to every acknowledgment, Pine will acknowledge your reply, creating an infinite loop."
      },
      {
        "title": "ASK the human user first when:",
        "body": "Pine sends a form with fields you can't confidently fill\nPine asks a question with choices/preferences — the user must decide\nPine asks for an OTP, PIN, or security answer\nPine requests a three-party call — tell the user to answer their phone immediately\nPine asks for location information\nPine asks for scheduling confirmation — the user must be available\nPine asks for any information you were not given by the user"
      },
      {
        "title": "RESPOND to Pine (without asking user) when:",
        "body": "Payment confirmed or no payment needed → run pine task start SESSION_ID\nTask auto-started → just tell the user the task has started (do NOT run task start)\nTask finished → share results with the user"
      },
      {
        "title": "STAY SILENT when:",
        "body": "Pine sends an acknowledgment (\"Got it!\", \"Working on it!\", \"Let me check...\")\nAny message that is purely informational and does not ask you to do anything"
      },
      {
        "title": "Handling unknown events",
        "body": "Pine Assistant may send event types you don't recognize. Always relay the raw content to the user. Pine evolves rapidly and the content is always human-readable."
      },
      {
        "title": "List sessions",
        "body": "pine sessions list --json\npine sessions list --state task_finished --limit 5 --json\npine sessions list --state task_processing --json"
      },
      {
        "title": "Get session details and conversation history",
        "body": "pine sessions get SESSION_ID --json\npine sessions get SESSION_ID --limit 10 --json"
      },
      {
        "title": "Create a session",
        "body": "pine sessions create --json"
      },
      {
        "title": "Delete a session",
        "body": "pine sessions delete SESSION_ID\npine sessions delete SESSION_ID --force"
      },
      {
        "title": "Task Lifecycle",
        "body": "pine task start SESSION_ID    # start task execution\npine task stop SESSION_ID     # stop a running task"
      },
      {
        "title": "One-shot Message",
        "body": "Send a single message to an existing session (fire-and-forget):\n\npine send \"What's the status?\" -s SESSION_ID --no-wait --json\n\nCreate a new session and send in one step (the session ID is emitted as the first JSON event {\"type\": \"session_created\", \"data\": {\"session_id\": \"...\"}}):\n\npine send \"Cancel my Netflix subscription\" --new --no-wait --json\n\nOmit --no-wait to stream Pine's response events (interactive use only — may block for up to 2 minutes)."
      },
      {
        "title": "Best practices for agents",
        "body": "Always use --json for machine-readable output when parsing responses.\nCheck sessions first — run pine sessions list --json before creating a new session to avoid duplicates. Treat it as your memory.\nGather info upfront — collect account numbers, PINs, addresses, target outcomes, acceptable ranges, and walk-away conditions from the user before sending to Pine. This reduces back-and-forth.\nNever guess sensitive info — if Pine asks for OTPs, PINs, or security answers, always ask the user.\nStay engaged after task start — Pine will continue needing input during execution.\nRelay urgent events immediately — three-party calls, OTP requests, and scheduling confirmations are time-sensitive.\nUse background agents — for long-running tasks (5-60+ minutes), use sessions_spawn or equivalent to poll in the background while remaining available to the user.\nDon't preemptively reject requests — let Pine decide whether it can handle a task.\nPro subscription required for task execution.\nSession URL: The user can always check progress at https://www.19pine.ai/app/chat/SESSION_ID"
      },
      {
        "title": "Examples",
        "body": "Negotiate a bill:\n\"Negotiate my Comcast bill. Account: Jane Doe, #12345. Currently paying $120/mo for 200Mbps internet. Target: $80/mo. I've been a customer for 10 years. Willing to switch providers if needed.\"\n\nCancel a subscription:\n\"Cancel my Hulu subscription. Account email: jane@example.com. Reason: not using it enough.\"\n\nMake a reservation:\n\"Book a table for 4 at The French Laundry for Saturday at 7pm. Name: Jane Doe, phone: +14155551234.\"\n\nDispute a charge:\n\"Dispute a $50 charge on my Chase Visa ending in 4321. Transaction date: Feb 1. Merchant: XYZ Corp. I never authorized this purchase.\"\n\nFind and book a nearby restaurant:\n\"Find a good Italian restaurant near downtown SF and make a reservation for 2 tonight at 7pm.\""
      },
      {
        "title": "Also available: Pine Voice",
        "body": "The same pine CLI includes voice call commands for direct phone calls:\n\npine voice call --to \"+14155551234\" --name \"Dr. Smith\" --context \"...\" --objective \"...\"\npine voice status CALL_ID\n\nSee the pine-voice skill for full voice call documentation."
      },
      {
        "title": "Privacy",
        "body": "Pine processes task data on Pine AI's servers. Credentials are stored locally at ~/.pine/config.json. See https://www.19pine.ai/page/privacy-policy for data handling policies."
      }
    ],
    "body": "Pine Assistant\n\nUse the pine CLI to let Pine AI handle tasks on the user's behalf — customer service calls, bill negotiations, subscription cancellations, reservations, disputes, and more. Pine operates via phone calls, computer use (browser automation), emails, and faxes.\n\nPine is a service with multiple sessions — each task runs in its own session.\n\nCRITICAL: Always look up active sessions first\n\nNEVER claim you don't know about a session or task. Before creating a new session, answering questions about Pine tasks, or saying you have no context, you MUST run:\n\npine sessions list --json\n\n\nMandatory session lookup triggers:\n\nThe user mentions anything that could relate to a Pine task (a company name, account, refund, call, booking, etc.)\nThe user asks you to do something that Pine could handle — check if a session already exists\nThe user asks about progress, status, or follow-up on any task\nYou are about to create a new session — verify no existing session covers the same task\n\nNEVER do any of these without listing sessions first:\n\nSay \"I don't have context about that\" or \"Can you remind me?\"\nCreate a duplicate session for a task that already exists\nAssume a task doesn't exist because you don't remember it\nMulti-session awareness\n\nThe user may have multiple Pine tasks running at the same time (e.g., one session negotiating a bill, another making a reservation). You MUST keep them separate:\n\nAlways track session IDs — never mix up sessions.\nUse pine sessions list --json liberally to refresh your memory.\nWhen the user asks about \"my Pine task\" or \"how's that call going\", use the session list to find the right session. If ambiguous, ask the user which task they mean.\nAuthentication\n\nBefore any operation, check if already authenticated:\n\npine auth status --json\n\n\nIf the authenticated field is false, run the auth flow. Ask the user for their Pine AI account email (sign up at https://19pine.ai).\n\nStep 1: Request verification code\npine auth request --email USER_EMAIL\n\n\nThis sends a verification code and outputs JSON with a request_token. Tell the user: \"A verification code has been sent to your email. Check your inbox (and spam) and give me the code.\"\n\nStep 2: Verify code and save credentials\n\nOnce the user provides the code:\n\npine auth verify --email USER_EMAIL --request-token REQUEST_TOKEN --code CODE\n\n\nThis verifies the code and saves credentials to ~/.pine/config.json automatically.\n\nInteractive login (alternative for human users)\npine auth login\n\n\nThis interactive version prompts for email and code. It requires stdin access and may not work in all agent/scripted environments — prefer request + verify above.\n\nToken refresh\n\nIf operations fail with authentication errors or 401 responses, the token may have expired. Re-run the auth flow from the beginning.\n\nWhen to use\n\nPine Assistant can handle a wide range of tasks. Its primary strength is phone calls, but it also has built-in search and map capabilities, computer automation (browser), emails, and faxes. Use it when the user wants:\n\nCustomer service (primary strength): negotiate bills, cancel subscriptions, dispute charges, file complaints, get refunds, resolve account issues\nSearch & discovery: find restaurants, businesses, or service providers nearby. Pine can search, compare options, and then call to book.\nReservations & appointments: book restaurants, schedule doctor/dentist appointments, make hotel reservations, reserve services\nOutreach & research: call businesses to gather information, compare quotes, verify hours or availability\nOnline tasks: handle web-based account actions, submit forms on websites, send emails or faxes on the user's behalf\n\nIf the user asks Pine to do something, let Pine decide whether it can handle it — don't preemptively reject requests based on assumptions about Pine's capabilities.\n\nResuming / following up on an existing session\n\nIf the user mentions anything that could relate to an existing Pine task — a company name, an account, a task description, or even vague references like \"that refund\" or \"the call\":\n\nAlways run pine sessions list --json to find matching sessions. Search by title or any keyword the user mentioned.\nCheck the session's state:\nActive (chat, task_processing, etc.) → resume it. Send follow-up messages with pine send \"...\" -s SESSION_ID --no-wait --json.\nFinished (task_finished, task_cancelled, etc.) → do NOT continue in that session. Instead, check its details for context, then create a new session and reference what you learned. This gives Pine a fresh task context while preserving continuity for the user.\n\nNever say \"I don't have context\" or \"Can you remind me?\" — the session list is always available. Look it up.\n\nThe Complete Flow\nPhase 1: Check existing sessions, then create if needed\nFirst, run pine sessions list --json to check whether a session for this task already exists.\nIf an existing active session matches → resume it (see \"Resuming\" above).\nIf an existing session matches but is finished → read its details for context, then create a new session and include that context in your first message.\nIf no match → proceed to create.\nCreate a session and send the user's request in one step:\npine send \"Negotiate my Comcast bill down. Account holder: Jane Doe, account #12345. Current bill is $120/mo, target is $80/mo. 10-year customer.\" --new --no-wait --json\n\n\nThe --new flag creates a session and returns a session_created JSON event with the session_id. Save this ID for follow-ups. The --no-wait flag sends the message without blocking for Pine's response (fire-and-forget) — always use --no-wait to avoid hanging.\n\nAlternatively, create the session separately first:\n\npine sessions create --json\npine send \"Negotiate my Comcast bill down.\" -s SESSION_ID --no-wait --json\n\nTell the user the session link: https://www.19pine.ai/app/chat/SESSION_ID\nDo NOT ask \"want me to start?\" or hand back control. Continue handling Pine's responses autonomously.\nPhase 2: Information gathering\n\nPine will research the request and ask for details. Poll for conversation messages (includes both metadata and history):\n\npine sessions get SESSION_ID --json\n\n\nTo send follow-up messages:\n\npine send \"checking in\" -s SESSION_ID --no-wait --json\n\n\nYou will receive:\n\nText responses asking questions — answer if you can, ask the user if you can't\nForms requesting specific information — relay to the user, wait for answers, then reply with the filled values\n\nPine may send multiple rounds of questions/forms. Ask the user for what you don't know. Do NOT try to start the task during this phase — Pine is still gathering information.\n\nReal example: User says \"Negotiate my Comcast bill\". Pine will:\n\nResearch deals and plan a strategy\nAsk for: Full Name on Account, Service Address, Phone Number, Current Plan, etc.\nYou relay the questions to the user, fill what you know, ask for the rest\nPine may send more questions — keep answering\nPhase 3: Billing event (determines how the task starts)\n\nAfter Pine has enough information, it will indicate one of these billing states:\n\nNo payment needed (free tier or subscription) → run pine task start SESSION_ID\nPayment completed (user already paid) → run pine task start SESSION_ID\nPayment required — relay the full billing details to the user: current bill, potential savings, pre-authorized amount, and the payment URL. For percentage-based billing, explain that Pine only charges if it saves money. The user must review and confirm payment at the session URL. Do NOT start the task until payment is confirmed.\nTask auto-started — metered credits confirmed, backend already started the task. Do NOT run pine task start (it's already running). Tell the user the task has started.\nCredits insufficient — tell the user to add credits at the session URL.\n\nOnly run pine task start after free/payment-completed. Never when the task is already running.\n\nPhase 4: Task execution\n\nThe task runs asynchronously (Pine makes calls, sends emails, automates browsers, etc.). Poll for state and conversation updates:\n\npine sessions get SESSION_ID --json\n\n\nKey states:\n\nchat — Pine is still gathering info\ntask_processing — task is running\ntask_finished — done, check results\n\nIMPORTANT: The task is NOT done when you run pine task start. Pine may need more input during execution. Keep polling and watching for:\n\nThree-party call requests: URGENT. Tell the user to answer their phone immediately. Include the caller ID number.\nOTP / verification codes: Ask the user for the code. NEVER guess OTPs, PINs, or security answers.\nLocation requests: Ask the user for their location or present location options with name, full address, and Google Maps link (https://www.google.com/maps/search/?api=1&query=NAME+ADDRESS).\nScheduling confirmation: The user must confirm availability.\nComputer use intervention: Pine needs the user's help (CAPTCHA, 2FA on a website). Tell the user to open the Pine web session and take over directly.\nStatus updates (\"I'm on the line with Bank of America\", \"calling you now\", \"went to voicemail\"): Relay to the user.\nPhase 5: After completion\nWhen state is task_finished, share results with the user.\nIf Pine suggests social sharing, encourage: \"Share your success to earn Pine credits!\"\nResponding to Forms\n\nWhen Pine asks for structured information (a form), decide whether to fill it yourself or ask the user:\n\nIf you can confidently fill ALL fields from information the user already provided (name, address, phone, account numbers), respond directly. Tell the user what you submitted.\nIf ANY field is uncertain or unknown — especially preferences, strategy choices, or information not previously mentioned — ALWAYS ask the user first.\nAsking the user\n\nSummarize what Pine is asking in plain language:\n\nWhat the form is for\nEach field name, type, and available options (for select/multi-select)\nYour recommendation if you have one (but let the user decide)\n\nDo NOT proceed until the user has answered. If they give partial answers, ask about the remaining fields.\n\nSubmitting form values\n\nReply to Pine with the field values via pine send:\n\npine send \"Full Name on Account: Jane Doe, Service Address: 123 Main St, Phone: +14155551234, Current Monthly Bill: 120\" -s SESSION_ID --no-wait --json\n\n\nNEVER fill forms autonomously with guessed preferences. Wrong answers will cause the task to fail.\n\nCRITICAL: When to respond vs. stay silent\n\nDO NOT respond to every message from Pine. If you reply to every acknowledgment, Pine will acknowledge your reply, creating an infinite loop.\n\nASK the human user first when:\nPine sends a form with fields you can't confidently fill\nPine asks a question with choices/preferences — the user must decide\nPine asks for an OTP, PIN, or security answer\nPine requests a three-party call — tell the user to answer their phone immediately\nPine asks for location information\nPine asks for scheduling confirmation — the user must be available\nPine asks for any information you were not given by the user\nRESPOND to Pine (without asking user) when:\nPayment confirmed or no payment needed → run pine task start SESSION_ID\nTask auto-started → just tell the user the task has started (do NOT run task start)\nTask finished → share results with the user\nSTAY SILENT when:\nPine sends an acknowledgment (\"Got it!\", \"Working on it!\", \"Let me check...\")\nAny message that is purely informational and does not ask you to do anything\nHandling unknown events\n\nPine Assistant may send event types you don't recognize. Always relay the raw content to the user. Pine evolves rapidly and the content is always human-readable.\n\nSession Management\nList sessions\npine sessions list --json\npine sessions list --state task_finished --limit 5 --json\npine sessions list --state task_processing --json\n\nGet session details and conversation history\npine sessions get SESSION_ID --json\npine sessions get SESSION_ID --limit 10 --json\n\nCreate a session\npine sessions create --json\n\nDelete a session\npine sessions delete SESSION_ID\npine sessions delete SESSION_ID --force\n\nTask Lifecycle\npine task start SESSION_ID    # start task execution\npine task stop SESSION_ID     # stop a running task\n\nOne-shot Message\n\nSend a single message to an existing session (fire-and-forget):\n\npine send \"What's the status?\" -s SESSION_ID --no-wait --json\n\n\nCreate a new session and send in one step (the session ID is emitted as the first JSON event {\"type\": \"session_created\", \"data\": {\"session_id\": \"...\"}}):\n\npine send \"Cancel my Netflix subscription\" --new --no-wait --json\n\n\nOmit --no-wait to stream Pine's response events (interactive use only — may block for up to 2 minutes).\n\nBest practices for agents\nAlways use --json for machine-readable output when parsing responses.\nCheck sessions first — run pine sessions list --json before creating a new session to avoid duplicates. Treat it as your memory.\nGather info upfront — collect account numbers, PINs, addresses, target outcomes, acceptable ranges, and walk-away conditions from the user before sending to Pine. This reduces back-and-forth.\nNever guess sensitive info — if Pine asks for OTPs, PINs, or security answers, always ask the user.\nStay engaged after task start — Pine will continue needing input during execution.\nRelay urgent events immediately — three-party calls, OTP requests, and scheduling confirmations are time-sensitive.\nUse background agents — for long-running tasks (5-60+ minutes), use sessions_spawn or equivalent to poll in the background while remaining available to the user.\nDon't preemptively reject requests — let Pine decide whether it can handle a task.\nPro subscription required for task execution.\nSession URL: The user can always check progress at https://www.19pine.ai/app/chat/SESSION_ID\nExamples\n\nNegotiate a bill: \"Negotiate my Comcast bill. Account: Jane Doe, #12345. Currently paying $120/mo for 200Mbps internet. Target: $80/mo. I've been a customer for 10 years. Willing to switch providers if needed.\"\n\nCancel a subscription: \"Cancel my Hulu subscription. Account email: jane@example.com. Reason: not using it enough.\"\n\nMake a reservation: \"Book a table for 4 at The French Laundry for Saturday at 7pm. Name: Jane Doe, phone: +14155551234.\"\n\nDispute a charge: \"Dispute a $50 charge on my Chase Visa ending in 4321. Transaction date: Feb 1. Merchant: XYZ Corp. I never authorized this purchase.\"\n\nFind and book a nearby restaurant: \"Find a good Italian restaurant near downtown SF and make a reservation for 2 tonight at 7pm.\"\n\nAlso available: Pine Voice\n\nThe same pine CLI includes voice call commands for direct phone calls:\n\npine voice call --to \"+14155551234\" --name \"Dr. Smith\" --context \"...\" --objective \"...\"\npine voice status CALL_ID\n\n\nSee the pine-voice skill for full voice call documentation.\n\nPrivacy\n\nPine processes task data on Pine AI's servers. Credentials are stored locally at ~/.pine/config.json. See https://www.19pine.ai/page/privacy-policy for data handling policies."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/bojieli/pine-assistant",
    "publisherUrl": "https://clawhub.ai/bojieli/pine-assistant",
    "owner": "bojieli",
    "version": "1.2.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/pine-assistant",
    "downloadUrl": "https://openagent3.xyz/downloads/pine-assistant",
    "agentUrl": "https://openagent3.xyz/skills/pine-assistant/agent",
    "manifestUrl": "https://openagent3.xyz/skills/pine-assistant/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/pine-assistant/agent.md"
  }
}