[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-apache-flink-agents-dev":3,"mdc-anmtzk-key":45,"related-repo-apache-flink-agents-dev":1546,"related-org-apache-flink-agents-dev":1555},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":22,"repoUrl":23,"updatedAt":24,"license":25,"forks":26,"topics":27,"repo":40,"sourceUrl":43,"mdContent":44},"flink-agents-dev","build and debug Apache Flink agents","Use when building, scaffolding, modifying, debugging, converting, or verifying Apache Flink Agents applications, including Flink Agents YAML, Workflow Agent, ReAct Agent, Actions, Resources, MCP servers, vector stores, runtime skills, Python, or Java. Do not use for ordinary Flink jobs that do not use Flink Agents.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"apache","Apache Software Foundation","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fapache.png",[12,16,19],{"name":13,"slug":14,"type":15},"Automation","automation","tag",{"name":17,"slug":18,"type":15},"MCP","mcp",{"name":20,"slug":21,"type":15},"Agents","agents",421,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fflink-agents","2026-08-07T05:03:37.315408",null,143,[28,29,30,31,32,33,34,35,36,37,38,39],"agent","agentic-ai","agentic-framework","ai","distributed","event-driven","flink","framework","java","multi-agents","python","real-time",{"repoUrl":23,"stars":22,"forks":26,"topics":41,"description":42},[28,29,30,31,32,33,34,35,36,37,38,39],"Flink Agents is an Agentic AI framework based on Apache Flink","https:\u002F\u002Fgithub.com\u002Fapache\u002Fflink-agents\u002Ftree\u002FHEAD\u002Fdev\u002Fagent-skills\u002Fflink-agents-dev","---\nname: flink-agents-dev\ndescription: Use when building, scaffolding, modifying, debugging, converting, or verifying Apache Flink Agents applications, including Flink Agents YAML, Workflow Agent, ReAct Agent, Actions, Resources, MCP servers, vector stores, runtime skills, Python, or Java. Do not use for ordinary Flink jobs that do not use Flink Agents.\n---\n\n# Developing Flink Agents Applications\n\n## Core Model\n\nModel every application as four connected parts:\n\n1. **Resources**: named models, prompts, tools, skills, vector stores, MCP servers,\n   and connections.\n2. **Actions**: event handlers that use Resources and emit events.\n3. **Orchestration**: trigger conditions and emitted-event graph.\n4. **Implementation**: Python\u002FJava functions, types, and runner.\n\nSkills, vector stores, MCP, RAG, and memory are combinations of these parts.\n\nThe Agent API language and custom Action\u002FTool language do not constrain every\nResource implementation. Chat-model connections\u002Fsetups, embedding-model\nconnections\u002Fsetups, and vector stores support Python\u002FJava bridging in both\ndirections in the bundled snapshot. For those Resource types, offer every\ntarget-version implementation supported natively or through the bridge, regardless\nof whether the application uses YAML, direct Python, or direct Java. Treat the\nselected implementation's language as part of that Resource choice; do not add a\nseparate application-wide cross-language confirmation. Do not generalize this rule\nto Resource types that lack a verified bridge.\n\n## Source Authority\n\nThis skill must work from its installed directory; never assume the user cloned the\nFlink Agents repository. Resolve bundled paths relative to this `SKILL.md`.\n\nInspect the target version and conventions. Use sources in this order:\n\n1. Target application code, dependency metadata, installed package\u002FJAR APIs, and tests.\n2. Version-matching Flink Agents schema, docs, examples, or source when available.\n3. This skill's [YAML contract manifest](assets\u002Fyaml-contracts.yaml), matching\n   bundled schema, and references as the offline baseline.\n\nSelect contracts by the target Flink Agents version, not by the version that\npublished this skill. The manifest maps released versions to complete schemas and\nmarks versions without YAML support. The unversioned\n[main schema](assets\u002Fyaml-schema.json) describes only the repository revision that\npublished this skill. Never validate a released application against that schema\nunless the manifest maps the selected version to it.\n\nDo not invent APIs, versions, or commands from memory.\n\nBefore presenting code as runnable, resolve every nontrivial import, constructor,\nmethod, descriptor argument, and dependency coordinate against those sources. If a\ncontract cannot be resolved, either use a documented alternative or label the\nfragment as pseudocode and state exactly what remains unresolved. Apply\n[Provider Contract Triage](#provider-contract-triage) below to external\ndescriptor-backed Providers before loading bundled references. This blocked\nProvider path is different from an unresolved business contract, which still\nreceives a user-fillable skeleton.\n\n## Preflight\n\nBefore loading a platform adapter, asking a decision gate, or generating files:\n\n1. Confirm that the target is a Flink Agents application or is being converted into\n   one. Leave ordinary Flink jobs outside this workflow.\n2. Inspect the complete user request, existing project, dependency metadata, source,\n   configuration, and tests. Resolve every framework decision already answered by\n   that evidence. The latest explicit user choice takes precedence; treat a conflict\n   with existing project metadata as an intentional requested migration and report\n   it rather than silently restoring the old value.\n3. Record each required framework decision as `confirmed` or `unresolved`: Flink\n   Agents version, Flink version, API, YAML application language when applicable,\n   each descriptor-backed Resource implementation, and the Python environment when\n   Python is required.\n4. Run Provider Contract Triage for every concrete external descriptor-backed\n   Provider already named by the request or project. When the implementation is an\n   unresolved gate, run the triage immediately after the user selects it.\n5. Build the ordered gate list from only the `unresolved` decisions. If the list is\n   empty, skip host detection and interaction adapters and proceed directly to\n   contract resolution and implementation.\n6. For YAML, select the exact target-version schema through\n   [yaml-contracts.yaml](assets\u002Fyaml-contracts.yaml). Filter the API choices when the\n   manifest says that the selected version has no YAML API. If a requested YAML\n   version has no matching schema, stop YAML generation and request the exact\n   target-version schema or source; never substitute the main schema.\n\nKeep this decision record current after every answer. It prevents repeated\nquestions and ensures that later references operate only on confirmed versions and\ncapabilities.\n\n### Provider Contract Triage\n\nThis is an early-exit pass, not a later Build Workflow step. Run it as soon as a\nconcrete external descriptor-backed Provider class or alias is confirmed and before\nreading any file under `references\u002F`.\n\nInspect only evidence that can establish that Provider's contract:\n\n1. Explicit user-supplied JARs, packages, source, tests, or documentation.\n2. The target project's dependency metadata and the exact installed artifact named\n   by that metadata.\n3. Version-matching authoritative Provider source or documentation already available\n   at a known location.\n\nScope every inspection command to the target application's dependency files,\nconfiguration, source roots, and explicitly named artifacts. Exclude the installed\nSkill directory containing this `SKILL.md`, including project-local `.agents\u002F`, and\nexclude host metadata such as `.codex\u002F`, `.claude\u002F`, tool caches, and unrelated home\nor package caches. Do not run an unscoped recursive search over `.` when it would\ntraverse those paths.\n\nDo not load general application, YAML, language, local-development, or verification\nreferences to compensate for a missing Provider artifact. A general YAML schema can\nvalidate descriptor shape but cannot establish a Provider's dependency coordinate,\nconstructor, or forwarded mandatory arguments. When the user explicitly states that\nno Provider artifact or contract source is available, treat that as evidence; check\nthe target project metadata for an existing dependency, but do not search unrelated\ncaches or examples.\n\nThe triage must establish the implementation class or alias, dependency coordinate\nor package, constructor\u002Ffactory contract, and every mandatory descriptor argument.\nIf any element remains unverifiable:\n\n- preserve all working dependency, source, and configuration files;\n- stop the dependent integration immediately, before the normal Build Workflow;\n- do not generate a descriptor, adapter, wrapper, placeholder dependency, or tests;\n- report the exact sources checked, each missing contract element, and the minimum\n  JAR, package, source, test, or documentation needed to continue.\n\nList a source under `checked` only when its content was actually inspected during\nthe triage. Do not claim that a bundled schema, reference, cache, or documentation\nwas checked merely because `SKILL.md` names it.\n\nReturn that blocked report for a Provider-only request. Continue other work only\nwhen the user explicitly requested an independent change that does not depend on the\nblocked Provider. If the complete Provider contract is verified, proceed with the\nnormal workflow using that evidence.\n\n## Definition Strategy\n\n| Situation | Recommendation |\n|---|---|\n| New Workflow Agent or rewired event graph | Offer YAML plus Python\u002FJava implementation files |\n| Existing YAML application | Preserve and extend YAML |\n| Existing programmatic Agent | Preserve its current API unless conversion is requested |\n| `ReActAgent`, unsupported YAML surface, or explicit code-only request | Direct Python or Java API |\n\nFor a new application, derive the available API choices from the confirmed target\nversion. Present YAML, direct Python API, and direct Java API when all three are\nsupported; otherwise omit unsupported surfaces. A recommendation explains the\ntradeoff; it is not permission to select the API for the user.\n\nYAML does not declare an agent `type`. Do not add `type: workflow` or\n`type: react`; `type` selects an implementation language where the schema allows it.\n\nYAML does not choose the business implementation language either. For a new YAML\napplication, ask the user to choose Python or Java before generating files. For an\nexisting application, detect and preserve the language from build metadata, source\nfiles, function references, and explicit YAML `type` fields. Do not default to\nPython merely because omitted YAML `type` fields currently resolve to Python.\n\nWorkflow Agents already include built-in chat, tool-call, and context-retrieval\nActions. A model reasoning\u002Ftool loop can therefore remain YAML-defined. Choose\n`ReActAgent` only when the user explicitly wants that programmatic abstraction, the\nexisting application already uses it, or a required ReAct-specific surface is not\navailable through YAML.\n\n## Scaffolding Boundary\n\nComplete framework-owned wiring, but do not invent business behavior. Before\nimplementing each custom Action, Tool, domain client, data transformation, Prompt,\nor runtime Skill, classify these contract elements from only explicit user\nrequirements, existing code, and existing tests:\n\n| Contract element | `supplied` means |\n|---|---|\n| Input | Required fields and their meaning are defined |\n| Output | Result fields or emitted Events are defined |\n| Transformation | Input-to-output or message construction is defined |\n| Side effects | External calls, state changes, and authentication boundary are defined |\n| Errors | Required failure and fallback behavior is defined |\n\nAnything not established by those sources is `unresolved`; a high-level capability\nname is not a supplied contract. When behavior depends on an unresolved element,\ngenerate only an importable or compilable signature skeleton with focused TODOs and\nan explicit `NotImplementedError` or `UnsupportedOperationException`. Preserve\nuser-provided names, parameters, types, and descriptions. When those are absent,\nderive a stable capability name and use the narrowest framework-compatible\nsignature; for a function Tool or domain client with no typed contract, use one\nopaque string request and string result.\n\nAn unresolved skeleton must not emit business Events, transform payloads, compose\nPrompt or chat messages, call a backend, return business data, or provide fallback\nbehavior. Tests may check import\u002Fcompilation, signature and YAML reference\nresolution, and explicit failure, but must not assert business behavior that was\nnot supplied.\n\nDo not author domain rules, REST endpoints, diagnostic procedures, prompts, data\nmodels, Tool results, runtime Skill instructions, or test doubles from a high-level\napplication idea. Do not propose a standard REST API, MCP server, or mock backend as\nthe implementation of a custom Tool. Do not ask the user to lock a business input\nidentity schema, deployment platform, service API, authentication design, or log\u002F\nmetric backend merely to scaffold the application. Generate the neutral skeleton\nand leave those choices as TODOs for the user. Built-in Flink Agents Actions are\nframework behavior and need no generated implementation.\n\n## Interaction Discipline\n\nThis section is the sole authority for interaction capability detection, fallback\nselection, retry behavior, and host-mode handling. Platform adapters only describe\nhow to encode a question for a tool that this section selected; other references\nmust point here instead of restating this policy.\n\nProcess the unresolved decisions from Preflight as sequential gates. Ask only the\ncurrent gate, wait for the answer, update the decision record, and continue. Never\nsend one proposed baseline that bundles versions, API, implementation language,\nruntime version, Resource implementations, business backends, and mock behavior.\n\nOnly when at least one unresolved closed gate remains, identify the current host\nfrom explicit system and tool context. Use this table to select the sole candidate\ntool and adapter for the gate:\n\n| Host | Candidate structured tool | Adapter |\n|---|---|---|\n| Codex | `request_user_input` | [codex.md](references\u002Fplatforms\u002Fcodex.md) |\n| Claude Code | `AskUserQuestion` | [claude-code.md](references\u002Fplatforms\u002Fclaude-code.md) |\n| Gemini CLI | `ask_user` communication tool | [gemini-cli.md](references\u002Fplatforms\u002Fgemini-cli.md) |\n| Qoder | Explicitly exposed structured single-select tool, if any | [qoder.md](references\u002Fplatforms\u002Fqoder.md) |\n| Unknown or unsupported | Explicitly exposed structured single-select tool, if any | [generic.md](references\u002Fplatforms\u002Fgeneric.md) |\n\nTreat the current tool contract as the only capability signal. When the table's\ncandidate is exposed and callable, read its adapter to encode one question. An\nadapter must not perform capability discovery or select a fallback. If the candidate\nis absent, returns an availability error, or cannot represent the complete valid\noption set without altering or obscuring it, immediately read\n[generic.md](references\u002Fplatforms\u002Fgeneric.md) and use its numbered fallback. Do not\nretry the tool, ask the user to change modes, require a slash command or keyboard\nshortcut, perform a post-interview handoff, add host metadata, or install host\nconfiguration in the generated application.\n\nNever use an open-ended text question when the valid options are already known.\nWhen a gate has a recommendation, place it first and label it `(Recommended)`, but\ndo not preselect or continue without the user's answer. The YAML\nimplementation-language gate intentionally has no recommendation: present Python\nand Java as equal peer options with parallel descriptions and no `(Recommended)`\nlabel.\n\nUse this order:\n\n1. If unresolved, ask for the Flink Agents version and wait. Then offer only\n   compatible Flink versions and wait for the Flink choice. Do not mention\n   Python\u002FJDK versions, an Agent API, a model provider, or business architecture in\n   these version questions.\n2. If unresolved, ask the user to choose among the APIs supported by the confirmed\n   Flink Agents version. Offer YAML only when its exact contract is available. Wait.\n3. Only when YAML is selected, ask whether custom Actions, function Tools, and the\n   Flink entry point use Python or Java. Resource implementations are selected\n   independently at their own gates. Direct Python or Java API already determines\n   the application-code choice. Do not recommend, preselect, or imply a preference\n   for either YAML implementation language. Only now resolve a compatible Python or\n   JDK version.\n4. Inventory the Resources required by the user's stated design. Resolve real\n   descriptor-backed framework integrations one at a time and wait before moving to\n   the next integration. Assign a deterministic internal name, ask for its\n   implementation class or documented alias, and stop the interview for that\n   Resource. Immediately run Provider Contract Triage after the implementation\n   choice; it verifies the target-version constructor and descriptor. If it passes,\n   generate every mandatory configuration key as `TODO_REQUIRED_\u003CFIELD>` for the\n   user to fill. Do not ask about another Resource or load general references before\n   the triage result.\n   For chat-model connections\u002Fsetups, embedding-model connections\u002Fsetups, and vector\n   stores, do not filter candidates by the Agent API or application-code language.\n   Present all verified Python and Java implementations, label each candidate's\n   implementation language when needed for disambiguation, and generate the matching\n   bridge declaration and runtime dependencies after selection.\n   Do not ask for model identifiers, endpoints, credential values\u002Fmechanisms,\n   provider options, Skill source paths\u002FURLs\u002Fpackages, or other Resource arguments.\n   Custom Actions, function Tools, domain clients, Prompt content, runtime Skill\n   instructions, business input schemas, and backend platforms are not integration\n   gates: scaffold them without a business interview. Do not ask the user to name a\n   single Resource or repeat a generated reference. Ask about naming only when\n   multiple Resources need semantic disambiguation, an existing external reference\n   constrains the name, or the user requested a naming convention.\n5. As soon as the confirmed design first requires a Python runtime, pause before\n   environment creation or dependency installation. Unless the existing project\n   already declares its environment unambiguously, inspect compatible local Python\n   executables\u002Fenvironments and ask whether to reuse one of them or create a\n   project-local `.venv`. Wait for the choice and use the selected interpreter for\n   every install, import, test, and local run. This conditional gate fires\n   immediately after the choice that introduces Python; do not delay it until the\n   end of the Resource interview.\n6. After every framework decision is confirmed, design the Action graph and generate\n   the project. Do not add a host-specific handoff.\n\nDo not infer OpenAI, Ollama, any model name, an environment-variable credential,\nSkill distribution, MCP, a vector store, or a domain-service protocol. After a\nframework implementation is selected, do not run a second configuration interview.\nGenerate a declaration or builder scaffold that names every verified mandatory\nargument and leaves its value explicit for the user. For YAML string fields, use a\nclear placeholder such as `TODO_REQUIRED_API_KEY`; for direct APIs, generate a\ncompilable factory skeleton that lists the required arguments and fails explicitly\nuntil they are filled. If the user already supplied a value or explicitly requested\nplaintext in local YAML, use that instruction; keep supplied secrets out of tracked\nfiles and output. Never claim `${ENV_VAR}` is interpolated unless the target loader\nor provider actually implements it.\n\nThe conditional Python-environment gate is dependency management, not Resource\nconfiguration. It still runs when a selected Resource introduces Python, but it asks\nonly which concrete compatible Python environment to use, never provider values.\n\n## Build Workflow\n\n1. Run Preflight, including Provider Contract Triage for every concrete external\n   Provider already named by the request or project. If a Provider is blocked, issue\n   its report and stop before reading any bundled reference.\n2. Read [application patterns](references\u002Fapplication-patterns.md), then ask only the\n   ordered unresolved gates. Do not repeat decisions already confirmed by the user\n   or project.\n3. When versions are unresolved, complete the version gates in\n   [local development](references\u002Flocal-development.md): Flink Agents first, then a\n   compatible Flink version. Do not generate files or combine later decisions into\n   these questions.\n4. Complete the API gate with only APIs supported by the confirmed target version.\n   For YAML, read [YAML patterns](references\u002Fyaml-patterns.md), select the exact\n   schema through [yaml-contracts.yaml](assets\u002Fyaml-contracts.yaml), and reject\n   generation when no exact contract is available.\n5. If YAML was selected, complete the implementation-language gate. Then read\n   [Python patterns](references\u002Fpython-patterns.md) or\n   [Java patterns](references\u002Fjava-patterns.md) for the application code. When a\n   bridge-supported Resource uses the other language, also read that language's\n   cross-language Resource section; selecting that Resource is already explicit\n   confirmation.\n6. Inventory each Resource and assign stable names automatically. Ask only which\n   documented implementation alias\u002Fclass to use for actual framework integrations.\n   For bridge-supported types, build this choice from both Python and Java\n   implementations instead of the application-code language alone. Inspect the\n   selected implementation through Provider Contract Triage before loading more\n   references or moving to another integration. When it passes, add its integration\n   and bridge dependencies and scaffold all mandatory configuration keys without\n   asking for their values.\n   Classify every custom Tool\u002FAction\u002FPrompt\u002Fruntime-Skill business contract before\n   generating its skeleton; do not ask the user to choose a domain platform or\n   complete an unresolved input contract. Generate and record all cross-references\n   without asking the user to repeat internal identifiers. Never select a provider,\n   model, endpoint, credential source, business backend, or integration from the\n   application domain alone.\n7. When runtime Skills are requested, preserve an explicit source in an existing\n   application. For a new application, generate a minimal runtime `SKILL.md` business\n   scaffold plus a source-configuration TODO that lists the valid `paths`, `urls`,\n   Python `package`, and Java `classpath` forms. Do not ask for loading paths or\n   distribution, and never inspect, copy, or offer to reuse Skills installed in the\n   coding-agent host, such as a local `flink-diag`; coding-agent Skills and Flink\n   runtime Skills are different artifacts. Read\n   [YAML patterns](references\u002Fyaml-patterns.md#runtime-skills).\n8. Draw only framework Action graph edges established by built-in contracts or\n   supplied business contracts. Where an emitted Event, payload transformation,\n   branch, output, or error contract is unresolved, generate the Action signature\n   and explicit failure but do not claim or implement that edge. Do not turn those\n   TODOs into more gates.\n9. Use only documented built-in Actions. Generate a resolvable, correctly typed\n   signature skeleton for every other Action and reference it as\n   `\u003Cmodule-or-class>:\u003Cqualname>`; leave its business body for the user unless they\n   explicitly requested implementation.\n10. Resolve concrete API calls and dependency coordinates from the target-version\n   artifacts before generating the complete executable project. For Java, generate\n   a Maven project with\n   `flink-agents-api`, `flink-agents-plan`, `flink-agents-runtime`, and only the\n   integrations actually used; declare all Flink Agents and Flink dependencies as\n   `provided`. Whenever the design requires Python, generate source and dependency\n   files, resolve the Python environment choice when not already declared, and\n   install the resolved Flink Agents, PyFlink, and integration dependencies into the\n   selected existing environment or project-local `.venv`. Read\n   [local development](references\u002Flocal-development.md). Preserve versions already\n   selected by the target project; never guess one.\n11. Connect the Agent to a Flink DataStream or Table through the public factory backed\n   by `RemoteExecutionEnvironment`. Local validation submits that same remote-style\n   job to a MiniCluster. Never use a local Agents environment, a no-argument factory,\n   `from_list`\u002F`to_list`, or their Java equivalents.\n12. Run the checks in [verification](references\u002Fverification.md) before claiming\n   the application is valid or runnable.\n\n## Required Output\n\n- Complete framework files or edits, including every custom function signature and\n  a remote-style Flink job entry point.\n- A runnable Maven project for Java and, whenever Python is required, pinned Python\n  dependency input plus the user-selected existing environment or populated\n  project-local `.venv`.\n- User-confirmed Flink Agents and Flink versions. Never silently choose the bundled\n  recommended versions for a new project.\n- A user-confirmed API choice from the surfaces supported by the selected Flink\n  Agents version.\n- A user-confirmed Python or Java application-code language for every new YAML\n  application, reflected consistently in project layout, custom Action\u002FTool function\n  references, and the Flink entry point. Do not use it to filter bridge-supported\n  Resource implementations.\n- For applications using runtime Skills, a user-fillable Skill business scaffold\n  and source-configuration TODO. Preserve existing source configuration, but do not\n  ask a new-project user to choose distribution or reuse coding-agent host Skills.\n- Resource declarations built from user-selected implementation aliases\u002Fclasses,\n  including independent Resource implementation language and bridge wiring where\n  supported, with every verified mandatory provider key present and marked for user\n  input.\n  Keep model, endpoint, credential, and optional provider values unresolved instead\n  of interviewing for them or choosing defaults.\n- Deterministic Resource names and references generated by the coding agent. Do not\n  require the user to name ordinary Connection, Setup, Prompt, Skill container,\n  VectorStore, or MCP Resource identifiers when there is no ambiguity.\n- When the user chooses plaintext credentials for local testing, a loader-compatible\n  local YAML that is excluded from version control and actually used by the local\n  run command. Do not replace this explicit choice with programmatic registration.\n- Explicit user-fillable business skeletons for custom Actions, Tools, prompts,\n  runtime Skills, domain clients, secrets, endpoints, and external data, backed by\n  the supplied\u002Funresolved contract classification. Keep framework wiring and\n  signatures concrete instead of replacing them with fabricated business\n  implementation.\n- A final consolidated `User must provide` list for unresolved business input\n  fields, platform clients, authentication, queries, response mapping, and domain\n  behavior. These items must not block project scaffolding or become Agent workflow\n  decisions unless the user explicitly asks for their implementation.\n- Exact commands that match the target repository's build tooling; no guessed\n  package, Flink, provider, model, or plugin versions.\n- Framework snippets whose imports and API calls resolve in the target version.\n  Business skeletons must import or compile, fail explicitly when invoked, and be\n  labeled user-fillable rather than runnable behavior.\n- For YAML, the selected contract key and exact schema path used for validation.\n- Evidence separated into schema, load\u002Fcompile, tests, and runtime.\n- A clear statement for every check that was not run or requires an external service.\n\n## Quick Reference\n\n| Task | Read |\n|---|---|\n| Present closed choices in the current coding agent | [Interaction Discipline](#interaction-discipline), then its selected platform adapter |\n| Select Agent\u002FAPI shape; design Resources and event graph | [application-patterns.md](references\u002Fapplication-patterns.md) |\n| Author or review YAML; resolve names and functions | [yaml-patterns.md](references\u002Fyaml-patterns.md) |\n| Scaffold runtime Skill business and source TODOs | [runtime Skills](references\u002Fapplication-patterns.md#scaffold-runtime-skills) |\n| Scaffold Python Actions, Tools, types, or runner | [python-patterns.md](references\u002Fpython-patterns.md) |\n| Scaffold Java Actions, Tools, resources, or runner | [java-patterns.md](references\u002Fjava-patterns.md) |\n| Select versions, generate dependencies, and submit to MiniCluster | [local-development.md](references\u002Flocal-development.md) |\n| Validate schema, references, imports, compilation, and execution claims | [verification.md](references\u002Fverification.md) |\n| Select and validate YAML without a source checkout | [YAML contract manifest](assets\u002Fyaml-contracts.yaml) |\n",{"data":46,"body":47},{"name":4,"description":6},{"type":48,"children":49},"root",[50,59,66,72,118,123,128,134,148,153,180,193,198,211,217,222,285,290,296,308,313,331,374,379,384,408,428,433,439,525,530,566,585,597,603,608,701,728,733,738,744,749,754,759,909,920,940,945,994,1015,1020,1026,1269,1275,1372,1378],{"type":51,"tag":52,"props":53,"children":55},"element","h1",{"id":54},"developing-flink-agents-applications",[56],{"type":57,"value":58},"text","Developing Flink Agents Applications",{"type":51,"tag":60,"props":61,"children":63},"h2",{"id":62},"core-model",[64],{"type":57,"value":65},"Core Model",{"type":51,"tag":67,"props":68,"children":69},"p",{},[70],{"type":57,"value":71},"Model every application as four connected parts:",{"type":51,"tag":73,"props":74,"children":75},"ol",{},[76,88,98,108],{"type":51,"tag":77,"props":78,"children":79},"li",{},[80,86],{"type":51,"tag":81,"props":82,"children":83},"strong",{},[84],{"type":57,"value":85},"Resources",{"type":57,"value":87},": named models, prompts, tools, skills, vector stores, MCP servers,\nand connections.",{"type":51,"tag":77,"props":89,"children":90},{},[91,96],{"type":51,"tag":81,"props":92,"children":93},{},[94],{"type":57,"value":95},"Actions",{"type":57,"value":97},": event handlers that use Resources and emit events.",{"type":51,"tag":77,"props":99,"children":100},{},[101,106],{"type":51,"tag":81,"props":102,"children":103},{},[104],{"type":57,"value":105},"Orchestration",{"type":57,"value":107},": trigger conditions and emitted-event graph.",{"type":51,"tag":77,"props":109,"children":110},{},[111,116],{"type":51,"tag":81,"props":112,"children":113},{},[114],{"type":57,"value":115},"Implementation",{"type":57,"value":117},": Python\u002FJava functions, types, and runner.",{"type":51,"tag":67,"props":119,"children":120},{},[121],{"type":57,"value":122},"Skills, vector stores, MCP, RAG, and memory are combinations of these parts.",{"type":51,"tag":67,"props":124,"children":125},{},[126],{"type":57,"value":127},"The Agent API language and custom Action\u002FTool language do not constrain every\nResource implementation. Chat-model connections\u002Fsetups, embedding-model\nconnections\u002Fsetups, and vector stores support Python\u002FJava bridging in both\ndirections in the bundled snapshot. For those Resource types, offer every\ntarget-version implementation supported natively or through the bridge, regardless\nof whether the application uses YAML, direct Python, or direct Java. Treat the\nselected implementation's language as part of that Resource choice; do not add a\nseparate application-wide cross-language confirmation. Do not generalize this rule\nto Resource types that lack a verified bridge.",{"type":51,"tag":60,"props":129,"children":131},{"id":130},"source-authority",[132],{"type":57,"value":133},"Source Authority",{"type":51,"tag":67,"props":135,"children":136},{},[137,139,146],{"type":57,"value":138},"This skill must work from its installed directory; never assume the user cloned the\nFlink Agents repository. Resolve bundled paths relative to this ",{"type":51,"tag":140,"props":141,"children":143},"code",{"className":142},[],[144],{"type":57,"value":145},"SKILL.md",{"type":57,"value":147},".",{"type":51,"tag":67,"props":149,"children":150},{},[151],{"type":57,"value":152},"Inspect the target version and conventions. Use sources in this order:",{"type":51,"tag":73,"props":154,"children":155},{},[156,161,166],{"type":51,"tag":77,"props":157,"children":158},{},[159],{"type":57,"value":160},"Target application code, dependency metadata, installed package\u002FJAR APIs, and tests.",{"type":51,"tag":77,"props":162,"children":163},{},[164],{"type":57,"value":165},"Version-matching Flink Agents schema, docs, examples, or source when available.",{"type":51,"tag":77,"props":167,"children":168},{},[169,171,178],{"type":57,"value":170},"This skill's ",{"type":51,"tag":172,"props":173,"children":175},"a",{"href":174},"assets\u002Fyaml-contracts.yaml",[176],{"type":57,"value":177},"YAML contract manifest",{"type":57,"value":179},", matching\nbundled schema, and references as the offline baseline.",{"type":51,"tag":67,"props":181,"children":182},{},[183,185,191],{"type":57,"value":184},"Select contracts by the target Flink Agents version, not by the version that\npublished this skill. The manifest maps released versions to complete schemas and\nmarks versions without YAML support. The unversioned\n",{"type":51,"tag":172,"props":186,"children":188},{"href":187},"assets\u002Fyaml-schema.json",[189],{"type":57,"value":190},"main schema",{"type":57,"value":192}," describes only the repository revision that\npublished this skill. Never validate a released application against that schema\nunless the manifest maps the selected version to it.",{"type":51,"tag":67,"props":194,"children":195},{},[196],{"type":57,"value":197},"Do not invent APIs, versions, or commands from memory.",{"type":51,"tag":67,"props":199,"children":200},{},[201,203,209],{"type":57,"value":202},"Before presenting code as runnable, resolve every nontrivial import, constructor,\nmethod, descriptor argument, and dependency coordinate against those sources. If a\ncontract cannot be resolved, either use a documented alternative or label the\nfragment as pseudocode and state exactly what remains unresolved. Apply\n",{"type":51,"tag":172,"props":204,"children":206},{"href":205},"#provider-contract-triage",[207],{"type":57,"value":208},"Provider Contract Triage",{"type":57,"value":210}," below to external\ndescriptor-backed Providers before loading bundled references. This blocked\nProvider path is different from an unresolved business contract, which still\nreceives a user-fillable skeleton.",{"type":51,"tag":60,"props":212,"children":214},{"id":213},"preflight",[215],{"type":57,"value":216},"Preflight",{"type":51,"tag":67,"props":218,"children":219},{},[220],{"type":57,"value":221},"Before loading a platform adapter, asking a decision gate, or generating files:",{"type":51,"tag":73,"props":223,"children":224},{},[225,230,235,256,261,273],{"type":51,"tag":77,"props":226,"children":227},{},[228],{"type":57,"value":229},"Confirm that the target is a Flink Agents application or is being converted into\none. Leave ordinary Flink jobs outside this workflow.",{"type":51,"tag":77,"props":231,"children":232},{},[233],{"type":57,"value":234},"Inspect the complete user request, existing project, dependency metadata, source,\nconfiguration, and tests. Resolve every framework decision already answered by\nthat evidence. The latest explicit user choice takes precedence; treat a conflict\nwith existing project metadata as an intentional requested migration and report\nit rather than silently restoring the old value.",{"type":51,"tag":77,"props":236,"children":237},{},[238,240,246,248,254],{"type":57,"value":239},"Record each required framework decision as ",{"type":51,"tag":140,"props":241,"children":243},{"className":242},[],[244],{"type":57,"value":245},"confirmed",{"type":57,"value":247}," or ",{"type":51,"tag":140,"props":249,"children":251},{"className":250},[],[252],{"type":57,"value":253},"unresolved",{"type":57,"value":255},": Flink\nAgents version, Flink version, API, YAML application language when applicable,\neach descriptor-backed Resource implementation, and the Python environment when\nPython is required.",{"type":51,"tag":77,"props":257,"children":258},{},[259],{"type":57,"value":260},"Run Provider Contract Triage for every concrete external descriptor-backed\nProvider already named by the request or project. When the implementation is an\nunresolved gate, run the triage immediately after the user selects it.",{"type":51,"tag":77,"props":262,"children":263},{},[264,266,271],{"type":57,"value":265},"Build the ordered gate list from only the ",{"type":51,"tag":140,"props":267,"children":269},{"className":268},[],[270],{"type":57,"value":253},{"type":57,"value":272}," decisions. If the list is\nempty, skip host detection and interaction adapters and proceed directly to\ncontract resolution and implementation.",{"type":51,"tag":77,"props":274,"children":275},{},[276,278,283],{"type":57,"value":277},"For YAML, select the exact target-version schema through\n",{"type":51,"tag":172,"props":279,"children":280},{"href":174},[281],{"type":57,"value":282},"yaml-contracts.yaml",{"type":57,"value":284},". Filter the API choices when the\nmanifest says that the selected version has no YAML API. If a requested YAML\nversion has no matching schema, stop YAML generation and request the exact\ntarget-version schema or source; never substitute the main schema.",{"type":51,"tag":67,"props":286,"children":287},{},[288],{"type":57,"value":289},"Keep this decision record current after every answer. It prevents repeated\nquestions and ensures that later references operate only on confirmed versions and\ncapabilities.",{"type":51,"tag":291,"props":292,"children":294},"h3",{"id":293},"provider-contract-triage",[295],{"type":57,"value":208},{"type":51,"tag":67,"props":297,"children":298},{},[299,301,307],{"type":57,"value":300},"This is an early-exit pass, not a later Build Workflow step. Run it as soon as a\nconcrete external descriptor-backed Provider class or alias is confirmed and before\nreading any file under ",{"type":51,"tag":140,"props":302,"children":304},{"className":303},[],[305],{"type":57,"value":306},"references\u002F",{"type":57,"value":147},{"type":51,"tag":67,"props":309,"children":310},{},[311],{"type":57,"value":312},"Inspect only evidence that can establish that Provider's contract:",{"type":51,"tag":73,"props":314,"children":315},{},[316,321,326],{"type":51,"tag":77,"props":317,"children":318},{},[319],{"type":57,"value":320},"Explicit user-supplied JARs, packages, source, tests, or documentation.",{"type":51,"tag":77,"props":322,"children":323},{},[324],{"type":57,"value":325},"The target project's dependency metadata and the exact installed artifact named\nby that metadata.",{"type":51,"tag":77,"props":327,"children":328},{},[329],{"type":57,"value":330},"Version-matching authoritative Provider source or documentation already available\nat a known location.",{"type":51,"tag":67,"props":332,"children":333},{},[334,336,341,343,349,351,357,359,365,367,372],{"type":57,"value":335},"Scope every inspection command to the target application's dependency files,\nconfiguration, source roots, and explicitly named artifacts. Exclude the installed\nSkill directory containing this ",{"type":51,"tag":140,"props":337,"children":339},{"className":338},[],[340],{"type":57,"value":145},{"type":57,"value":342},", including project-local ",{"type":51,"tag":140,"props":344,"children":346},{"className":345},[],[347],{"type":57,"value":348},".agents\u002F",{"type":57,"value":350},", and\nexclude host metadata such as ",{"type":51,"tag":140,"props":352,"children":354},{"className":353},[],[355],{"type":57,"value":356},".codex\u002F",{"type":57,"value":358},", ",{"type":51,"tag":140,"props":360,"children":362},{"className":361},[],[363],{"type":57,"value":364},".claude\u002F",{"type":57,"value":366},", tool caches, and unrelated home\nor package caches. Do not run an unscoped recursive search over ",{"type":51,"tag":140,"props":368,"children":370},{"className":369},[],[371],{"type":57,"value":147},{"type":57,"value":373}," when it would\ntraverse those paths.",{"type":51,"tag":67,"props":375,"children":376},{},[377],{"type":57,"value":378},"Do not load general application, YAML, language, local-development, or verification\nreferences to compensate for a missing Provider artifact. A general YAML schema can\nvalidate descriptor shape but cannot establish a Provider's dependency coordinate,\nconstructor, or forwarded mandatory arguments. When the user explicitly states that\nno Provider artifact or contract source is available, treat that as evidence; check\nthe target project metadata for an existing dependency, but do not search unrelated\ncaches or examples.",{"type":51,"tag":67,"props":380,"children":381},{},[382],{"type":57,"value":383},"The triage must establish the implementation class or alias, dependency coordinate\nor package, constructor\u002Ffactory contract, and every mandatory descriptor argument.\nIf any element remains unverifiable:",{"type":51,"tag":385,"props":386,"children":387},"ul",{},[388,393,398,403],{"type":51,"tag":77,"props":389,"children":390},{},[391],{"type":57,"value":392},"preserve all working dependency, source, and configuration files;",{"type":51,"tag":77,"props":394,"children":395},{},[396],{"type":57,"value":397},"stop the dependent integration immediately, before the normal Build Workflow;",{"type":51,"tag":77,"props":399,"children":400},{},[401],{"type":57,"value":402},"do not generate a descriptor, adapter, wrapper, placeholder dependency, or tests;",{"type":51,"tag":77,"props":404,"children":405},{},[406],{"type":57,"value":407},"report the exact sources checked, each missing contract element, and the minimum\nJAR, package, source, test, or documentation needed to continue.",{"type":51,"tag":67,"props":409,"children":410},{},[411,413,419,421,426],{"type":57,"value":412},"List a source under ",{"type":51,"tag":140,"props":414,"children":416},{"className":415},[],[417],{"type":57,"value":418},"checked",{"type":57,"value":420}," only when its content was actually inspected during\nthe triage. Do not claim that a bundled schema, reference, cache, or documentation\nwas checked merely because ",{"type":51,"tag":140,"props":422,"children":424},{"className":423},[],[425],{"type":57,"value":145},{"type":57,"value":427}," names it.",{"type":51,"tag":67,"props":429,"children":430},{},[431],{"type":57,"value":432},"Return that blocked report for a Provider-only request. Continue other work only\nwhen the user explicitly requested an independent change that does not depend on the\nblocked Provider. If the complete Provider contract is verified, proceed with the\nnormal workflow using that evidence.",{"type":51,"tag":60,"props":434,"children":436},{"id":435},"definition-strategy",[437],{"type":57,"value":438},"Definition Strategy",{"type":51,"tag":440,"props":441,"children":442},"table",{},[443,462],{"type":51,"tag":444,"props":445,"children":446},"thead",{},[447],{"type":51,"tag":448,"props":449,"children":450},"tr",{},[451,457],{"type":51,"tag":452,"props":453,"children":454},"th",{},[455],{"type":57,"value":456},"Situation",{"type":51,"tag":452,"props":458,"children":459},{},[460],{"type":57,"value":461},"Recommendation",{"type":51,"tag":463,"props":464,"children":465},"tbody",{},[466,480,493,506],{"type":51,"tag":448,"props":467,"children":468},{},[469,475],{"type":51,"tag":470,"props":471,"children":472},"td",{},[473],{"type":57,"value":474},"New Workflow Agent or rewired event graph",{"type":51,"tag":470,"props":476,"children":477},{},[478],{"type":57,"value":479},"Offer YAML plus Python\u002FJava implementation files",{"type":51,"tag":448,"props":481,"children":482},{},[483,488],{"type":51,"tag":470,"props":484,"children":485},{},[486],{"type":57,"value":487},"Existing YAML application",{"type":51,"tag":470,"props":489,"children":490},{},[491],{"type":57,"value":492},"Preserve and extend YAML",{"type":51,"tag":448,"props":494,"children":495},{},[496,501],{"type":51,"tag":470,"props":497,"children":498},{},[499],{"type":57,"value":500},"Existing programmatic Agent",{"type":51,"tag":470,"props":502,"children":503},{},[504],{"type":57,"value":505},"Preserve its current API unless conversion is requested",{"type":51,"tag":448,"props":507,"children":508},{},[509,520],{"type":51,"tag":470,"props":510,"children":511},{},[512,518],{"type":51,"tag":140,"props":513,"children":515},{"className":514},[],[516],{"type":57,"value":517},"ReActAgent",{"type":57,"value":519},", unsupported YAML surface, or explicit code-only request",{"type":51,"tag":470,"props":521,"children":522},{},[523],{"type":57,"value":524},"Direct Python or Java API",{"type":51,"tag":67,"props":526,"children":527},{},[528],{"type":57,"value":529},"For a new application, derive the available API choices from the confirmed target\nversion. Present YAML, direct Python API, and direct Java API when all three are\nsupported; otherwise omit unsupported surfaces. A recommendation explains the\ntradeoff; it is not permission to select the API for the user.",{"type":51,"tag":67,"props":531,"children":532},{},[533,535,541,543,549,551,557,559,564],{"type":57,"value":534},"YAML does not declare an agent ",{"type":51,"tag":140,"props":536,"children":538},{"className":537},[],[539],{"type":57,"value":540},"type",{"type":57,"value":542},". Do not add ",{"type":51,"tag":140,"props":544,"children":546},{"className":545},[],[547],{"type":57,"value":548},"type: workflow",{"type":57,"value":550}," or\n",{"type":51,"tag":140,"props":552,"children":554},{"className":553},[],[555],{"type":57,"value":556},"type: react",{"type":57,"value":558},"; ",{"type":51,"tag":140,"props":560,"children":562},{"className":561},[],[563],{"type":57,"value":540},{"type":57,"value":565}," selects an implementation language where the schema allows it.",{"type":51,"tag":67,"props":567,"children":568},{},[569,571,576,578,583],{"type":57,"value":570},"YAML does not choose the business implementation language either. For a new YAML\napplication, ask the user to choose Python or Java before generating files. For an\nexisting application, detect and preserve the language from build metadata, source\nfiles, function references, and explicit YAML ",{"type":51,"tag":140,"props":572,"children":574},{"className":573},[],[575],{"type":57,"value":540},{"type":57,"value":577}," fields. Do not default to\nPython merely because omitted YAML ",{"type":51,"tag":140,"props":579,"children":581},{"className":580},[],[582],{"type":57,"value":540},{"type":57,"value":584}," fields currently resolve to Python.",{"type":51,"tag":67,"props":586,"children":587},{},[588,590,595],{"type":57,"value":589},"Workflow Agents already include built-in chat, tool-call, and context-retrieval\nActions. A model reasoning\u002Ftool loop can therefore remain YAML-defined. Choose\n",{"type":51,"tag":140,"props":591,"children":593},{"className":592},[],[594],{"type":57,"value":517},{"type":57,"value":596}," only when the user explicitly wants that programmatic abstraction, the\nexisting application already uses it, or a required ReAct-specific surface is not\navailable through YAML.",{"type":51,"tag":60,"props":598,"children":600},{"id":599},"scaffolding-boundary",[601],{"type":57,"value":602},"Scaffolding Boundary",{"type":51,"tag":67,"props":604,"children":605},{},[606],{"type":57,"value":607},"Complete framework-owned wiring, but do not invent business behavior. Before\nimplementing each custom Action, Tool, domain client, data transformation, Prompt,\nor runtime Skill, classify these contract elements from only explicit user\nrequirements, existing code, and existing tests:",{"type":51,"tag":440,"props":609,"children":610},{},[611,633],{"type":51,"tag":444,"props":612,"children":613},{},[614],{"type":51,"tag":448,"props":615,"children":616},{},[617,622],{"type":51,"tag":452,"props":618,"children":619},{},[620],{"type":57,"value":621},"Contract element",{"type":51,"tag":452,"props":623,"children":624},{},[625,631],{"type":51,"tag":140,"props":626,"children":628},{"className":627},[],[629],{"type":57,"value":630},"supplied",{"type":57,"value":632}," means",{"type":51,"tag":463,"props":634,"children":635},{},[636,649,662,675,688],{"type":51,"tag":448,"props":637,"children":638},{},[639,644],{"type":51,"tag":470,"props":640,"children":641},{},[642],{"type":57,"value":643},"Input",{"type":51,"tag":470,"props":645,"children":646},{},[647],{"type":57,"value":648},"Required fields and their meaning are defined",{"type":51,"tag":448,"props":650,"children":651},{},[652,657],{"type":51,"tag":470,"props":653,"children":654},{},[655],{"type":57,"value":656},"Output",{"type":51,"tag":470,"props":658,"children":659},{},[660],{"type":57,"value":661},"Result fields or emitted Events are defined",{"type":51,"tag":448,"props":663,"children":664},{},[665,670],{"type":51,"tag":470,"props":666,"children":667},{},[668],{"type":57,"value":669},"Transformation",{"type":51,"tag":470,"props":671,"children":672},{},[673],{"type":57,"value":674},"Input-to-output or message construction is defined",{"type":51,"tag":448,"props":676,"children":677},{},[678,683],{"type":51,"tag":470,"props":679,"children":680},{},[681],{"type":57,"value":682},"Side effects",{"type":51,"tag":470,"props":684,"children":685},{},[686],{"type":57,"value":687},"External calls, state changes, and authentication boundary are defined",{"type":51,"tag":448,"props":689,"children":690},{},[691,696],{"type":51,"tag":470,"props":692,"children":693},{},[694],{"type":57,"value":695},"Errors",{"type":51,"tag":470,"props":697,"children":698},{},[699],{"type":57,"value":700},"Required failure and fallback behavior is defined",{"type":51,"tag":67,"props":702,"children":703},{},[704,706,711,713,719,720,726],{"type":57,"value":705},"Anything not established by those sources is ",{"type":51,"tag":140,"props":707,"children":709},{"className":708},[],[710],{"type":57,"value":253},{"type":57,"value":712},"; a high-level capability\nname is not a supplied contract. When behavior depends on an unresolved element,\ngenerate only an importable or compilable signature skeleton with focused TODOs and\nan explicit ",{"type":51,"tag":140,"props":714,"children":716},{"className":715},[],[717],{"type":57,"value":718},"NotImplementedError",{"type":57,"value":247},{"type":51,"tag":140,"props":721,"children":723},{"className":722},[],[724],{"type":57,"value":725},"UnsupportedOperationException",{"type":57,"value":727},". Preserve\nuser-provided names, parameters, types, and descriptions. When those are absent,\nderive a stable capability name and use the narrowest framework-compatible\nsignature; for a function Tool or domain client with no typed contract, use one\nopaque string request and string result.",{"type":51,"tag":67,"props":729,"children":730},{},[731],{"type":57,"value":732},"An unresolved skeleton must not emit business Events, transform payloads, compose\nPrompt or chat messages, call a backend, return business data, or provide fallback\nbehavior. Tests may check import\u002Fcompilation, signature and YAML reference\nresolution, and explicit failure, but must not assert business behavior that was\nnot supplied.",{"type":51,"tag":67,"props":734,"children":735},{},[736],{"type":57,"value":737},"Do not author domain rules, REST endpoints, diagnostic procedures, prompts, data\nmodels, Tool results, runtime Skill instructions, or test doubles from a high-level\napplication idea. Do not propose a standard REST API, MCP server, or mock backend as\nthe implementation of a custom Tool. Do not ask the user to lock a business input\nidentity schema, deployment platform, service API, authentication design, or log\u002F\nmetric backend merely to scaffold the application. Generate the neutral skeleton\nand leave those choices as TODOs for the user. Built-in Flink Agents Actions are\nframework behavior and need no generated implementation.",{"type":51,"tag":60,"props":739,"children":741},{"id":740},"interaction-discipline",[742],{"type":57,"value":743},"Interaction Discipline",{"type":51,"tag":67,"props":745,"children":746},{},[747],{"type":57,"value":748},"This section is the sole authority for interaction capability detection, fallback\nselection, retry behavior, and host-mode handling. Platform adapters only describe\nhow to encode a question for a tool that this section selected; other references\nmust point here instead of restating this policy.",{"type":51,"tag":67,"props":750,"children":751},{},[752],{"type":57,"value":753},"Process the unresolved decisions from Preflight as sequential gates. Ask only the\ncurrent gate, wait for the answer, update the decision record, and continue. Never\nsend one proposed baseline that bundles versions, API, implementation language,\nruntime version, Resource implementations, business backends, and mock behavior.",{"type":51,"tag":67,"props":755,"children":756},{},[757],{"type":57,"value":758},"Only when at least one unresolved closed gate remains, identify the current host\nfrom explicit system and tool context. Use this table to select the sole candidate\ntool and adapter for the gate:",{"type":51,"tag":440,"props":760,"children":761},{},[762,783],{"type":51,"tag":444,"props":763,"children":764},{},[765],{"type":51,"tag":448,"props":766,"children":767},{},[768,773,778],{"type":51,"tag":452,"props":769,"children":770},{},[771],{"type":57,"value":772},"Host",{"type":51,"tag":452,"props":774,"children":775},{},[776],{"type":57,"value":777},"Candidate structured tool",{"type":51,"tag":452,"props":779,"children":780},{},[781],{"type":57,"value":782},"Adapter",{"type":51,"tag":463,"props":784,"children":785},{},[786,812,838,866,888],{"type":51,"tag":448,"props":787,"children":788},{},[789,794,803],{"type":51,"tag":470,"props":790,"children":791},{},[792],{"type":57,"value":793},"Codex",{"type":51,"tag":470,"props":795,"children":796},{},[797],{"type":51,"tag":140,"props":798,"children":800},{"className":799},[],[801],{"type":57,"value":802},"request_user_input",{"type":51,"tag":470,"props":804,"children":805},{},[806],{"type":51,"tag":172,"props":807,"children":809},{"href":808},"references\u002Fplatforms\u002Fcodex.md",[810],{"type":57,"value":811},"codex.md",{"type":51,"tag":448,"props":813,"children":814},{},[815,820,829],{"type":51,"tag":470,"props":816,"children":817},{},[818],{"type":57,"value":819},"Claude Code",{"type":51,"tag":470,"props":821,"children":822},{},[823],{"type":51,"tag":140,"props":824,"children":826},{"className":825},[],[827],{"type":57,"value":828},"AskUserQuestion",{"type":51,"tag":470,"props":830,"children":831},{},[832],{"type":51,"tag":172,"props":833,"children":835},{"href":834},"references\u002Fplatforms\u002Fclaude-code.md",[836],{"type":57,"value":837},"claude-code.md",{"type":51,"tag":448,"props":839,"children":840},{},[841,846,857],{"type":51,"tag":470,"props":842,"children":843},{},[844],{"type":57,"value":845},"Gemini CLI",{"type":51,"tag":470,"props":847,"children":848},{},[849,855],{"type":51,"tag":140,"props":850,"children":852},{"className":851},[],[853],{"type":57,"value":854},"ask_user",{"type":57,"value":856}," communication tool",{"type":51,"tag":470,"props":858,"children":859},{},[860],{"type":51,"tag":172,"props":861,"children":863},{"href":862},"references\u002Fplatforms\u002Fgemini-cli.md",[864],{"type":57,"value":865},"gemini-cli.md",{"type":51,"tag":448,"props":867,"children":868},{},[869,874,879],{"type":51,"tag":470,"props":870,"children":871},{},[872],{"type":57,"value":873},"Qoder",{"type":51,"tag":470,"props":875,"children":876},{},[877],{"type":57,"value":878},"Explicitly exposed structured single-select tool, if any",{"type":51,"tag":470,"props":880,"children":881},{},[882],{"type":51,"tag":172,"props":883,"children":885},{"href":884},"references\u002Fplatforms\u002Fqoder.md",[886],{"type":57,"value":887},"qoder.md",{"type":51,"tag":448,"props":889,"children":890},{},[891,896,900],{"type":51,"tag":470,"props":892,"children":893},{},[894],{"type":57,"value":895},"Unknown or unsupported",{"type":51,"tag":470,"props":897,"children":898},{},[899],{"type":57,"value":878},{"type":51,"tag":470,"props":901,"children":902},{},[903],{"type":51,"tag":172,"props":904,"children":906},{"href":905},"references\u002Fplatforms\u002Fgeneric.md",[907],{"type":57,"value":908},"generic.md",{"type":51,"tag":67,"props":910,"children":911},{},[912,914,918],{"type":57,"value":913},"Treat the current tool contract as the only capability signal. When the table's\ncandidate is exposed and callable, read its adapter to encode one question. An\nadapter must not perform capability discovery or select a fallback. If the candidate\nis absent, returns an availability error, or cannot represent the complete valid\noption set without altering or obscuring it, immediately read\n",{"type":51,"tag":172,"props":915,"children":916},{"href":905},[917],{"type":57,"value":908},{"type":57,"value":919}," and use its numbered fallback. Do not\nretry the tool, ask the user to change modes, require a slash command or keyboard\nshortcut, perform a post-interview handoff, add host metadata, or install host\nconfiguration in the generated application.",{"type":51,"tag":67,"props":921,"children":922},{},[923,925,931,933,938],{"type":57,"value":924},"Never use an open-ended text question when the valid options are already known.\nWhen a gate has a recommendation, place it first and label it ",{"type":51,"tag":140,"props":926,"children":928},{"className":927},[],[929],{"type":57,"value":930},"(Recommended)",{"type":57,"value":932},", but\ndo not preselect or continue without the user's answer. The YAML\nimplementation-language gate intentionally has no recommendation: present Python\nand Java as equal peer options with parallel descriptions and no ",{"type":51,"tag":140,"props":934,"children":936},{"className":935},[],[937],{"type":57,"value":930},{"type":57,"value":939},"\nlabel.",{"type":51,"tag":67,"props":941,"children":942},{},[943],{"type":57,"value":944},"Use this order:",{"type":51,"tag":73,"props":946,"children":947},{},[948,953,958,963,976,989],{"type":51,"tag":77,"props":949,"children":950},{},[951],{"type":57,"value":952},"If unresolved, ask for the Flink Agents version and wait. Then offer only\ncompatible Flink versions and wait for the Flink choice. Do not mention\nPython\u002FJDK versions, an Agent API, a model provider, or business architecture in\nthese version questions.",{"type":51,"tag":77,"props":954,"children":955},{},[956],{"type":57,"value":957},"If unresolved, ask the user to choose among the APIs supported by the confirmed\nFlink Agents version. Offer YAML only when its exact contract is available. Wait.",{"type":51,"tag":77,"props":959,"children":960},{},[961],{"type":57,"value":962},"Only when YAML is selected, ask whether custom Actions, function Tools, and the\nFlink entry point use Python or Java. Resource implementations are selected\nindependently at their own gates. Direct Python or Java API already determines\nthe application-code choice. Do not recommend, preselect, or imply a preference\nfor either YAML implementation language. Only now resolve a compatible Python or\nJDK version.",{"type":51,"tag":77,"props":964,"children":965},{},[966,968,974],{"type":57,"value":967},"Inventory the Resources required by the user's stated design. Resolve real\ndescriptor-backed framework integrations one at a time and wait before moving to\nthe next integration. Assign a deterministic internal name, ask for its\nimplementation class or documented alias, and stop the interview for that\nResource. Immediately run Provider Contract Triage after the implementation\nchoice; it verifies the target-version constructor and descriptor. If it passes,\ngenerate every mandatory configuration key as ",{"type":51,"tag":140,"props":969,"children":971},{"className":970},[],[972],{"type":57,"value":973},"TODO_REQUIRED_\u003CFIELD>",{"type":57,"value":975}," for the\nuser to fill. Do not ask about another Resource or load general references before\nthe triage result.\nFor chat-model connections\u002Fsetups, embedding-model connections\u002Fsetups, and vector\nstores, do not filter candidates by the Agent API or application-code language.\nPresent all verified Python and Java implementations, label each candidate's\nimplementation language when needed for disambiguation, and generate the matching\nbridge declaration and runtime dependencies after selection.\nDo not ask for model identifiers, endpoints, credential values\u002Fmechanisms,\nprovider options, Skill source paths\u002FURLs\u002Fpackages, or other Resource arguments.\nCustom Actions, function Tools, domain clients, Prompt content, runtime Skill\ninstructions, business input schemas, and backend platforms are not integration\ngates: scaffold them without a business interview. Do not ask the user to name a\nsingle Resource or repeat a generated reference. Ask about naming only when\nmultiple Resources need semantic disambiguation, an existing external reference\nconstrains the name, or the user requested a naming convention.",{"type":51,"tag":77,"props":977,"children":978},{},[979,981,987],{"type":57,"value":980},"As soon as the confirmed design first requires a Python runtime, pause before\nenvironment creation or dependency installation. Unless the existing project\nalready declares its environment unambiguously, inspect compatible local Python\nexecutables\u002Fenvironments and ask whether to reuse one of them or create a\nproject-local ",{"type":51,"tag":140,"props":982,"children":984},{"className":983},[],[985],{"type":57,"value":986},".venv",{"type":57,"value":988},". Wait for the choice and use the selected interpreter for\nevery install, import, test, and local run. This conditional gate fires\nimmediately after the choice that introduces Python; do not delay it until the\nend of the Resource interview.",{"type":51,"tag":77,"props":990,"children":991},{},[992],{"type":57,"value":993},"After every framework decision is confirmed, design the Action graph and generate\nthe project. Do not add a host-specific handoff.",{"type":51,"tag":67,"props":995,"children":996},{},[997,999,1005,1007,1013],{"type":57,"value":998},"Do not infer OpenAI, Ollama, any model name, an environment-variable credential,\nSkill distribution, MCP, a vector store, or a domain-service protocol. After a\nframework implementation is selected, do not run a second configuration interview.\nGenerate a declaration or builder scaffold that names every verified mandatory\nargument and leaves its value explicit for the user. For YAML string fields, use a\nclear placeholder such as ",{"type":51,"tag":140,"props":1000,"children":1002},{"className":1001},[],[1003],{"type":57,"value":1004},"TODO_REQUIRED_API_KEY",{"type":57,"value":1006},"; for direct APIs, generate a\ncompilable factory skeleton that lists the required arguments and fails explicitly\nuntil they are filled. If the user already supplied a value or explicitly requested\nplaintext in local YAML, use that instruction; keep supplied secrets out of tracked\nfiles and output. Never claim ",{"type":51,"tag":140,"props":1008,"children":1010},{"className":1009},[],[1011],{"type":57,"value":1012},"${ENV_VAR}",{"type":57,"value":1014}," is interpolated unless the target loader\nor provider actually implements it.",{"type":51,"tag":67,"props":1016,"children":1017},{},[1018],{"type":57,"value":1019},"The conditional Python-environment gate is dependency management, not Resource\nconfiguration. It still runs when a selected Resource introduces Python, but it asks\nonly which concrete compatible Python environment to use, never provider values.",{"type":51,"tag":60,"props":1021,"children":1023},{"id":1022},"build-workflow",[1024],{"type":57,"value":1025},"Build Workflow",{"type":51,"tag":73,"props":1027,"children":1028},{},[1029,1034,1047,1060,1079,1099,1104,1161,1166,1179,1227,1256],{"type":51,"tag":77,"props":1030,"children":1031},{},[1032],{"type":57,"value":1033},"Run Preflight, including Provider Contract Triage for every concrete external\nProvider already named by the request or project. If a Provider is blocked, issue\nits report and stop before reading any bundled reference.",{"type":51,"tag":77,"props":1035,"children":1036},{},[1037,1039,1045],{"type":57,"value":1038},"Read ",{"type":51,"tag":172,"props":1040,"children":1042},{"href":1041},"references\u002Fapplication-patterns.md",[1043],{"type":57,"value":1044},"application patterns",{"type":57,"value":1046},", then ask only the\nordered unresolved gates. Do not repeat decisions already confirmed by the user\nor project.",{"type":51,"tag":77,"props":1048,"children":1049},{},[1050,1052,1058],{"type":57,"value":1051},"When versions are unresolved, complete the version gates in\n",{"type":51,"tag":172,"props":1053,"children":1055},{"href":1054},"references\u002Flocal-development.md",[1056],{"type":57,"value":1057},"local development",{"type":57,"value":1059},": Flink Agents first, then a\ncompatible Flink version. Do not generate files or combine later decisions into\nthese questions.",{"type":51,"tag":77,"props":1061,"children":1062},{},[1063,1065,1071,1073,1077],{"type":57,"value":1064},"Complete the API gate with only APIs supported by the confirmed target version.\nFor YAML, read ",{"type":51,"tag":172,"props":1066,"children":1068},{"href":1067},"references\u002Fyaml-patterns.md",[1069],{"type":57,"value":1070},"YAML patterns",{"type":57,"value":1072},", select the exact\nschema through ",{"type":51,"tag":172,"props":1074,"children":1075},{"href":174},[1076],{"type":57,"value":282},{"type":57,"value":1078},", and reject\ngeneration when no exact contract is available.",{"type":51,"tag":77,"props":1080,"children":1081},{},[1082,1084,1090,1091,1097],{"type":57,"value":1083},"If YAML was selected, complete the implementation-language gate. Then read\n",{"type":51,"tag":172,"props":1085,"children":1087},{"href":1086},"references\u002Fpython-patterns.md",[1088],{"type":57,"value":1089},"Python patterns",{"type":57,"value":550},{"type":51,"tag":172,"props":1092,"children":1094},{"href":1093},"references\u002Fjava-patterns.md",[1095],{"type":57,"value":1096},"Java patterns",{"type":57,"value":1098}," for the application code. When a\nbridge-supported Resource uses the other language, also read that language's\ncross-language Resource section; selecting that Resource is already explicit\nconfirmation.",{"type":51,"tag":77,"props":1100,"children":1101},{},[1102],{"type":57,"value":1103},"Inventory each Resource and assign stable names automatically. Ask only which\ndocumented implementation alias\u002Fclass to use for actual framework integrations.\nFor bridge-supported types, build this choice from both Python and Java\nimplementations instead of the application-code language alone. Inspect the\nselected implementation through Provider Contract Triage before loading more\nreferences or moving to another integration. When it passes, add its integration\nand bridge dependencies and scaffold all mandatory configuration keys without\nasking for their values.\nClassify every custom Tool\u002FAction\u002FPrompt\u002Fruntime-Skill business contract before\ngenerating its skeleton; do not ask the user to choose a domain platform or\ncomplete an unresolved input contract. Generate and record all cross-references\nwithout asking the user to repeat internal identifiers. Never select a provider,\nmodel, endpoint, credential source, business backend, or integration from the\napplication domain alone.",{"type":51,"tag":77,"props":1105,"children":1106},{},[1107,1109,1114,1116,1122,1123,1129,1131,1137,1139,1145,1147,1153,1155,1160],{"type":57,"value":1108},"When runtime Skills are requested, preserve an explicit source in an existing\napplication. For a new application, generate a minimal runtime ",{"type":51,"tag":140,"props":1110,"children":1112},{"className":1111},[],[1113],{"type":57,"value":145},{"type":57,"value":1115}," business\nscaffold plus a source-configuration TODO that lists the valid ",{"type":51,"tag":140,"props":1117,"children":1119},{"className":1118},[],[1120],{"type":57,"value":1121},"paths",{"type":57,"value":358},{"type":51,"tag":140,"props":1124,"children":1126},{"className":1125},[],[1127],{"type":57,"value":1128},"urls",{"type":57,"value":1130},",\nPython ",{"type":51,"tag":140,"props":1132,"children":1134},{"className":1133},[],[1135],{"type":57,"value":1136},"package",{"type":57,"value":1138},", and Java ",{"type":51,"tag":140,"props":1140,"children":1142},{"className":1141},[],[1143],{"type":57,"value":1144},"classpath",{"type":57,"value":1146}," forms. Do not ask for loading paths or\ndistribution, and never inspect, copy, or offer to reuse Skills installed in the\ncoding-agent host, such as a local ",{"type":51,"tag":140,"props":1148,"children":1150},{"className":1149},[],[1151],{"type":57,"value":1152},"flink-diag",{"type":57,"value":1154},"; coding-agent Skills and Flink\nruntime Skills are different artifacts. Read\n",{"type":51,"tag":172,"props":1156,"children":1158},{"href":1157},"references\u002Fyaml-patterns.md#runtime-skills",[1159],{"type":57,"value":1070},{"type":57,"value":147},{"type":51,"tag":77,"props":1162,"children":1163},{},[1164],{"type":57,"value":1165},"Draw only framework Action graph edges established by built-in contracts or\nsupplied business contracts. Where an emitted Event, payload transformation,\nbranch, output, or error contract is unresolved, generate the Action signature\nand explicit failure but do not claim or implement that edge. Do not turn those\nTODOs into more gates.",{"type":51,"tag":77,"props":1167,"children":1168},{},[1169,1171,1177],{"type":57,"value":1170},"Use only documented built-in Actions. Generate a resolvable, correctly typed\nsignature skeleton for every other Action and reference it as\n",{"type":51,"tag":140,"props":1172,"children":1174},{"className":1173},[],[1175],{"type":57,"value":1176},"\u003Cmodule-or-class>:\u003Cqualname>",{"type":57,"value":1178},"; leave its business body for the user unless they\nexplicitly requested implementation.",{"type":51,"tag":77,"props":1180,"children":1181},{},[1182,1184,1190,1191,1197,1198,1204,1206,1212,1214,1219,1221,1225],{"type":57,"value":1183},"Resolve concrete API calls and dependency coordinates from the target-version\nartifacts before generating the complete executable project. For Java, generate\na Maven project with\n",{"type":51,"tag":140,"props":1185,"children":1187},{"className":1186},[],[1188],{"type":57,"value":1189},"flink-agents-api",{"type":57,"value":358},{"type":51,"tag":140,"props":1192,"children":1194},{"className":1193},[],[1195],{"type":57,"value":1196},"flink-agents-plan",{"type":57,"value":358},{"type":51,"tag":140,"props":1199,"children":1201},{"className":1200},[],[1202],{"type":57,"value":1203},"flink-agents-runtime",{"type":57,"value":1205},", and only the\nintegrations actually used; declare all Flink Agents and Flink dependencies as\n",{"type":51,"tag":140,"props":1207,"children":1209},{"className":1208},[],[1210],{"type":57,"value":1211},"provided",{"type":57,"value":1213},". Whenever the design requires Python, generate source and dependency\nfiles, resolve the Python environment choice when not already declared, and\ninstall the resolved Flink Agents, PyFlink, and integration dependencies into the\nselected existing environment or project-local ",{"type":51,"tag":140,"props":1215,"children":1217},{"className":1216},[],[1218],{"type":57,"value":986},{"type":57,"value":1220},". Read\n",{"type":51,"tag":172,"props":1222,"children":1223},{"href":1054},[1224],{"type":57,"value":1057},{"type":57,"value":1226},". Preserve versions already\nselected by the target project; never guess one.",{"type":51,"tag":77,"props":1228,"children":1229},{},[1230,1232,1238,1240,1246,1248,1254],{"type":57,"value":1231},"Connect the Agent to a Flink DataStream or Table through the public factory backed\nby ",{"type":51,"tag":140,"props":1233,"children":1235},{"className":1234},[],[1236],{"type":57,"value":1237},"RemoteExecutionEnvironment",{"type":57,"value":1239},". Local validation submits that same remote-style\njob to a MiniCluster. Never use a local Agents environment, a no-argument factory,\n",{"type":51,"tag":140,"props":1241,"children":1243},{"className":1242},[],[1244],{"type":57,"value":1245},"from_list",{"type":57,"value":1247},"\u002F",{"type":51,"tag":140,"props":1249,"children":1251},{"className":1250},[],[1252],{"type":57,"value":1253},"to_list",{"type":57,"value":1255},", or their Java equivalents.",{"type":51,"tag":77,"props":1257,"children":1258},{},[1259,1261,1267],{"type":57,"value":1260},"Run the checks in ",{"type":51,"tag":172,"props":1262,"children":1264},{"href":1263},"references\u002Fverification.md",[1265],{"type":57,"value":1266},"verification",{"type":57,"value":1268}," before claiming\nthe application is valid or runnable.",{"type":51,"tag":60,"props":1270,"children":1272},{"id":1271},"required-output",[1273],{"type":57,"value":1274},"Required Output",{"type":51,"tag":385,"props":1276,"children":1277},{},[1278,1283,1294,1299,1304,1309,1314,1319,1324,1329,1334,1347,1352,1357,1362,1367],{"type":51,"tag":77,"props":1279,"children":1280},{},[1281],{"type":57,"value":1282},"Complete framework files or edits, including every custom function signature and\na remote-style Flink job entry point.",{"type":51,"tag":77,"props":1284,"children":1285},{},[1286,1288,1293],{"type":57,"value":1287},"A runnable Maven project for Java and, whenever Python is required, pinned Python\ndependency input plus the user-selected existing environment or populated\nproject-local ",{"type":51,"tag":140,"props":1289,"children":1291},{"className":1290},[],[1292],{"type":57,"value":986},{"type":57,"value":147},{"type":51,"tag":77,"props":1295,"children":1296},{},[1297],{"type":57,"value":1298},"User-confirmed Flink Agents and Flink versions. Never silently choose the bundled\nrecommended versions for a new project.",{"type":51,"tag":77,"props":1300,"children":1301},{},[1302],{"type":57,"value":1303},"A user-confirmed API choice from the surfaces supported by the selected Flink\nAgents version.",{"type":51,"tag":77,"props":1305,"children":1306},{},[1307],{"type":57,"value":1308},"A user-confirmed Python or Java application-code language for every new YAML\napplication, reflected consistently in project layout, custom Action\u002FTool function\nreferences, and the Flink entry point. Do not use it to filter bridge-supported\nResource implementations.",{"type":51,"tag":77,"props":1310,"children":1311},{},[1312],{"type":57,"value":1313},"For applications using runtime Skills, a user-fillable Skill business scaffold\nand source-configuration TODO. Preserve existing source configuration, but do not\nask a new-project user to choose distribution or reuse coding-agent host Skills.",{"type":51,"tag":77,"props":1315,"children":1316},{},[1317],{"type":57,"value":1318},"Resource declarations built from user-selected implementation aliases\u002Fclasses,\nincluding independent Resource implementation language and bridge wiring where\nsupported, with every verified mandatory provider key present and marked for user\ninput.\nKeep model, endpoint, credential, and optional provider values unresolved instead\nof interviewing for them or choosing defaults.",{"type":51,"tag":77,"props":1320,"children":1321},{},[1322],{"type":57,"value":1323},"Deterministic Resource names and references generated by the coding agent. Do not\nrequire the user to name ordinary Connection, Setup, Prompt, Skill container,\nVectorStore, or MCP Resource identifiers when there is no ambiguity.",{"type":51,"tag":77,"props":1325,"children":1326},{},[1327],{"type":57,"value":1328},"When the user chooses plaintext credentials for local testing, a loader-compatible\nlocal YAML that is excluded from version control and actually used by the local\nrun command. Do not replace this explicit choice with programmatic registration.",{"type":51,"tag":77,"props":1330,"children":1331},{},[1332],{"type":57,"value":1333},"Explicit user-fillable business skeletons for custom Actions, Tools, prompts,\nruntime Skills, domain clients, secrets, endpoints, and external data, backed by\nthe supplied\u002Funresolved contract classification. Keep framework wiring and\nsignatures concrete instead of replacing them with fabricated business\nimplementation.",{"type":51,"tag":77,"props":1335,"children":1336},{},[1337,1339,1345],{"type":57,"value":1338},"A final consolidated ",{"type":51,"tag":140,"props":1340,"children":1342},{"className":1341},[],[1343],{"type":57,"value":1344},"User must provide",{"type":57,"value":1346}," list for unresolved business input\nfields, platform clients, authentication, queries, response mapping, and domain\nbehavior. These items must not block project scaffolding or become Agent workflow\ndecisions unless the user explicitly asks for their implementation.",{"type":51,"tag":77,"props":1348,"children":1349},{},[1350],{"type":57,"value":1351},"Exact commands that match the target repository's build tooling; no guessed\npackage, Flink, provider, model, or plugin versions.",{"type":51,"tag":77,"props":1353,"children":1354},{},[1355],{"type":57,"value":1356},"Framework snippets whose imports and API calls resolve in the target version.\nBusiness skeletons must import or compile, fail explicitly when invoked, and be\nlabeled user-fillable rather than runnable behavior.",{"type":51,"tag":77,"props":1358,"children":1359},{},[1360],{"type":57,"value":1361},"For YAML, the selected contract key and exact schema path used for validation.",{"type":51,"tag":77,"props":1363,"children":1364},{},[1365],{"type":57,"value":1366},"Evidence separated into schema, load\u002Fcompile, tests, and runtime.",{"type":51,"tag":77,"props":1368,"children":1369},{},[1370],{"type":57,"value":1371},"A clear statement for every check that was not run or requires an external service.",{"type":51,"tag":60,"props":1373,"children":1375},{"id":1374},"quick-reference",[1376],{"type":57,"value":1377},"Quick Reference",{"type":51,"tag":440,"props":1379,"children":1380},{},[1381,1397],{"type":51,"tag":444,"props":1382,"children":1383},{},[1384],{"type":51,"tag":448,"props":1385,"children":1386},{},[1387,1392],{"type":51,"tag":452,"props":1388,"children":1389},{},[1390],{"type":57,"value":1391},"Task",{"type":51,"tag":452,"props":1393,"children":1394},{},[1395],{"type":57,"value":1396},"Read",{"type":51,"tag":463,"props":1398,"children":1399},{},[1400,1418,1434,1450,1467,1483,1499,1515,1531],{"type":51,"tag":448,"props":1401,"children":1402},{},[1403,1408],{"type":51,"tag":470,"props":1404,"children":1405},{},[1406],{"type":57,"value":1407},"Present closed choices in the current coding agent",{"type":51,"tag":470,"props":1409,"children":1410},{},[1411,1416],{"type":51,"tag":172,"props":1412,"children":1414},{"href":1413},"#interaction-discipline",[1415],{"type":57,"value":743},{"type":57,"value":1417},", then its selected platform adapter",{"type":51,"tag":448,"props":1419,"children":1420},{},[1421,1426],{"type":51,"tag":470,"props":1422,"children":1423},{},[1424],{"type":57,"value":1425},"Select Agent\u002FAPI shape; design Resources and event graph",{"type":51,"tag":470,"props":1427,"children":1428},{},[1429],{"type":51,"tag":172,"props":1430,"children":1431},{"href":1041},[1432],{"type":57,"value":1433},"application-patterns.md",{"type":51,"tag":448,"props":1435,"children":1436},{},[1437,1442],{"type":51,"tag":470,"props":1438,"children":1439},{},[1440],{"type":57,"value":1441},"Author or review YAML; resolve names and functions",{"type":51,"tag":470,"props":1443,"children":1444},{},[1445],{"type":51,"tag":172,"props":1446,"children":1447},{"href":1067},[1448],{"type":57,"value":1449},"yaml-patterns.md",{"type":51,"tag":448,"props":1451,"children":1452},{},[1453,1458],{"type":51,"tag":470,"props":1454,"children":1455},{},[1456],{"type":57,"value":1457},"Scaffold runtime Skill business and source TODOs",{"type":51,"tag":470,"props":1459,"children":1460},{},[1461],{"type":51,"tag":172,"props":1462,"children":1464},{"href":1463},"references\u002Fapplication-patterns.md#scaffold-runtime-skills",[1465],{"type":57,"value":1466},"runtime Skills",{"type":51,"tag":448,"props":1468,"children":1469},{},[1470,1475],{"type":51,"tag":470,"props":1471,"children":1472},{},[1473],{"type":57,"value":1474},"Scaffold Python Actions, Tools, types, or runner",{"type":51,"tag":470,"props":1476,"children":1477},{},[1478],{"type":51,"tag":172,"props":1479,"children":1480},{"href":1086},[1481],{"type":57,"value":1482},"python-patterns.md",{"type":51,"tag":448,"props":1484,"children":1485},{},[1486,1491],{"type":51,"tag":470,"props":1487,"children":1488},{},[1489],{"type":57,"value":1490},"Scaffold Java Actions, Tools, resources, or runner",{"type":51,"tag":470,"props":1492,"children":1493},{},[1494],{"type":51,"tag":172,"props":1495,"children":1496},{"href":1093},[1497],{"type":57,"value":1498},"java-patterns.md",{"type":51,"tag":448,"props":1500,"children":1501},{},[1502,1507],{"type":51,"tag":470,"props":1503,"children":1504},{},[1505],{"type":57,"value":1506},"Select versions, generate dependencies, and submit to MiniCluster",{"type":51,"tag":470,"props":1508,"children":1509},{},[1510],{"type":51,"tag":172,"props":1511,"children":1512},{"href":1054},[1513],{"type":57,"value":1514},"local-development.md",{"type":51,"tag":448,"props":1516,"children":1517},{},[1518,1523],{"type":51,"tag":470,"props":1519,"children":1520},{},[1521],{"type":57,"value":1522},"Validate schema, references, imports, compilation, and execution claims",{"type":51,"tag":470,"props":1524,"children":1525},{},[1526],{"type":51,"tag":172,"props":1527,"children":1528},{"href":1263},[1529],{"type":57,"value":1530},"verification.md",{"type":51,"tag":448,"props":1532,"children":1533},{},[1534,1539],{"type":51,"tag":470,"props":1535,"children":1536},{},[1537],{"type":57,"value":1538},"Select and validate YAML without a source checkout",{"type":51,"tag":470,"props":1540,"children":1541},{},[1542],{"type":51,"tag":172,"props":1543,"children":1544},{"href":174},[1545],{"type":57,"value":177},{"items":1547,"total":1554},[1548],{"slug":4,"name":4,"fn":5,"description":6,"org":1549,"tags":1550,"stars":22,"repoUrl":23,"updatedAt":24},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1551,1552,1553],{"name":20,"slug":21,"type":15},{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},1,{"items":1556,"total":1704},[1557,1574,1580,1596,1609,1622,1635,1652,1663,1673,1684,1694],{"slug":1558,"name":1558,"fn":1559,"description":1560,"org":1561,"tags":1562,"stars":1571,"repoUrl":1572,"updatedAt":1573},"datafusion-python","write Apache DataFusion Python code","Use when the user is writing datafusion-python (Apache DataFusion Python bindings) DataFrame or SQL code. Covers imports, data loading, DataFrame operations, expression building, SQL-to-DataFrame mappings, idiomatic patterns, and common pitfalls.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1563,1566,1568],{"name":1564,"slug":1565,"type":15},"Data Analysis","data-analysis",{"name":1567,"slug":38,"type":15},"Python",{"name":1569,"slug":1570,"type":15},"SQL","sql",593,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fdatafusion-python","2026-07-12T08:36:04.957626",{"slug":4,"name":4,"fn":5,"description":6,"org":1575,"tags":1576,"stars":22,"repoUrl":23,"updatedAt":24},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1577,1578,1579],{"name":20,"slug":21,"type":15},{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},{"slug":1581,"name":1581,"fn":1582,"description":1583,"org":1584,"tags":1585,"stars":1593,"repoUrl":1594,"updatedAt":1595},"bydbql","generate and execute BanyanDB BydbQL queries","Generate, validate, and optionally execute read-only BanyanDB BydbQL for STREAM, MEASURE, TRACE, and PROPERTY resources. Use when the user asks to query BanyanDB, translate natural language to BydbQL, inspect BanyanDB schema or data, validate BydbQL, or fetch raw BanyanDB records.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1586,1589,1592],{"name":1587,"slug":1588,"type":15},"Analytics","analytics",{"name":1590,"slug":1591,"type":15},"Database","database",{"name":1569,"slug":1570,"type":15},344,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fskywalking-banyandb","2026-07-12T08:31:01.294423",{"slug":1597,"name":1597,"fn":1598,"description":1599,"org":1600,"tags":1601,"stars":1593,"repoUrl":1594,"updatedAt":1608},"compiling","compile and build BanyanDB projects","Compile and build the SkyWalking BanyanDB project. Use when the user asks to compile, build, or generate code for this project.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1602,1605],{"name":1603,"slug":1604,"type":15},"Build","build",{"name":1606,"slug":1607,"type":15},"Engineering","engineering","2026-07-12T08:31:06.373309",{"slug":1610,"name":1610,"fn":1611,"description":1612,"org":1613,"tags":1614,"stars":1593,"repoUrl":1594,"updatedAt":1621},"gh-pull-request","create GitHub pull requests for BanyanDB","Create a GitHub pull request for SkyWalking BanyanDB. Use when the user asks to create a PR, submit changes, or open a pull request.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1615,1618],{"name":1616,"slug":1617,"type":15},"GitHub","github",{"name":1619,"slug":1620,"type":15},"Pull Requests","pull-requests","2026-07-12T08:31:03.792415",{"slug":1623,"name":1623,"fn":1624,"description":1625,"org":1626,"tags":1627,"stars":1593,"repoUrl":1594,"updatedAt":1634},"vendor-update","update Go and Node.js vendor dependencies","Upgrade Go\u002FNode.js vendor dependencies and sync tool versions. Use whenever the user says \"upgrade dependencies\", \"update vendors\", \"vendor update\", \"run vendor-upgrade\", \"bump dependencies\", \"update packages\", or asks to run the `vendor-update` Make target. This skill also checks `scripts\u002Fbuild\u002Fversion.mk` after upgrading to see if any tracked tool versions need updating too, and removes stale binaries from `bin\u002F` when versions change.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1628,1631],{"name":1629,"slug":1630,"type":15},"Go","go",{"name":1632,"slug":1633,"type":15},"Node.js","node-js","2026-07-12T08:31:02.555555",{"slug":1636,"name":1636,"fn":1637,"description":1638,"org":1639,"tags":1640,"stars":1649,"repoUrl":1650,"updatedAt":1651},"cayenne-cgen","generate Cayenne entity Java classes","Use this skill whenever the user wants to (re)generate Cayenne entity Java classes from a DataMap. Trigger on phrases like 'generate Java classes', 'regenerate entities', 'run cgen', 'create the entity classes', 'why is the Artist class missing fields', 'where did the `_Abstract*` classes come from', 'sync the entity classes with the model', or any request to materialize Java from the DataMap. Also trigger as a follow-up after modeling changes (someone added an entity, attribute, or relationship and now the Java side is stale). This skill exclusively uses the `mcp__cayenne__cgen_run` MCP tool — it does NOT use `mvn cayenne:cgen` or the Gradle cgen task.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1641,1644,1646],{"name":1642,"slug":1643,"type":15},"Data Modeling","data-modeling",{"name":1645,"slug":36,"type":15},"Java",{"name":1647,"slug":1648,"type":15},"ORM","orm",343,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fcayenne","2026-07-12T08:32:33.575211",{"slug":1653,"name":1653,"fn":1654,"description":1655,"org":1656,"tags":1657,"stars":1649,"repoUrl":1650,"updatedAt":1662},"cayenne-db-import","import database schema into Cayenne DataMaps","Use this skill when the user wants to import database schema metadata into a Cayenne DataMap — the *model\u002Fmapping only*, not names or Java classes. Trigger on phrases like 'reverse engineer the database', 'import the schema', 'generate a DataMap from my DB', 'add the new tables from the DB into the model', 'import the customer table', 'create entities from these tables', or any request to read database metadata to populate or update a DataMap's XML. This is for *full schema* or *bulk table* import; one-off a-la-carte entity additions belong in the cayenne-modeling skill. IMPORTANT — scope: this imports the mapping ONLY; it does not clean up the Object-layer names or (re)generate Java classes. When the user wants their whole project brought in line with the DB ('sync my project with the database', 'my schema changed, update everything', 'update my entities\u002Fclasses from the DB'), that is the end-to-end `cayenne-full-db-sync` skill, which runs this import and then name cleanup and class generation. To regenerate classes alone use `cayenne-cgen`. The skill runs reverse engineering directly via the `mcp__cayenne__dbimport_run` MCP tool when a DBConnector is already configured; otherwise it opens the CayenneModeler GUI via `mcp__cayenne__open_project` to configure the connection first.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1658,1659,1660,1661],{"name":1590,"slug":1591,"type":15},{"name":1645,"slug":36,"type":15},{"name":1647,"slug":1648,"type":15},{"name":1569,"slug":1570,"type":15},"2026-07-19T05:40:33.655062",{"slug":1664,"name":1664,"fn":1665,"description":1666,"org":1667,"tags":1668,"stars":1649,"repoUrl":1650,"updatedAt":1672},"cayenne-full-db-sync","synchronize Cayenne projects with database","Use this skill when the user wants to bring their WHOLE Cayenne project in line with the database in one shot — the mapping, the Object-layer names, and the generated Java classes together. This is the end-to-end 'sync with the DB' workflow, and it orchestrates three skills in order: `cayenne-db-import` (import schema metadata into the DataMap) → `cayenne-model-naming` (polish the just-imported names) → `cayenne-cgen` (regenerate Java classes). Trigger on holistic phrases like 'sync my project with the database', 'sync with the DB', 'my schema changed, update everything', 'update my entities\u002Fclasses from the database', 'reverse engineer and regenerate the classes', 'import the new tables and rebuild the entities', 'full DB sync', 'bring the model and classes up to date with the DB'. The distinguishing signal is scope: the user wants the whole project (mapping + names + Java code), not just one stage. For the *model\u002Fmapping only* (no name cleanup, no class generation) use `cayenne-db-import`; to (re)generate classes alone use `cayenne-cgen`; to clean names alone use `cayenne-model-naming`. Uses the `mcp__cayenne__dbimport_run` and `mcp__cayenne__cgen_run` MCP tools via the sub-skills; does NOT use Maven or Gradle goals.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1669,1670,1671],{"name":1590,"slug":1591,"type":15},{"name":1645,"slug":36,"type":15},{"name":1647,"slug":1648,"type":15},"2026-07-19T06:03:49.112969",{"slug":1674,"name":1674,"fn":1675,"description":1676,"org":1677,"tags":1678,"stars":1649,"repoUrl":1650,"updatedAt":1683},"cayenne-model-naming","clean up Cayenne object-layer names","Use this skill to clean up Object-layer names in a Cayenne DataMap — ObjEntity, ObjAttribute, and ObjRelationship names, plus DbRelationship names (the first-class unit of relationship cleanup — every FK has one whether or not an ObjRelationship was generated; the ObjRelationship name is synced to it when one exists) — so they read as descriptive, consistent Java. Trigger on phrases like 'clean up the model names', 'fix the entity names', 'these names look ugly', 'make the names descriptive', 'normalize the ObjEntity\u002Fattribute\u002Frelationship names', 'why is this relationship called team1', 'rename entities to be consistent', 'the import produced Gametype instead of GameType'. Invoke it on an explicit user request, or as a manual follow-up after a `cayenne-db-import` to polish the just-imported additions — it is never triggered automatically. IMPORTANT: this is a LIGHT polish pass — CayenneModeler's reverse-engineering already produces good names for the common case; only improve the specific things its deterministic algorithm cannot (run-together names with no separators like `gametype`, meaningless numbered names like `team1` from multiple relationships between two tables, and a common entity prefix that leaks into relationship names like `aaOrders`). Do NOT rewrite names that are already correct. This is Obj-layer naming polish; for structural model edits use `cayenne-modeling`, and for regenerating classes afterward use `cayenne-cgen`.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1679,1680,1681,1682],{"name":1642,"slug":1643,"type":15},{"name":1590,"slug":1591,"type":15},{"name":1645,"slug":36,"type":15},{"name":1647,"slug":1648,"type":15},"2026-07-22T05:35:32.342548",{"slug":1685,"name":1685,"fn":1686,"description":1687,"org":1688,"tags":1689,"stars":1649,"repoUrl":1650,"updatedAt":1693},"cayenne-modeler","manage Cayenne projects with CayenneModeler","Use this skill when the user explicitly wants to open CayenneModeler (the GUI) on a Cayenne project, or when the modeling task is inherently visual — reverse engineering (delegated to cayenne-db-import), bulk relationship layout, multi-entity visual refactoring. Trigger on phrases like 'open the Modeler', 'open in CayenneModeler', 'launch the GUI', 'edit visually', 'show me the project in the Modeler'. Do NOT trigger as a fallback for ordinary a-la-carte XML edits — those belong in the cayenne-modeling skill, which is faster and doesn't require the user to context-switch.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1690,1691,1692],{"name":1642,"slug":1643,"type":15},{"name":1645,"slug":36,"type":15},{"name":1647,"slug":1648,"type":15},"2026-07-12T08:32:37.199428",{"slug":1695,"name":1695,"fn":1696,"description":1697,"org":1698,"tags":1699,"stars":1649,"repoUrl":1650,"updatedAt":1703},"cayenne-modeling","edit and extend Cayenne ORM models","Use this skill whenever the user wants to edit, inspect, or extend the Cayenne ORM model in a project — adding or modifying entities, attributes, relationships, embeddables, named queries, stored procedures, or DataNodes. Trigger on phrases like 'add an ObjEntity', 'add a DbEntity', 'add a relationship', 'expose this column as an attribute', 'create a new DataMap', 'add a named query', 'create an embeddable', 'add a stored procedure', 'change the attribute type', 'mark this column as nullable', 'rename this entity', or any mention of a Cayenne `*.map.xml` or `cayenne-*.xml` file. Also trigger when the user references modeling concepts (ObjEntity, DbEntity, ObjAttribute, DbAttribute, ObjRelationship, DbRelationship, Embeddable, dbEntityName, deleteRule, db-attribute-path, db-relationship-path, defaultPackage) in the context of a Cayenne-using app. This is the *primary* skill for a-la-carte ORM model manipulation — direct XML edits, not the Modeler GUI.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1700,1701,1702],{"name":1590,"slug":1591,"type":15},{"name":1645,"slug":36,"type":15},{"name":1647,"slug":1648,"type":15},"2026-07-19T05:40:32.6889",109]