AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
Foundry IQ provides a structured framework for creating, diagnosing, and connecting knowledge bases to AI agents. It supports making local or Blob-based documents searchable, managing multi-source knowledge configurations, and retrieving information with citations. The skill emphasizes strict adherence to defined procedures for service discovery, resource creation, and troubleshooting to ensure reliable agent-knowledge integration.
What it does
- Creates searchable knowledge bases from local or Azure Blob storage documents.
- Connects existing knowledge bases to AI agents.
- Diagnoses issues with knowledge base configurations or unsupported connectors.
- Retrieves information from knowledge bases with source citations.
- Manages the lifecycle of search services and knowledge sources.
- Routes requests based on specific operational needs rather than source counts.
When to use it
- When you need to make local or cloud-stored documents searchable by an AI agent.
- When connecting an existing knowledge base to a new or current agent.
- When troubleshooting or diagnosing a knowledge base configuration.
- When you need to create a new search service or knowledge source.
- When performing retrieval tasks that require citations from a knowledge base.
Advantages
- Provides a clear, procedural approach to knowledge base management.
- Ensures consistent handling of multi-source knowledge configurations.
- Includes built-in diagnostic paths for troubleshooting.
- Supports secure, citation-backed retrieval for agent responses.
- Prevents unauthorized or unsupported configuration changes.
Usage examples
- “Create a new knowledge base from my Azure Blob container.”
- The agent will initiate the knowledge base creation procedure, validating the source and setting up the necessary search indexing.
- “Connect my existing knowledge base to the current agent.”
- The agent will follow the connection workflow to link the specified knowledge base to the agent's retrieval pipeline.
- “Why is my multi-source knowledge base failing to index?”
- The agent will trigger the diagnostic procedure to identify configuration drifts or unsupported connector issues.
- “Retrieve information about project timelines from the knowledge base.”
- The agent will query the knowledge base and provide an answer with citations from the source documents.
Install
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/microsoft/foundry-iq/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip foundry-iq.zip -d .agents/skills
Documentation by Microsoft
Foundry IQ
Read one procedure before questions/actions; invocation is not a read.
Read the owning procedure before blocked/unsupported responses too.
Before mutation plans/approval, successfully read its required pre-action references, selected
branches only. Do not reload successful reads. On failure, try only permitted
bounded exact-path reads with any supported reader; never bypass restrictions
or search broadly. If still unavailable: blocked: reference-unavailable, name
missing references and inability to plan. Never invent requirements/plans.
Failures first.
Cleanup and receipt-backed execution go directly to their lifecycle/producer owner; do not reopen Search intake, provisioning or hardening.
Before expensive service discovery, reuse supplied resource/intent; otherwise ask one early USE EXISTING / FIND CANDIDATES / CREATE NEW choice. Only FIND enumerates; supplied identity uses exact/minimum scoped resolution. CREATE checks its proposed name, not existing-service inventories. Preserve these answers across source/KB/CU/model handoffs; selection is not write approval.
Searchable docs: KB + validated retrieval. Confirm intent once; KS-only must be explicit. Child success is not KB completion. Unclear/compound/mode/completion: read.
Route by requested operation, not existing KB source count. Connecting an existing KB with two or more sources, without changing the KB, uses Connect. Read-only operations use their owning procedure and actual helper constraints; this does not add retrieval modes or supported source kinds. Explicit unsupported provisioning or multi-source KB creation/reconfiguration uses Diagnose and stops before discovery, even when connecting an agent is also requested. This routing takes precedence over classic-search terms (e.g. hybrid search) in compound requests. Never end in a plain refusal: Diagnose gives the boundary, docs pointer and agent handoff; writes still need an approved concrete plan. Do not silently execute only the supported part of a compound request. If existing-KB connection versus KB creation/reconfiguration is unclear, read intent-routing and clarify that scope before Azure discovery. Never infer KB mutation.
| Outcome | Read |
|---|---|
| Cleanup | Plan cleanup |
| Failure/drift | Diagnose |
| Unsupported connector provisioning / multi-source KB creation or reconfiguration | Diagnose |
| Connect | Connect |
| Read KB | Query |
| Search only | Search |
| File KS only | File |
| Blob/ADLS KS only | Blob |
| Searchable/KB | KB |
Generic agents: microsoft-foundry.
Reads: no approval; approve unchanged plans before writes.
Hide hashes. No Search/Storage keys, scope widening, guessed identity/boundaries,
drift repair or joint cleanup/creation approval. Acceptance != success.
Files
- ATTRIBUTION.mdAdded by AutoGineer977 B
- LICENSELicence file added by AutoGineer1.1 KiB
- SKILL.md3.7 KiB
- agents/connect-hosted-toolbox.md7.8 KiB
- agents/connect-hosted.md7.8 KiB
- agents/connect-prompt-sdk-fallback.md7.8 KiB
- agents/connect.md7.8 KiB
- agents/create-missing-agent.md7.8 KiB
- helpers/_blob_observation.pyScript4.4 KiB
- helpers/_blob_source_read.pyScript39.5 KiB
- helpers/_bootstrap_io.pyScript30.1 KiB
- helpers/_cleanup_dependencies.pyScript27.5 KiB
- helpers/_cleanup_receipts.pyScript13.5 KiB
- helpers/_common.pyScript36.2 KiB
- helpers/_document_adapters.pyScript15.0 KiB
- helpers/_document_limits.pyScript3.9 KiB
- helpers/_embedding.pyScript7.0 KiB
- helpers/_file_inventory.pyScript24.4 KiB
- helpers/_file_source_config.pyScript15.6 KiB
- helpers/_indexer_observation.pyScript7.1 KiB
- helpers/_initial_prompt.pyScript12.5 KiB
- helpers/_private_json.pyScript2.4 KiB
- helpers/_progress.pyScript12.1 KiB
- helpers/_prompt_read.pyScript17.7 KiB
- helpers/_search_read.pyScript6.0 KiB
- helpers/_source_readback.pyScript1.6 KiB
- helpers/blob-contracts.md7.8 KiB
- helpers/blob-cu-contracts.md7.8 KiB
- helpers/blob_inventory.pyScript17.1 KiB
- helpers/blob_recheck.pyScript64.6 KiB
- helpers/blob_source.pyScript35.8 KiB
- helpers/bootstrap-contracts.md7.8 KiB
- helpers/bootstrap_azure.pyScript41.5 KiB
- helpers/cleanup_plan.pyScript41.4 KiB
- helpers/contracts.md7.8 KiB
- helpers/cu_ingestion_auth.pyScript12.5 KiB
- helpers/document-assessment.md7.8 KiB
- helpers/document_assess.pyScript14.0 KiB
- helpers/file-upload-recovery.md7.8 KiB
- helpers/file_cu_canary.pyScript32.7 KiB
- helpers/file_cu_mi.pyScript9.6 KiB
- helpers/file_ingest.pyScript15.4 KiB
- helpers/file_source.pyScript31.7 KiB
- helpers/file_upload.pyScript53.7 KiB
- helpers/hosted_connect.pyScript30.8 KiB
- helpers/kb-contracts.md7.8 KiB
- helpers/knowledge_base_retrieve.pyScript7.7 KiB
- helpers/model-discovery-contracts.md7.8 KiB
- helpers/model-discovery-scopes.md7.8 KiB
- helpers/model_discovery.pyScript23.7 KiB
- helpers/private-artifacts.md7.2 KiB
- helpers/private_artifacts.pyScript4.8 KiB
- helpers/prompt_cleanup.pyScript22.0 KiB
- helpers/prompt_connect.pyScript62.3 KiB
- helpers/requirements-assessment.txt103 B
- helpers/retrieval-verification-contracts.md7.8 KiB
- helpers/retrieval_verify.pyScript19.6 KiB
- helpers/search-intake-contracts.md7.6 KiB
- helpers/search_intake.pyScript18.4 KiB
- helpers/search_reconcile.pyScript59.7 KiB
- helpers/source_vector.pyScript33.2 KiB
- helpers/throttle-recovery.md5.0 KiB
- helpers/vector-contracts.md7.8 KiB
- knowledge-bases/create.md8.1 KiB
- knowledge-bases/retrieve.md7.8 KiB
- knowledge-sources/create-azure-blob.md7.8 KiB
- knowledge-sources/create-file.md7.8 KiB
- lifecycle/cleanup.md7.8 KiB
- references/abstention.md1.0 KiB
- references/blob-binding-evidence.md7.8 KiB
- references/blob-indexer-observation.md7.7 KiB
- references/blob-ingestion-progress.md6.5 KiB
- references/blob-readiness-recheck.md7.8 KiB
- references/blob-vector-readiness.md2.6 KiB
- references/bootstrap-azure.md7.8 KiB
- references/content-fit.md7.8 KiB
- references/cu-ingestion.md7.8 KiB
- references/file-cu-canary.md7.8 KiB
- references/intent-routing.md7.7 KiB
- references/owner.md2.1 KiB
- references/platform-contracts.md7.7 KiB
- references/platform-interfaces.md7.8 KiB
- references/resource-intake.md7.8 KiB
- references/search-substrate.md7.8 KiB
- references/standard-cu.md7.8 KiB
- search-services/create.md7.8 KiB
- troubleshooting/diagnose.md8.7 KiB
helpers/blob-contracts.md
Blob/ADLS contract
Blob progress: --no-progress disables stderr.
Planning
python helpers/blob_source.py --plan intent.jsonIntent:
{"schema_version":"1.0","endpoint":"https://svc.search.windows.net","name":"manuals","owner":"[email protected]","storage_id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Example/providers/Microsoft.Storage/storageAccounts/example","container":"documents","prefix":"Reports/","is_adls":false,"api_version":"2026-04-01","processing":"minimal-lexical","network_access":"public","identity":"system-assigned","permission_options":[],"ingestion_schedule":null,"description":null,"rbac":{"assignments":[{"id":"<observed-assignment>","principalId":"<observed-principal>"}]},"network":{"posture":"public","evidence":"<fresh-readback-reference>"},"inventory_limits":{"max_pages":100,"max_objects":10000,"max_requests":25000,"deadline_seconds":600},"poll":{"deadline_seconds":600,"max_requests":120,"interval_seconds":5}}Content fit (no default): minimal-lexical=minimal/no vectors,
minimal-vector=minimal/vectors,
standard-cu=standard/optional vectors; not KB reasoning.
Public/system-assigned; no schedule settings/permission ingestion.
Blob: 2026-04-01 or 2026-08-01-preview; ADLS: preview, is_adls: true,
directory prefix without trailing /. Root: explicit prefix: "", no widening.
Description: text/null; other modes: planning-processing-unsupported.
No writes/auth changes/installs/polling/cleanup. Verify access/cost/data preapproval.
Two exact Search GETs bracket two-pass Storage observation. Reuse
requires matching definition/ETag, Storage binding and four generated identities.
reuse_input_file/reuse_result_file: retained approved input/successful creation
result. Validate pairing/types before auth; load only for redacted binding.
Required fingerprints/boundaries/source ETags/definitions/generated identities
must match fresh readback. Unproven binding: source-binding-unverified.
Old consent/readiness never authorizes new work.
Exit 0: status: planned, plan_fingerprint, execution_input,
approval_summary, request IDs and writes_performed: []. Save only
execution_input; its approval is false and the executor rejects it until
actual unchanged-plan approval. Private artifacts preserve ResourceId connection
strings/fingerprints; ordinary result redaction is unchanged.
Summaries omit paths/ACLs/hashes; no readiness. Exact reuse sets execution_required and
mutation_approval_required false: no executor or approval needed.
Drift: rerun --plan, replace the artifact, discard consent; never hand-edit
nested plans/hashes. Cleanup stays separate and run-owned-only.
For standard-cu, read CU choices/wire.
content_understanding binds CU; optional embedding selects source vectors.
Discovery
python helpers/blob_source.py --discover <boundary.json> accepts this closed
JSON (no approval):
{"boundary":{"storage_id":"<ARM-account-ID>","container":"<container-or-filesystem>","prefix":"Reports/","is_adls":false},"inventory_limits":{"max_pages":100,"max_objects":10000,"max_requests":25000,"deadline_seconds":600}}Arbitrary partial-name prefixes: boundary-ambiguous.
Public cloud/private DNS.
Read all pages twice including empty continuations. Exit 0 returns
status: discovered, mutation: none, writes_performed: [], boundary/account,
sorted objects (URL/path/size/ETag/version), ADLS path/property digests,
request IDs, inventory_digest; not approval/ingestion.
Incomplete/duplicate/out-of-scope/unreadable/unstable evidence blocks.
ADLS HEADs path/ancestor ACLs; no raw ACL/content. Operator access is not Search access.
Every path has an ACL HEAD; every non-root path also has a properties HEAD for
type and matching ETag. Root has no type header. Preserve ancestors and normalize
quoted/unquoted Blob/DFS ETags only for comparison; never skip required reads.
Inventory bounds apply per discovery: pages/objects per pass; requests/time across both passes, including empty pages and all HEADs. Maximum accepted limits are 1000 pages, 100000 objects, 200000 requests and 3600 seconds; exceeding any bound blocks, never truncates. Planning adds at most two Search GETs and shares its time budget with discovery. Bodies are capped at 8 MiB plus one overflow probe byte. Socket watchdog interrupts body reads; DNS/connect/header acquisition and scheduling are not hard wall-clock bounded. Redirects and unsupported deadline readers block. Limits are safety bounds, not spending consent.
Apply
python helpers/blob_source.py --input <approved.json> uses:
{"schema_version":"1.0","plan":{},"approval":{"confirmed":true,"fingerprint":"sha256:<canonical-plan-digest>"}}Canonical JSON: UTF-8, sorted keys, ASCII-escaped/compact.
operation: reconcile-and-monitor, owner,
cleanup_approved: false, discovered boundary, inventory_digest,
inventory_limits, source,
poll: {"deadline_seconds":600,"max_requests":120,"interval_seconds":5}.
Planner reuse: expected_generated, four typed/name/service-managed identities,
checked before writes; legacy artifacts remain valid.
Planner creation sets expected_source_absent: true; an intervening source
blocks. Redacted GET requires the PUT ETag (body/header); conflicts block.
ambiguous unproven ownership remains partial, never adopted or cleaned up.
source: operation: reconcile, resource_type: knowledge-source, exact endpoint/name/api_version, action: create
or reuse, matching owner, cleanup_approved: false, approved
desired, and source_evidence with verified: true and the same
inventory_digest. ADLS also requires path_verified: true, acl_verified: true attest metadata, not effective Search permissions.
desired: matching name, kind: azureBlob; azureBlobParameters:
connectionString: ResourceId=<exact-storage-resource-id>, containerName,
exact folderPath (null for explicit root), boolean isADLSGen2,
ingestionParameters. Optional shared controls.
No keys/SAS/updates/credential environments or supplied createdResources/assetStore.
Recompute approval/evidence; block drift. Create conditionally/reuse zero-write;
supplied ETag must match.
Poll GET knowledgesources('{name}')/status within bounds.
Only 408/429/500/502/503/504/transport-ambiguous reads retry; 403/404 block.
Watch expiry pauses; it does not fail ingestion. Backoff and explicit GET-only
continuation/compact output: recheck.
Require completed start/end times at or after the pre-write cutoff,
nonnegative integer itemsUpdatesProcessed, itemsUpdatesFailed, and
itemsSkipped, zero failures, no observed relevant errors or active cycle.
Missing counts are not zero.
Completed status may be absent; reject partialSuccess/failure/malformed/unknown.
Never trigger indexers/edit schedules; stale success cannot pass.
Reuse also excludes the first observed completion.
Results
--receipt-dir: PUT acknowledgement before GET.
Binding/recovery: redaction, recovery,
reuse; never reconstruct cutoffs.
Timing differences: indexer checks.
Exit 0: completed; unverified zero-write reuse is exit 2,
blocked with reconciliation: completed. After a write, exit 3 / partial
retains approval/first failure/resources_remaining.run_owned.
Conflicting children aren't owned. Return generated identities/readiness/digests/
warnings/cleanup; errors retain status/request ID, not sensitive text.
No rollback/source writes/child edits.
Owner handles RBAC/private links. CLI Entra: ARM/Storage/Search audiences.
Probes: ARM GET 2025-06-01, Storage 2025-05-05 listing,
ADLS HEAD action=getAccessControl&upn=false.
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs Python
The author says: Azure
Security
What our scanner noticed· Medium risk
- References to credential files
- Instructions that use the network
- Scripts that your agent may run
This skill includes scripts that your agent may run. Read them before you use it.
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Created by
- Microsoft
- Publisher
- Microsoft (Official)
- Source
- microsoft/skills · .github/plugins/foundry-iq-skills/skills/foundry-iq · commit 0696600
- Licence
- MIT License (redistribution allowed)
- LICENSE (added by AutoGineer from .github/plugins/foundry-iq-skills/LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by Microsoft.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download foundry-iq.zip