{
  "title": "YC Company & Hiring Monitor - Startup Profile Changes",
  "type": "object",
  "schemaVersion": 1,
  "properties": {
    "companies": {
      "title": "YC company slugs or profile URLs",
      "type": "array",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "default": [],
      "prefill": [
        "stripe"
      ],
      "description": "Up to20 lowercase company slugs such as stripe, algolia, airbnb, or exact https://www.ycombinator.com/companies/... profile URLs. Empty uses stripe. Search URLs are not supported."
    },
    "maxJobs": {
      "title": "Maximum listed jobs per company",
      "type": "integer",
      "default": 50,
      "minimum": 1,
      "maximum": 100,
      "description": "Jobs are embedded in one company row and are not billed separately. jobsTruncated signals a bounded nested list; missing jobs are not treated as closed roles."
    },
    "maxResults": {
      "title": "Maximum saved companies",
      "type": "integer",
      "default": 5,
      "minimum": 1,
      "maximum": 20,
      "description": "Maximum confirmed company rows. If selected companies remain unprocessed, SUMMARY is partial and comparison history stays unchanged."
    },
    "comparePrevious": {
      "title": "Compare previous saved observations",
      "type": "boolean",
      "default": false,
      "description": "Compare with the last complete successful observation under the same input selection and snapshot name. First comparison establishes a baseline."
    },
    "onlyChanges": {
      "title": "Save only new or changed observations",
      "type": "boolean",
      "default": false,
      "description": "Enables comparison. Unchanged observations are skipped and incur no result event; an unchanged run may correctly produce zero rows."
    },
    "snapshotName": {
      "title": "Snapshot name",
      "type": "string",
      "editor": "textfield",
      "default": "default",
      "description": "Use 1-80 letters, numbers, underscores or hyphens. One active writer per watchlist and snapshot; new names create independent history."
    },
    "maxRunSeconds": {
      "title": "Run budget in seconds",
      "type": "integer",
      "default": 90,
      "minimum": 30,
      "maximum": 180,
      "description": "Shared deadline for all source reads and output. Failed, partial or spending-limited runs do not advance comparison history."
    }
  }
}
