manage-freeze-windows — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited manage-freeze-windows (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Create and toggle Harness deployment freeze windows via MCP. A freeze window blocks pipeline executions within a time window so you can enforce change freezes for releases, holidays, or maintenance.
| Tool | Resource Type | Purpose |
|---|---|---|
harness_list | freeze_window | List project freeze windows, filter by status / time / keyword |
harness_get | freeze_window | Get a single freeze window by identifier |
harness_create | freeze_window | Create a freeze window from YAML |
harness_update | freeze_window | Replace an existing freeze window's YAML definition |
harness_delete | freeze_window | Delete a freeze window |
harness_execute (action: toggle_status) | freeze_window | Enable / disable one or more freeze windows in bulk |
harness_get | global_freeze | Get the current project-level global freeze state |
harness_execute (action: manage) | global_freeze | Enable or disable the project global freeze from YAML |
harness_schema | freeze_window | Exact JSON Schema for the create / update body |
Both resources are project-scoped — every call needs org_id and project_id.
Create/update bodies take a raw freeze YAML string passed as body: { yaml: "<yaml string>" }. The MCP server forwards it to the Harness API with Content-Type: application/yaml.
freeze:
name: Q4 Release Freeze
identifier: q4_release_freeze
entityConfigs:
- name: All Services
entities:
- type: Service
filterType: All
- type: Environment
filterType: All
- type: EnvType
filterType: All
- type: Org
filterType: All
- type: Project
filterType: All
status: Enabled # Enabled | Disabled
description: "Change freeze for Q4 GA release"
windows:
- timeZone: America/Los_Angeles
startTime: 2026-12-20 00:00 AM
duration: 14d # e.g. 2h, 3d, 14d, 4w
recurrence:
type: Yearly # Daily | Weekly | Monthly | Yearly (optional)
notificationRules: []Use harness_schema(resource_type="freeze_window") if you want the authoritative field list. Key rules:
identifier matches ^[a-zA-Z_][0-9a-zA-Z_]{0,127}$.entityConfigs is required and must match at least one deployment scope.windows[].duration accepts h, d, w suffixes (no seconds).windows[].startTime format: YYYY-MM-DD HH:mm AM|PM in the given timeZone.Call MCP tool: harness_list
Parameters:
resource_type: "freeze_window"
org_id: "<organization>"
project_id: "<project>"
freeze_status: "Enabled" # optional: Enabled | Disabled
search_term: "release" # optional: keyword filter
start_time: 1735689600000 # optional: epoch ms lower bound
end_time: 1738368000000 # optional: epoch ms upper boundCall MCP tool: harness_get
Parameters:
resource_type: "freeze_window"
resource_id: "<freeze_identifier>"
org_id: "<organization>"
project_id: "<project>"Call MCP tool: harness_create
Parameters:
resource_type: "freeze_window"
org_id: "<organization>"
project_id: "<project>"
body:
yaml: |
freeze:
name: Holiday Freeze
identifier: holiday_freeze
entityConfigs:
- name: All Services
entities:
- type: Service
filterType: All
- type: Environment
filterType: All
- type: EnvType
filterType: All
status: Enabled
windows:
- timeZone: America/Los_Angeles
startTime: 2026-12-22 06:00 PM
duration: 10dharness_update performs a full replace of the YAML — include every field you want to keep.
Call MCP tool: harness_update
Parameters:
resource_type: "freeze_window"
resource_id: "<freeze_identifier>"
org_id: "<organization>"
project_id: "<project>"
body:
yaml: "<full updated freeze YAML>"Call MCP tool: harness_execute
Parameters:
resource_type: "freeze_window"
action: "toggle_status"
org_id: "<organization>"
project_id: "<project>"
status: "Enabled" # Enabled | Disabled
body:
freeze_ids: ["holiday_freeze", "q4_release_freeze"]Pass an array of identifiers — toggle works in bulk. Use this instead of editing the YAML when you just need to flip enabled/disabled.
Call MCP tool: harness_delete
Parameters:
resource_type: "freeze_window"
resource_id: "<freeze_identifier>"
org_id: "<organization>"
project_id: "<project>"Call MCP tool: harness_get
Parameters:
resource_type: "global_freeze"
org_id: "<organization>"
project_id: "<project>"Returns { status: "Enabled" | "Disabled", ... }. The global freeze is a singleton — there is exactly one per project scope, no resource_id needed.
Call MCP tool: harness_execute
Parameters:
resource_type: "global_freeze"
action: "manage"
org_id: "<organization>"
project_id: "<project>"
body:
yaml: |
freeze:
name: Project Global Freeze
identifier: _global_
status: Enabled # Enabled | Disabled
entityConfigs:
- name: All
entities:
- type: Service
filterType: All
- type: Environment
filterType: All
- type: EnvType
filterType: All
windows:
- timeZone: UTC
startTime: 2026-12-22 00:00 AM
duration: 14dThe global freeze takes effect immediately when status: Enabled — pipelines at the project scope will start being blocked.
/manage-freeze-windows
Create a holiday freeze window called "Winter 2026 Shutdown" in org default, project payments,
covering all services and environments, from 2026-12-22 6pm PT for 14 days./manage-freeze-windows
List every Enabled freeze window in project "payments" and also show me whether the project global
freeze is on./manage-freeze-windows
Disable all Enabled freeze windows in project "payments" temporarily so I can ship a hotfix./manage-freeze-windows
Enable the global freeze for project "payments" right now with a 4-hour duration in UTC —
we're running incident response./manage-freeze-windows
Show me every freeze window in project "release-ops" whose start_time is in the next 30 days.entityConfigs, windows, notificationRules) are required.global_freeze per project).harness_get reads it, harness_execute(action="manage") flips it on or off via YAML.timeZone is an IANA name (e.g. America/Los_Angeles, Europe/Berlin), not an offset. The server interprets startTime in that zone.body must include yaml (freeze YAML string with 'freeze:' root)You passed the body as a plain YAML string or JSON object — the bodyBuilder expects the outer shape body: { yaml: "<yaml string>" }. Wrap your YAML string in a yaml key.
INVALID_REQUEST on createentityConfigs is present and non-empty. entityConfigs[].entities must include at least Service and Environment (or EnvType) filters.identifier matches ^[a-zA-Z_][0-9a-zA-Z_]{0,127}$ — hyphens and dots are not allowed in identifiers.duration values use suffixes (2h, 3d, 14d, 4w) — raw numbers without a suffix are rejected.DUPLICATE_IDENTIFIERA freeze window with that identifier already exists at the same project scope. Either harness_update the existing one or pick a new identifier.
toggle_status expects body.freeze_ids as an array of strings, even for a single window. Pass body: { freeze_ids: ["my_freeze"] }, not body: "my_freeze" or resource_id: "my_freeze".
status is Enabled and not Disabled — harness_get will show the current status.windows[].startTime and duration — if the current time is outside the window, the freeze is scheduled but not active.entityConfigs actually cover the service/environment you're deploying to — a freeze with Service: filterType: NotEquals / entityRefs: [payments] will not block payments.Disabled is enough to let a deployment through if that's the only one matching.Active (currently firing) freeze windows cannot be deleted in some account tiers — Disabled them first via toggle_status then harness_delete.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.