A knowledge graph of the AI Engineer World's Fair 2026 talk corpus — 296 talks published April–August 2026 — modelled with the SPIKE framework and served by Omnigraph.
This repository is the complete, loadable definition of the graph:
| path | what it is |
|---|---|
schema.pg |
the schema — source of truth for the data model |
cluster.yaml, policies/ |
Omnigraph cluster config and the two Cedar policy bundles |
queries/*.gq |
113 stored queries the server serves (82 reads, 31 mutations) |
seed/entities.jsonl |
every node and edge except transcript chunks (18,694 records) |
seed/chunks.jsonl |
4,207 transcript chunks + their PartOfArtifact edges, embeddings added at load time |
seed/embed-spec.json |
the embedding spec for the chunks (gemini-embedding-2-preview, 3072-d) |
omnigraph-config.example.yaml |
client profile and alias pack for the CLI |
The seed files are an exact export of the served graph (last refreshed 2026-09-06). Nothing else is needed to stand the graph up.
| type | count | notes |
|---|---|---|
| Pattern | 16 | theses about change; the analytical spine |
| Signal | 1,325 | dated, sourced observations; each forms or contradicts patterns |
| Element | 1,100 | products, technologies, frameworks, concepts, ops practices |
| Insight | 582 | interpretations that highlight a pattern and rely on elements |
| KnowHow | 509 | practices with guidelines, referencing elements |
| Company | 285 | developers, labs, bigtech, investors, media, hardware |
| Expert | 336 | speakers, affiliated with companies |
| InformationArtifact | 315 | 296 talks (youtube, with video links) + 19 articles |
| SourceEntity | 17 | publishers; the talks publish via source-aie-yt |
| Chunk | 4,207 | ~220-word transcript passages over 273 talks, 3072-d embeddings |
| edges | 18,416 | 14,209 between entities + 4,207 chunk → talk |
Support and counter are FormsPattern / ContradictsPattern signal counts.
| pattern | kind | support / counter | thesis |
|---|---|---|---|
pat-verification-gap |
challenge | 332 / 0 | generation has industrialized, verification has not |
pat-harness-over-model |
dynamic | 244 / 20 | the load-bearing engineering sits around the model, and thins as models improve |
pat-model-not-bottleneck |
dynamic | 178 / 8 | models are good enough; value and failure moved to the layers around them |
pat-context-graphs |
dynamic | 92 / 4 | decision traces, ontology and time as an infrastructure layer above databases |
pat-sovereign-ai |
disruption | 69 / 2 | own the stack end to end; regulation removed optionality |
pat-saaspocalypse |
disruption | 67 / 2 | agents dissolve the SaaS presentation layer and per-seat pricing |
pat-value-of-judgement |
dynamic | 67 / 0 | as execution industrializes, the durable human edge is judgement |
pat-new-cyber-threats |
challenge | 57 / 1 | autonomous exploitation and agentic attack surfaces |
pat-ai-native-org |
dynamic | 57 / 0 | organizations restructure around agent delegation |
pat-accelerated-research |
dynamic | 48 / 1 | agents run research loops autonomously |
pat-agent-supply-chain |
challenge | 33 / 0 | skills, MCP servers and hallucinated packages form a new, weaker package ecosystem |
pat-agent-economy |
dynamic | 20 / 1 | agents as primary economic actors |
pat-durable-execution |
dynamic | 19 / 1 | a durable runtime layer below the harness becomes a product category |
pat-continual-learning-turn |
dynamic | 18 / 1 | improvement shifts from pre-training scale to post-deployment learning |
pat-benchmark-trust-crisis |
challenge | 18 / 2 | benchmarks decouple from real capability |
pat-agent-memory-layer |
dynamic | 15 / 6 | persistent memory becomes a first-class layer of the agent stack |
SPIKE nodes: Signal, Pattern, Insight, KnowHow, Element. Supporting nodes: Company, Expert, SourceEntity, InformationArtifact, Chunk.
The analytical loop is Signals forming or contradicting Patterns; everything else grounds, interprets, or attributes that loop.
| edge | route | meaning |
|---|---|---|
FormsPattern / ContradictsPattern |
Signal → Pattern | evidence for / against a thesis |
DrivesPattern / ReliesOnPattern / ContradictsToPattern |
Pattern → Pattern | causality and tension between theses |
OnElement |
Signal → Element | what the signal is about |
ExemplifiesPattern / EnablesPattern |
Element → Pattern | concrete examples or enablers of a thesis |
EnablesElement / UsesElement |
Element → Element | capability and dependency |
HighlightsPattern / ReliesOnElement |
Insight → Pattern / Element | what an insight illuminates and rests on |
ReferencesElement |
KnowHow → Element | practice grounded in a concrete thing |
SpottedInArtifact, IdentifiedInArtifact, SourcedFromArtifact |
Signal / Element / KnowHow → InformationArtifact | provenance: the talk it came from |
SourcedFromSource, PublishedBySource, ContributedByExpert |
→ SourceEntity / Expert | publisher and speaker attribution |
RelevantCompany, DevelopedByCompany, AffiliatedWithCompany |
→ Company | who it concerns, who built it, who employs whom |
PartOfArtifact |
Chunk → InformationArtifact | which talk a transcript chunk belongs to |
Design choices, all visible in schema.pg:
slugis the external identity everywhere. Prefixes:sig-,pat-,el-,ins-,how-,co-,exp-,ia-,source-; chunks are<talk-slug>#<index>.- Flat
kindenums, no subtypes:PatternKindchallenge | disruption | dynamic;ElementKindproduct | technology | framework | concept | ops. domainis an enum property on Signal and Element, not a node:training | inference | infra | harness | robotics | security | data-eng | context.- Edges are named
VerbTargetTypeso direction is unambiguous. - Embeddings live only on
Chunk.embedding(Vector(3072) @embed("text")). stagingTimestampon Signals, KnowHow and artifacts is the talk's publish date.
Prerequisites: Omnigraph 0.10.x (brew install omnigraph gives the CLI and
omnigraph-server; omnigraph version should report internal-schema 6), an
S3-compatible object store or a file-backed root, and a Gemini API key for
embeddings (chunk load and query-time nearest()).
cluster.yaml roots the cluster at s3://intel-graph/clusters/spike-intel.
A native RustFS works locally without Docker:
brew install rustfs/tap/rustfs
mkdir -p ~/.local/share/rustfs-intel-data
nohup rustfs server ~/.local/share/rustfs-intel-data --address 127.0.0.1:9100 \
--access-key "$AWS_ACCESS_KEY_ID" --secret-key "$AWS_SECRET_ACCESS_KEY" \
> ~/.local/share/rustfs-intel-data/rustfs.log 2>&1 & disown
aws --endpoint-url http://127.0.0.1:9100 s3 mb s3://intel-graph # once
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:9100/ # 403 means it is upFor a purely local sandbox, remove the storage: line from cluster.yaml;
Omnigraph then keeps the cluster under this directory (__cluster/,
graphs/ — both gitignored) and the graph URI below becomes graphs/spike.omni.
Two gitignored files hold every secret. Source both before any command:
set -a && source .env.omni && source .env.embedding && set +a.
# .env.omni
AWS_ACCESS_KEY_ID=…
AWS_SECRET_ACCESS_KEY=…
AWS_ENDPOINT_URL=http://127.0.0.1:9100
AWS_REGION=us-east-1
AWS_ALLOW_HTTP=true
OMNIGRAPH_SERVER_BEARER_TOKENS_JSON={"act-reader":"…","act-analyst":"…","act-admin":"…"}
TOKEN_ACT_READER=…
TOKEN_ACT_ANALYST=…
TOKEN_ACT_ADMIN=…
OMNIGRAPH_EMBED_PROVIDER=gemini
OMNIGRAPH_EMBED_MODEL=gemini-embedding-2-preview
# .env.embedding
GEMINI_API_KEY=…The three actors are the ones the policies know about (see Roles below).
omnigraph cluster validate --config . # an external_blobs WARN is expected
omnigraph cluster plan --config .
omnigraph cluster apply --config . --as act-admin # creates the graph, applies schema, publishes queriesG=s3://intel-graph/clusters/spike-intel/graphs/spike.omni
# entities first — chunk edges need the talks to exist
omnigraph load --data seed/entities.jsonl --mode overwrite --as act-analyst --yes "$G"
# chunks: embed with Gemini, then merge in parts (one load must stay under
# 32 MiB of parsed Chunk rows; 400 chunks per part is safe)
omnigraph embed --input seed/chunks.jsonl --output chunks-embedded.jsonl --spec seed/embed-spec.json
split -l 800 chunks-embedded.jsonl chunks-part- # lines alternate chunk / edge, so pairs stay together
for f in chunks-part-*; do
omnigraph load --data "$f" --mode merge --as act-analyst --yes "$G" || break
done
omnigraph commit list --branch main "$G" | head -1 # the head advances once per loadGemini rate-limits large embedding runs (HTTP 429, "Resource exhausted"). If
that happens, split seed/chunks.jsonl into smaller parts, embed each with
backoff, and concatenate before loading. Edge lines pass through embed untouched.
nohup omnigraph-server --cluster s3://intel-graph/clusters/spike-intel --bind 127.0.0.1:8081 \
> omnigraph-server.log 2>&1 & disown
curl -s http://127.0.0.1:8081/healthz # {"status":"ok","version":"0.10.0","internal_schema_version":6}The server needs the AWS_* variables, OMNIGRAPH_SERVER_BEARER_TOKENS_JSON
and GEMINI_API_KEY in its environment. Add --unauthenticated only for a
throwaway local sandbox.
Merge omnigraph-config.example.yaml into ~/.omnigraph/config.yaml, then
register the token once: omnigraph login intel-local (paste the analyst
token). Every stored query is then an alias:
omnigraph alias top-patterns
omnigraph alias pattern-signals pat-context-graphs
omnigraph alias pattern-counter pat-harness-over-model # counter-evidence
omnigraph alias company-footprint co-anthropic # company ← signals → patterns
omnigraph alias expert-patterns exp-clare-liguori # expert ← talks ← signals → patterns
omnigraph alias el-dependents el-mcp # everything built on MCP, ≤3 hops
omnigraph alias hybrid-search "give the agent a budget, not a token" # RRF of nearest() + bm25()
omnigraph alias talk-semantic ia-aie-krieger-anthropic-how-anthropic-builds "how do they decide what to unship"
omnigraph alias triage # signals not yet attached to a patternDirect stored-query and HTTP access work the same way:
omnigraph query top_patterns_by_signals --profile intel
curl -s -X POST http://127.0.0.1:8081/graphs/spike/queries/recent_signals \
-H "authorization: Bearer $TOKEN_ACT_READER" -H 'content-type: application/json' \
-d '{"params":{}}'Writes go through the 31 stored mutations (queries/mutations.gq: nine
add_* node inserts and 22 link_* edge inserts), which are not aliasable:
omnigraph mutate add_signal --server intel-local --graph spike \
--params '{"slug":"sig-…","name":"…","brief":"…","stagingTimestamp":"2026-09-01T00:00:00Z","createdAt":"2026-09-01T00:00:00Z","updatedAt":"2026-09-01T00:00:00Z"}'
omnigraph mutate link_signal_forms_pattern --server intel-local --graph spike \
--params '{"signal":"sig-…","pattern":"pat-verification-gap"}'policies/intel.policy.yaml (graph-bound) and policies/server.policy.yaml
(cluster-bound) define three actors; main is a protected branch.
| actor | can |
|---|---|
act-reader |
invoke stored read queries; read and export data on any branch |
act-analyst |
everything above plus change: stored mutations and direct data-plane loads |
act-admin |
list the deployment's graphs; the actor for cluster apply and maintenance commands |
Anonymous requests get 401; an actor outside a rule gets 403.
- Changing schema, queries or policies: edit the file, lint
(
omnigraph lint --schema schema.pg --query queries/<f>.gq), thencluster plan→cluster apply --as act-admin→ restart the server. Use@rename_from(...)on renames; adding a required key needs a graph rebuild. - Load semantics:
--mode overwritereplaces only the node and edge types present in the file (chunks survive an entity overwrite);--mode mergeupserts by@key. Edges have no key, so loading the same chunk file twice duplicates edges and trips@uniqueonPartOfArtifact— never re-load chunks that are already in the graph. - Verify every write by comparing
omnigraph commit list --branch mainheads before and after; the CLI exit code is not authoritative on remote stores. - Full-text indexes on 0.10: after bulk loads, rebuild them with the server
stopped so new rows are indexed rather than scanned:
omnigraph rebuild-full-text-indexes "$G" --branch main --as act-admin --json. - Binaries: keep
omnigraphandomnigraph-serveron the same minor and never point a 0.9 binary at a store touched by 0.10. Check/healthzafter every restart. - Refreshing the seed:
omnigraph export --server intel-local --graph spikestreams the whole graph as JSONL.seed/entities.jsonlis that export minusChunkrows andPartOfArtifactedges;seed/chunks.jsonlis the chunk rows withembeddingremoved andcreatedAtas ISO time, each followed by its edge. Regenerate rather than hand-edit.
- Every talk-derived Signal, Element and KnowHow links to its talk
(
ia-aie-*,artifactType: youtube,linkis the video URL), and every Signal also to the publisher (source-aie-yt, "AI Engineer"). Chunks carry the talk slug as a[talk-slug]prefix in their text. - Transcripts came from YouTube auto-captions. Quotes in briefs are paraphrases, and names and figures can be caption garbles; treat numbers as unverified unless a linked source confirms them.
- The 19
articleartifacts and the first five patterns are the original hand-authored seed (April 2026) the corpus was grown from. - The corpus pipeline that produced the seed — transcripts, per-talk extraction notes, deterministic conversion, validation, chunking — lives outside this repository; the graph is the deliverable.