> ## Documentation Index
> Fetch the complete documentation index at: https://docs.withmithras.com/llms.txt
> Use this file to discover all available pages before exploring further.

# FYP Comment Growth

> Build valid manual FYP comment-growth requests.

# FYP Comment Growth

`fyp_comment_growth` is a public manual capability for scanning the For You feed and posting selected top-level comments.

## Current Restriction

The current code treats `fyp_comment_growth` as:

* implemented
* `manual_only`
* not allowed for unattended execution
* top-level comment placement only

That means:

* `mode: "manual"` is allowed
* `mode: "unattended"` is rejected
* `placement: "reply"` is rejected

## What It Does

Phonefarm turns an `fyp_comment_growth` request into a `fyp_comment_growth_session` execution plan that:

1. Opens the For You feed.
2. Scans up to `max_scans` videos.
3. Uses the caller-provided `fyp_judge_prompt` to decide whether each video is a good fit.
4. Chooses comment text from `comment_pack` or `fyp_comment_prompt`.
5. Posts top-level comments until `target_comment_count` is reached or the scan limit is hit.

## Minimal Valid Request

```json theme={null}
{
  "request_id": "fyp-growth-2026-05-09-001",
  "capability": "fyp_comment_growth",
  "mode": "manual",
  "target": {
    "routing": "direct",
    "phone_id": "phone_01",
    "account_id": "account_user095916355"
  },
  "inputs": {
    "target_comment_count": 3,
    "max_scans": 30,
    "placement": "top_level",
    "comment_pack": [
      "this is worth noticing",
      "wait this is actually useful"
    ],
    "fyp_judge_prompt": {
      "prompt_id": "ugc.fyp.judge.relationship.v1",
      "name": "FYP Judge Relationship V1",
      "version": "1",
      "system_prompt": "You are judging TikTok FYP fit.",
      "task_prompt": "Return a strict fit judgement for the target audience.",
      "output_contract": {
        "type": "json_object"
      }
    },
    "dynamic_comment_policy": "high_fit_only",
    "dismiss_app_on_finish": true
  },
  "callback": {
    "url": "https://ugc-tracker.example.com/phonefarm/process-updates",
    "metadata": {}
  },
  "requested_by": {
    "system": "ugc-tracker",
    "user": "operator@example.com",
    "metadata": {}
  }
}
```

## Inputs

| Field                       | Type      | Notes                                                                                           |
| --------------------------- | --------- | ----------------------------------------------------------------------------------------------- |
| `target_comment_count`      | integer   | Defaults to `3`. Must be positive.                                                              |
| `max_scans`                 | integer   | Defaults to `30`. Must be at least `target_comment_count`.                                      |
| `placement`                 | string    | Defaults to `top_level`. Only `top_level` is supported.                                         |
| `comment_pack`              | string\[] | Optional explicit comment pool. Required when `dynamic_comment_policy` is `pack_only`.          |
| `fyp_profile_override`      | object    | Optional local profile override.                                                                |
| `fyp_judge_prompt`          | object    | Required.                                                                                       |
| `fyp_comment_prompt`        | object    | Required when dynamic comments are needed and no usable `comment_pack` is provided.             |
| `dynamic_comment_policy`    | string    | `high_fit_only`, `every_good_video`, or `pack_only`. Defaults to `high_fit_only`.               |
| `dynamic_reason_tags`       | string\[] | Optional filter for dynamic comment generation.                                                 |
| `max_dynamic_comment_calls` | integer   | Optional cap for dynamic comment generation. Defaults to `3`.                                   |
| `mention_policy`            | string    | Optional policy label forwarded to runtime.                                                     |
| `strategy`                  | string    | Optional caller strategy label. Defaults to `fyp_comment_growth`.                               |
| `dedupe_key`                | string    | Optional caller-owned dedupe key. Phonefarm preserves it but does not enforce cross-run dedupe. |
| `context`                   | object    | Optional caller context forwarded to runtime.                                                   |
| `like_probability`          | number    | Optional like probability override.                                                             |
| `save_probability`          | number    | Optional save probability override.                                                             |
| `watch_seconds_min`         | integer   | Optional watch lower bound.                                                                     |
| `watch_seconds_max`         | integer   | Optional watch upper bound.                                                                     |
| `dismiss_app_on_finish`     | boolean   | Defaults to `true`.                                                                             |
| `debug_trace`               | boolean   | Defaults to `false`.                                                                            |

## Validation Rules

* `target_comment_count` must be greater than `0`.
* `max_scans` must be greater than `0` and at least `target_comment_count`.
* `placement` must be `top_level`.
* `dynamic_comment_policy` must be `high_fit_only`, `every_good_video`, or `pack_only`.
* `fyp_judge_prompt` is always required.
* If `dynamic_comment_policy` is `pack_only`, `comment_pack` must contain at least one non-empty string.
* If `dynamic_comment_policy` is not `pack_only`, provide either `fyp_comment_prompt` or a non-empty `comment_pack`.

## Partial Completion

This capability can end with partial progress when it scans or comments but does not reach the requested count. Public status becomes `failed_terminal`; inspect `partial_progress`, `result`, `error`, and `linked_ids` for operator-facing detail.

## Read Next

* [Capability Requests](../api/capability-requests)
* [Capability Registry](../reference/capability-registry)
* [Webhooks](./webhooks)
