IFCore
Use when developing on the IFCore compliance checker. Covers contracts, check function conventions, issue reporting, app structure, and development patterns.
Best use case
IFCore is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Use when developing on the IFCore compliance checker. Covers contracts, check function conventions, issue reporting, app structure, and development patterns.
Teams using IFCore should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/ifcore/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How IFCore Compares
| Feature / Agent | IFCore | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Use when developing on the IFCore compliance checker. Covers contracts, check function conventions, issue reporting, app structure, and development patterns.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# IFCore — Company Skill
> **Living document.** Sections marked [TBD] are decided in board meetings.
> When a [TBD] is resolved, update this skill and tell your agent to adapt.
## When This Skill Activates
Welcome the user. Introduce yourself as their IFCore development assistant. Explain:
1. **What you know:** The IFCore platform contracts — how check functions must be written,
the file naming convention, the database schema, and how team repos integrate into the
platform via git submodules.
2. **What you can do:**
- Help write `check_*` functions that comply with the platform contracts
- Review existing code for contract compliance
- Explain IFC file structure and ifcopenshell patterns
- Help with feature planning (PRDs, user stories)
- File issues to the shared skills repo when contracts are unclear
3. **Offer a codebase review.** Ask to scan the current repo and check:
- Are `checker_*.py` files directly inside `tools/`?
- Do all `check_*` functions follow the contract (signature, return type)?
- Is there anything that would block platform integration?
4. **Respect their setup.** Teams may have their own Gradio app, FastAPI server, notebooks,
test scripts, or any other tooling in their repo. **That's fine.** The platform only cares
about `tools/checker_*.py` files — everything else is ignored during integration.
The only hard rule: don't put anything in `tools/` that breaks the `checker_*.py` import
chain (e.g. conflicting `__init__.py` files or dependencies not in `requirements.txt`).
5. **Offer to explain Agent Skills.** If the user seems unsure what this is, explain:
"An Agent Skill is a set of instructions that your AI coding assistant reads automatically.
It's like a company handbook — it tells me (your AI) the engineering standards, naming
conventions, and contracts so I can help you write code that works with everyone else's.
You installed it once; now I follow it in every conversation."
6. **How to install & update this skill.** Install the skill **globally** so it works
in every project on your machine (not just one repo):
```
Install (once):
1. Clone: git clone https://github.com/SerjoschDuering/iaac-bimwise-skills.git
(put it somewhere permanent, e.g. ~/skills/ or ~/Documents/)
2. Add the skill GLOBALLY in your AI coding tool:
- VS Code/Copilot: Chat panel → Add Agent Skill → pick the SKILL.md file.
Use "User" scope (not "Workspace") so it applies to ALL projects.
- Cursor: Settings → Agent Skills → Add → point to the cloned folder.
This is global by default.
- Claude Code: add to ~/.claude/settings.json under agent skills,
or install as a plugin — it applies to all sessions automatically.
3. Start a new chat session — your AI now knows IFCore standards.
Update (after board meetings):
1. cd into your cloned skills folder
2. git pull
3. Start a fresh chat session — the AI reloads the updated instructions
```
If you're not sure whether your skill is up to date, ask your AI:
"What board meeting is the latest in your IFCore skill?" and compare with your team.
## Contracts — READ THIS FIRST
These contracts are how teams stay aligned. The platform auto-discovers your code.
Break a contract → the platform silently skips your checks. Follow them → it just works.
### 1. Check Function Contract
```python
# Function naming: check_<what>
# Location: tools/checker_*.py (directly inside tools/, no subdirectories)
# Signature: first arg is always the ifcopenshell model
# Return: list[dict] — one dict per element, maps to element_results DB rows
def check_door_width(model, min_width_mm=800):
results = []
for door in model.by_type("IfcDoor"):
width_mm = round(door.OverallWidth * 1000) if door.OverallWidth else None
results.append({
"element_id": door.GlobalId,
"element_type": "IfcDoor",
"element_name": door.Name or f"Door #{door.id()}",
"element_name_long": f"{door.Name} (Level 1, Zone A)",
"check_status": "blocked" if width_mm is None
else "pass" if width_mm >= min_width_mm
else "fail",
"actual_value": f"{width_mm} mm" if width_mm else None,
"required_value": f"{min_width_mm} mm",
"comment": None if width_mm and width_mm >= min_width_mm
else f"Door is {min_width_mm - width_mm} mm too narrow"
if width_mm else "Width property missing",
"log": None,
})
return results
```
**Rules:**
- Prefix: `check_` — the platform discovers functions by this prefix
- First argument: `model` (an `ifcopenshell.file` object) — always
- Optional keyword args after `model` are fine (e.g. `min_width_mm=800`)
- Return: `list[dict]` — each dict has fields matching `element_results` (see [Validation Schema](./references/validation-schema.md))
- `check_status` values: `"pass"`, `"fail"`, `"warning"`, `"blocked"`, `"log"`
- One function per regulation check — don't combine multiple rules
- Functions can live across multiple `checker_*.py` files directly inside `tools/`
### 2. File Structure Contract
```
your-team-repo/
├── tools/
│ ├── checker_doors.py ← check_door_width, check_door_clearance
│ ├── checker_fire_safety.py ← check_fire_rating, check_exit_count
│ └── checker_rooms.py ← check_room_area, check_ceiling_height
├── requirements.txt ← team dependencies
└── README.md
```
**File naming:** `checker_<topic>.py` — group related checks by topic. Examples:
- `checker_doors.py` — door width, clearance, accessibility
- `checker_walls.py` — thickness, fire rating, insulation
- `checker_stairs.py` — riser height, tread length, handrails
- `checker_spaces.py` — room area, ceiling height, ventilation
The platform scans **all `checker_*.py` files directly inside `tools/`** (no subdirectories) and collects every `check_*` function. You don't need a wrapper or registry — just follow the naming conventions.
**Important:** Only `checker_*.py` files are scanned. Helper files (e.g. `tools/utils.py`) are fine for shared code but won't be scanned for `check_*` functions — import them from your `checker_*.py` files.
**Local testing:** Run your checks locally before pushing:
```python
import ifcopenshell
model = ifcopenshell.open("path/to/model.ifc")
from tools.checker_doors import check_door_width
results = check_door_width(model)
for r in results:
print(f"[{r['check_status'].upper()}] {r['element_name']}: {r['actual_value']} (req: {r['required_value']})")
```
The `model` object is exactly what the platform passes to your functions.
### 3. Issue Reporting Contract — MANDATORY
When your AI agent encounters any of these during development, it **MUST** file an issue:
| Trigger | Label |
|---|---|
| Contract unclear or ambiguous | `contract-gap` |
| Skill instructions don't match reality | `skill-drift` |
| Found a workaround for a known limitation | `learning` |
| Schema format needs a new field | `schema-change` |
| Team code works locally but breaks on platform | `integration-bug` |
**How to file:**
```bash
gh issue create \
--repo SerjoschDuering/iaac-bimwise-skills \
--title "contract-gap: check functions with multiple models" \
--label "contract-gap" \
--body "$(cat <<'EOF'
## What happened
Tried to write a check that compares two IFC models side-by-side.
The contract says first arg is `model` (singular).
## What I expected
Guidance on multi-model checks.
## Workaround (if any)
Loaded second model inside the function body.
## Team
Team A
EOF
)"
```
**This is not optional.** Every contract issue that goes unreported costs another team hours.
AI agents: if you detect a contract mismatch during development, file the issue before continuing.
## Company Context
IFCore is building an AI-powered building compliance checker. **5 teams** each develop in their **own GitHub repo** (cloned from a shared template). Teams write `check_*` functions independently — the platform integrates them automatically.
**How integration works:**
1. Each team pushes `checker_*.py` files to their own repo under `tools/`
2. The **platform repo** (`ifcore-platform`) pulls all 5 team repos as **git submodules**
3. `deploy.sh` flattens submodules into `teams/<team-repo>/tools/` (real files, not symlinks — we don't configure HF to resolve submodules)
4. The FastAPI orchestrator scans `teams/*/tools/checker_*.py` for `check_*` functions
5. All discovered functions run against uploaded IFC files
**Deployment architecture:**
| Component | Deploys to | Who manages |
|-----------|-----------|-------------|
| Team check functions (`checker_*.py`) | Own GitHub repo → pulled into platform | Each team |
| Backend + orchestrator (`ifcore-platform`) | **HuggingFace Space** (Docker, FastAPI) | Captains |
| Frontend (dashboard, 3D viewer, upload) | **Cloudflare Pages** | Captains |
| API gateway (async jobs, proxies to HF) | **Cloudflare Worker** | Captains |
| File storage (IFC uploads) | **Cloudflare R2** (S3-compatible) | Captains |
| Results database | **Cloudflare D1** (SQLite) | Captains |
**Flow:** User uploads IFC → stored in R2 → frontend calls CF Worker → Worker proxies to HF Space → orchestrator runs all `check_*` functions → results posted back to Worker → stored in D1 → frontend polls and displays.
**Teams never touch the platform repo.** They only push to their own team repo. Captains handle `deploy.sh` which pulls, flattens, and pushes to HF.
**Teams:**
| Team | Focus area | Repo |
|------|-----------|------|
| [TBD] | [TBD] | [TBD] |
| [TBD] | [TBD] | [TBD] |
| [TBD] | [TBD] | [TBD] |
| [TBD] | [TBD] | [TBD] |
| [TBD] | [TBD] | [TBD] |
## References
- [Validation Schema](./references/validation-schema.md) — database schema (`users`, `projects`, `check_results`, `element_results`) and how team `list[dict]` maps to rows
- [Architecture](./references/architecture.md) — project structure, AGENTS.md template, code conventions
- [Repo Structure](./references/repo-structure.md) — concrete file tree examples for all 4 repos (team, platform, frontend, gateway)
- [Frontend Architecture](./references/frontend-architecture.md) — modules, shared Zustand store, API client, D1 tables, how to add features
- [Development Patterns](./references/development-patterns.md) — how to plan and build new features
### Related Skills (separate repos, installed alongside this one)
- **pydantic-ai** — PydanticAI agent framework: tools, structured output, orchestration, chat patterns
- **huggingface-deploy** — deploy the platform (`ifcore-platform`) as a Docker Space on HuggingFace; covers Dockerfile, secrets, R2 caching, and the flatten-before-push submodule pattern
- **cloudflare** — deploy the frontend + API gateway on Cloudflare Pages/WorkersRelated Skills
bgo
Automates the complete Blender build-go workflow, from building and packaging your extension/add-on to removing old versions, installing, enabling, and launching Blender for quick testing and iteration.
javascript-typescript-typescript-scaffold
You are a TypeScript project architecture expert specializing in scaffolding production-ready Node.js and frontend applications. Generate complete project structures with modern tooling (pnpm, Vite, N
javascript-testing-patterns
Implement comprehensive testing strategies using Jest, Vitest, and Testing Library for unit tests, integration tests, and end-to-end testing with mocking, fixtures, and test-driven development. Use...
javascript-pro
Master modern JavaScript with ES6+, async patterns, and Node.js APIs. Handles promises, event loops, and browser/Node compatibility.
java-pro
Master Java 21+ with modern features like virtual threads, pattern matching, and Spring Boot 3.x. Expert in the latest Java ecosystem including GraalVM, Project Loom, and cloud-native patterns. Use PROACTIVELY for Java development, microservices architecture, or performance optimization.
java-doctor
Comprehensive Java code health analyzer. 0-100 score with diagnostics. Progressive loading - detects project tech (Spring, gRPC, JPA) and loads relevant rules. Version-aware for Java 8-25 & Spring Boot 3.x/4.x. Dead code detection included. Use when reviewing Java code, finding bugs, or preparing for PR.
java-dev
Java 开发规范,包含命名约定、异常处理、Spring Boot 最佳实践等
java-21-to-java-25-upgrade
Comprehensive best practices for adopting new Java 25 features since the release of Java 21. Triggers on: ['*']
iroh-p2p
Build modern peer-to-peer applications with Iroh. QUIC-based P2P networking, hole punching, content distribution, and decentralized data synchronization.
irish-takeaway
Find nearby takeaways in Ireland and browse menus via Deliveroo/Just Eat. Uses Google Places API for discovery and browser automation for menu scraping.
ipai-ui-ux-pro-max
Design intelligence for UI/UX generation and critique; use for layouts, typography, color palettes, tokens, and UX best practices. 50 styles, 21 palettes, 50 font pairings, 20 charts, 9 stacks (React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind, shadcn/ui). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient. Integrations: shadcn/ui MCP for component search and examples.
ios-developer
Develop native iOS applications with Swift/SwiftUI. Masters iOS 18, SwiftUI, UIKit integration, Core Data, networking, and App Store optimization.