# Send Air France - KLM to your agent
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
## Fast path
- 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.
## Suggested prompts
### New install

```text
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete.
```
### Upgrade existing

```text
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. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run.
```
## Machine-readable fields
```json
{
  "schemaVersion": "1.0",
  "item": {
    "slug": "airfrance-afkl",
    "name": "Air France - KLM",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/iclems/airfrance-afkl",
    "canonicalUrl": "https://clawhub.ai/iclems/airfrance-afkl",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadUrl": "/downloads/airfrance-afkl",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=airfrance-afkl",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "packageFormat": "ZIP package",
    "primaryDoc": "SKILL.md",
    "includedAssets": [
      "README.md",
      "scripts/aircraft_intel.mjs",
      "scripts/afkl_watch_flight.mjs",
      "scripts/afkl_flightstatus_query.mjs",
      "scripts/afkl_http.mjs",
      "SKILL.md"
    ],
    "downloadMode": "redirect",
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.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/airfrance-afkl"
    },
    "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."
      ]
    }
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/airfrance-afkl",
    "downloadUrl": "https://openagent3.xyz/downloads/airfrance-afkl",
    "agentUrl": "https://openagent3.xyz/skills/airfrance-afkl/agent",
    "manifestUrl": "https://openagent3.xyz/skills/airfrance-afkl/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/airfrance-afkl/agent.md"
  }
}
```
## Documentation

### Quick start (one-off status)

Create an API key (and optional secret)

Register on: https://developer.airfranceklm.com
Subscribe to the Open Data product(s) you need (at least Flight Status API)
Generate credentials (API key; some accounts also provide an API secret)

Provide API credentials (do not print them):

Preferred: env vars AFKL_API_KEY (and optional AFKL_API_SECRET)
Or files in your state dir (CLAWDBOT_STATE_DIR or ./state):

afkl_api_key.txt (chmod 600)
afkl_api_secret.txt (chmod 600, optional)

Query flight status:

Run: node skills/airfrance-afkl/scripts/afkl_flightstatus_query.mjs --carrier AF --flight 7 --origin JFK --dep-date 2026-01-29

Notes:

Send Accept: */* (API returns application/hal+json).
Keep within limits: <= 1 request/sec. When making multiple calls, sleep ~1100ms between them.

### Start monitoring (watcher)

Use when the user wants proactive updates.

Run: node skills/airfrance-afkl/scripts/afkl_watch_flight.mjs --carrier AF --flight 7 --origin JFK --dep-date 2026-01-29

What it does:

Fetches the operational flight(s) for the date window.
Emits a single message only when something meaningful changes.
Also follows the previous-flight chain (flightRelations.previousFlightData.id) up to a configurable depth and alerts if a previous segment is delayed/cancelled.

Polling strategy (default):

36h before departure: at most every 60 min


36h→12h: every 30 min
12h→3h: every 15 min
3h→departure: every 5–10 min (stay under daily quota)
After departure: every 30 min until arrival

Implementation detail: run cron every 5–15 min, but the script self-throttles using a state file so it won’t hit the API when it’s not time. The watcher prints no output when nothing changed (so cron jobs can send only when stdout is non-empty).

### Input shorthand

Preferred user-facing format:

AF7 demain / AF7 jeudi

Interpretation rule:

The day always refers to the departure date (not arrival).

Implementation notes:

Convert relative day words to a departure date in the user’s timezone unless the origin timezone is explicitly known.
When ambiguous (long-haul crossing midnight), prefer the departure local date at the origin if origin is known.

(For scripts, still pass --origin + --dep-date YYYY-MM-DD.)

### Interpret “interesting” fields

See references/fields.md for:

flightRelations (prev/next)
places.* (terminal/gate/check-in zone)
times.* (scheduled/estimated/latest/actual)
aircraft (type, registration)
“parking position” / stand-type hints (when present)
Wi‑Fi hints and how to reason about cabin recency

### Cabin recency / upgrade heuristics

When aircraft registration is available:

Use tail number to infer sub-fleet and likely cabin generation.
If data suggests older config (or no Wi‑Fi), upgrading can be more/less worth it.

Be conservative:

Open Data often doesn’t expose exact seat model; treat this as best-effort.
## Trust
- Source: tencent
- Verification: Indexed source record
- Publisher: iclems
- Version: 1.0.1
## Source health
- Status: healthy
- Source download looks usable.
- Yavira can redirect you to the upstream package for this source.
- Health scope: source
- Reason: direct_download_ok
- Checked at: 2026-04-23T16:43:11.935Z
- Expires at: 2026-04-30T16:43:11.935Z
- Recommended action: Download for OpenClaw
## Links
- [Detail page](https://openagent3.xyz/skills/airfrance-afkl)
- [Send to Agent page](https://openagent3.xyz/skills/airfrance-afkl/agent)
- [JSON manifest](https://openagent3.xyz/skills/airfrance-afkl/agent.json)
- [Markdown brief](https://openagent3.xyz/skills/airfrance-afkl/agent.md)
- [Download page](https://openagent3.xyz/downloads/airfrance-afkl)