Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion examples/agent-community/lobu.config.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import {
connectorFromFile,
defineAgent,
defineConfig,
defineEntityType,
Expand Down Expand Up @@ -146,7 +147,7 @@ const opportunityMatcher = defineWatcher({
notification: { priority: "normal" },
tags: ["community", "matching"],
minCooldownSeconds: 300,
reaction: "./models/reactions/opportunity-matcher.reaction.ts",
reaction: "./opportunity-matcher.reaction.ts",
prompt:
"Monitor connected profiles, newsletters, websites, and member updates for new launches, posts, hiring signals, funding news, and project changes. Identify which members are likely to care, explain why, and queue approved intro or outreach drafts.\n",
extractionSchema: {
Expand All @@ -172,6 +173,7 @@ const opportunityMatcher = defineWatcher({
});

export default defineConfig({
connectors: [connectorFromFile("./discourse-posts.connector.ts")],
org: "agent-community",
orgName: "Agent Community",
orgDescription:
Expand Down
5 changes: 2 additions & 3 deletions examples/agent-community/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@
"include": [
"lobu.config.ts",
"agents/**/*.ts",
"connectors/**/*.ts",
"reactions/**/*.ts",
"models/**/*.ts"
"**/*.connector.ts",
"**/*.reaction.ts"
]
}
2 changes: 1 addition & 1 deletion examples/atlas/lobu.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ const catalogStalenessChecker = defineWatcher({
notification: { priority: "low" },
tags: ["atlas", "reference", "weekly"],
minCooldownSeconds: 3600,
reaction: "./models/reactions/catalog-staleness-checker.reaction.ts",
reaction: "./catalog-staleness-checker.reaction.ts",
prompt:
'Sweep the atlas reference catalog for entries that haven\'t been\nupdated in 90+ days. List the stalest 10 across cities, countries,\nindustries, technologies, and universities. Suggest a re-verification\naction for each (e.g. "country/PL: confirm population from latest census").\n',
extractionSchema: {
Expand Down
5 changes: 2 additions & 3 deletions examples/atlas/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@
"include": [
"lobu.config.ts",
"agents/**/*.ts",
"connectors/**/*.ts",
"reactions/**/*.ts",
"models/**/*.ts"
"**/*.connector.ts",
"**/*.reaction.ts"
]
}
2 changes: 2 additions & 0 deletions examples/delivery/lobu.config.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import {
connectorFromFile,
defineAgent,
defineConfig,
defineEntityType,
Expand Down Expand Up @@ -175,6 +176,7 @@ const phoenixRolloutTracker = defineWatcher({
});

export default defineConfig({
connectors: [connectorFromFile("./shopify-orders.connector.ts")],
org: "delivery",
orgName: "Delivery",
orgDescription:
Expand Down
5 changes: 2 additions & 3 deletions examples/delivery/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@
"include": [
"lobu.config.ts",
"agents/**/*.ts",
"connectors/**/*.ts",
"reactions/**/*.ts",
"models/**/*.ts"
"**/*.connector.ts",
"**/*.reaction.ts"
]
}
2 changes: 2 additions & 0 deletions examples/ecommerce/lobu.config.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import {
connectorFromFile,
defineAgent,
defineConfig,
defineEntityType,
Expand Down Expand Up @@ -186,6 +187,7 @@ const customerActivityTracker = defineWatcher({
});

export default defineConfig({
connectors: [connectorFromFile("./stripe-charges.connector.ts")],
org: "ecommerce",
orgName: "Ecommerce",
orgDescription:
Expand Down
5 changes: 2 additions & 3 deletions examples/ecommerce/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@
"include": [
"lobu.config.ts",
"agents/**/*.ts",
"connectors/**/*.ts",
"reactions/**/*.ts",
"models/**/*.ts"
"**/*.connector.ts",
"**/*.reaction.ts"
]
}
4 changes: 3 additions & 1 deletion examples/finance/lobu.config.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import {
connectorFromFile,
defineAgent,
defineConfig,
defineEntityType,
Expand Down Expand Up @@ -171,7 +172,7 @@ const reconciliationMonitor = defineWatcher({
notification: { priority: "high", channel: "both" },
tags: ["finance", "reconciliation", "daily"],
minCooldownSeconds: 3600,
reaction: "./models/reactions/reconciliation-monitor.reaction.ts",
reaction: "./reconciliation-monitor.reaction.ts",
prompt:
"Check accounts for unreconciled transactions, new variances, and approaching reporting deadlines. Lead with exceptions that need review.\n",
extractionSchema: {
Expand All @@ -187,6 +188,7 @@ const reconciliationMonitor = defineWatcher({
});

export default defineConfig({
connectors: [connectorFromFile("./quickbooks-transactions.connector.ts")],
org: "finance",
orgName: "Finance",
orgDescription:
Expand Down
5 changes: 2 additions & 3 deletions examples/finance/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@
"include": [
"lobu.config.ts",
"agents/**/*.ts",
"connectors/**/*.ts",
"reactions/**/*.ts",
"models/**/*.ts"
"**/*.connector.ts",
"**/*.reaction.ts"
]
}
2 changes: 2 additions & 0 deletions examples/leadership/lobu.config.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import {
connectorFromFile,
defineAgent,
defineConfig,
defineEntityType,
Expand Down Expand Up @@ -205,6 +206,7 @@ const boardActionTracker = defineWatcher({
});

export default defineConfig({
connectors: [connectorFromFile("./linear-cycles.connector.ts")],
org: "leadership",
orgName: "Leadership",
orgDescription:
Expand Down
5 changes: 2 additions & 3 deletions examples/leadership/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@
"include": [
"lobu.config.ts",
"agents/**/*.ts",
"connectors/**/*.ts",
"reactions/**/*.ts",
"models/**/*.ts"
"**/*.connector.ts",
"**/*.reaction.ts"
]
}
2 changes: 2 additions & 0 deletions examples/legal/lobu.config.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import {
connectorFromFile,
defineAgent,
defineConfig,
defineEntityType,
Expand Down Expand Up @@ -196,6 +197,7 @@ const contractReviewTracker = defineWatcher({
});

export default defineConfig({
connectors: [connectorFromFile("./docusign-envelopes.connector.ts")],
org: "legal-review",
orgName: "Legal",
orgDescription:
Expand Down
5 changes: 2 additions & 3 deletions examples/legal/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@
"include": [
"lobu.config.ts",
"agents/**/*.ts",
"connectors/**/*.ts",
"reactions/**/*.ts",
"models/**/*.ts"
"**/*.connector.ts",
"**/*.reaction.ts"
]
}
15 changes: 6 additions & 9 deletions examples/lobu-crm/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,14 @@ Use this as a starting point for new projects. It shows every Lobu concept in on
```
lobu-crm/
├── lobu.config.ts # Agent, entities, relationships, watchers, connections, auth profiles
├── connectors/
│ └── funnel-form.connector.ts # Custom connector implementation
├── models/
│ └── reactions/
│ ├── inbound-triage.reaction.ts # Runs after watcher extraction
│ └── funnel-digest.reaction.ts # Runs after watcher extraction
├── funnel-form.connector.ts # Custom connector (connectorFromFile)
├── inbound-triage.reaction.ts # Runs after watcher extraction
├── funnel-digest.reaction.ts # Runs after watcher extraction
└── agents/crm/
├── SOUL.md # Agent personality
├── IDENTITY.md # Agent identity
├── USER.md # User context
└── skills/crm-ops/SKILL.md # Agent skill
└── skills/crm-ops/SKILL.md # Agent skill (skillFromFile)
```

The built-in GitHub, X, Hacker News, and website connections are declared inline in
Expand All @@ -29,5 +26,5 @@ The built-in GitHub, X, Hacker News, and website connections are declared inline
| File | What it shows |
|------|--------------|
| `lobu.config.ts` | Agent config, providers, network allowlist, entity + relationship + watcher definitions, connections, auth profiles |
| `connectors/funnel-form.connector.ts` | Custom connector with typed checkpoint + config |
| `models/reactions/inbound-triage.reaction.ts` | Reaction script with typed `ReactionClient` |
| `funnel-form.connector.ts` | Custom connector with typed checkpoint + config (listed via `connectorFromFile`) |
| `inbound-triage.reaction.ts` | Reaction script with typed `ReactionClient` |
6 changes: 4 additions & 2 deletions examples/lobu-crm/lobu.config.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import {
connectorFromFile,
defineAgent,
defineAuthProfile,
defineConfig,
Expand Down Expand Up @@ -154,7 +155,7 @@ const funnel_digestWatcher = defineWatcher({
notification: { channel: "both", priority: "high" },
minCooldownSeconds: 3600,
tags: ["crm", "weekly"],
reaction: "./models/reactions/funnel-digest.reaction.ts",
reaction: "./funnel-digest.reaction.ts",
prompt:
'Produce the weekly funnel digest and post it to Slack. Keep it short.\n\n1. The single recommended action for the week, on the first line. Pick the\n move that does the most to get pilot #1 closer (almost always: follow up\n with the warmest lead in "conversation", or progress whichever pilot\n conversation is furthest along).\n2. Funnel snapshot: count of `lead` entities per stage; what moved since the\n last digest (new leads, stage changes, new/updated `pilot` entities).\n3. Top-of-funnel since last digest: new GitHub stars, X mentions/replies,\n HN/PH activity.\n4. Stale: any lead in `conversation` with no `lead:interaction` in 7+ days —\n list them for follow-up.\n5. One gap callout if there is one (e.g. "18 new stars, 0 became leads —\n is inbound-triage catching the right signal?").\n\nTone: a checklist a busy founder reads in 30 seconds. End on the next action,\nnot the status. Remember: the metric that matters is customer conversations\nthis week — if that number is below 3, say so plainly.\n',
extractionSchema: {
Expand Down Expand Up @@ -200,7 +201,7 @@ const inbound_triageWatcher = defineWatcher({
notification: { priority: "normal" },
minCooldownSeconds: 300,
tags: ["crm", "triage"],
reaction: "./models/reactions/inbound-triage.reaction.ts",
reaction: "./inbound-triage.reaction.ts",
prompt:
'Look for new top-of-funnel signals since the last run, across the connectors\nin this org:\n - GitHub: new stargazers on lobu-ai/lobu; new issues / issue comments /\n PR comments — especially anything with deployment, self-host, multi-tenant,\n "how do I", or evaluation language.\n - X: new @-mentions of Lobu, replies to Burak\'s Lobu threads, quote-tweets.\n - Hacker News / Product Hunt: new comments or posts mentioning Lobu or OpenClaw.\n\nFor each signal that looks like a real person (not a bot, not a casual star):\n 1. search_memory for an existing `lead` (match github handle / x handle / email).\n 2. If none, create a `lead` entity at the lowest stage the evidence supports\n (a bare star → "signal"; a deployment-flavored issue comment or a\n "how do I deploy this for my team" mention → "trial" or "conversation"),\n with source set to where it came from, and entity_ids linking to the\n source event. Then save a `lead:created` event.\n 3. If a lead exists, enrich it (add the handle, bump the stage if the new\n signal warrants it, update last_touch) and save a `lead:interaction` or\n `lead:stage_changed` event as appropriate.\n\nThen post to Slack: the new/updated leads, ranked by closeness-to-a-paying-pilot,\neach with a one-line recommended next action (e.g. "reply on the issue and offer\na 20-min call"). If nothing notable, post nothing — don\'t manufacture noise.\n',
extractionSchema: {
Expand Down Expand Up @@ -378,6 +379,7 @@ const x_mentionsConn = defineConnection({
});

export default defineConfig({
connectors: [connectorFromFile("./funnel-form.connector.ts")],
org: "lobu-crm",
orgName: "Lobu CRM",
orgDescription:
Expand Down
5 changes: 2 additions & 3 deletions examples/lobu-crm/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@
"include": [
"lobu.config.ts",
"agents/**/*.ts",
"connectors/**/*.ts",
"reactions/**/*.ts",
"models/**/*.ts"
"**/*.connector.ts",
"**/*.reaction.ts"
]
}
4 changes: 3 additions & 1 deletion examples/market/lobu.config.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import {
connectorFromFile,
defineAgent,
defineConfig,
defineEntityType,
Expand Down Expand Up @@ -456,7 +457,7 @@ const founderActivityTracker = defineWatcher({
notification: { priority: "normal" },
tags: ["vc", "founders", "daily"],
minCooldownSeconds: 600,
reaction: "./models/reactions/founder-activity-tracker.reaction.ts",
reaction: "./founder-activity-tracker.reaction.ts",
prompt:
"You are a venture capital analyst tracking the public activity of startup founders in your portfolio.\n\n## Founders\n{{#each entities}}\n- {{name}} ({{entity_type}}, ID: {{id}})\n{{/each}}\n\n## Recent Founder Activity\n{{#if sources.founder_posts}}\n{{sources.founder_posts}}\n{{/if}}\n\n---\n\nProduce a structured founder activity report:\n1. **Executive Summary**: 2-3 sentence overview of founder activity and signals.\n2. **Per-Founder Analysis**: For each active founder, summarize their messaging themes, engagement level, and signals about company direction.\n3. **Cross-Portfolio Patterns**: Themes multiple founders discuss.\n4. **Notable Signals**: Flag potential announcements, strategic shifts, or concerns.\n\nBe specific and cite actual tweets/posts as evidence.\n",
sources: {
Expand Down Expand Up @@ -582,6 +583,7 @@ const opportunityMatcher = defineWatcher({
});

export default defineConfig({
connectors: [connectorFromFile("./exa-news-feed.connector.ts")],
org: "market",
orgName: "Market",
orgDescription:
Expand Down
5 changes: 2 additions & 3 deletions examples/market/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@
"include": [
"lobu.config.ts",
"agents/**/*.ts",
"connectors/**/*.ts",
"reactions/**/*.ts",
"models/**/*.ts"
"**/*.connector.ts",
"**/*.reaction.ts"
]
}
5 changes: 2 additions & 3 deletions examples/office-bot/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@
"include": [
"lobu.config.ts",
"agents/**/*.ts",
"connectors/**/*.ts",
"reactions/**/*.ts",
"models/**/*.ts"
"**/*.connector.ts",
"**/*.reaction.ts"
]
}
5 changes: 2 additions & 3 deletions examples/personal-finance/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@
"include": [
"lobu.config.ts",
"agents/**/*.ts",
"connectors/**/*.ts",
"reactions/**/*.ts",
"models/**/*.ts"
"**/*.connector.ts",
"**/*.reaction.ts"
]
}
4 changes: 3 additions & 1 deletion examples/sales/lobu.config.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import {
connectorFromFile,
defineAgent,
defineConfig,
defineEntityType,
Expand Down Expand Up @@ -183,7 +184,7 @@ const accountHealthMonitor = defineWatcher({
notification: { priority: "high", channel: "both" },
tags: ["sales", "health", "renewals"],
minCooldownSeconds: 1800,
reaction: "./models/reactions/account-health-monitor.reaction.ts",
reaction: "./account-health-monitor.reaction.ts",
prompt:
"Poll CRM data for tracked accounts. Track expansion progress, risk level changes, and renewal timeline.\n",
extractionSchema: {
Expand All @@ -204,6 +205,7 @@ const accountHealthMonitor = defineWatcher({
});

export default defineConfig({
connectors: [connectorFromFile("./salesforce-pipeline.connector.ts")],
org: "sales",
orgName: "Sales",
orgDescription:
Expand Down
5 changes: 2 additions & 3 deletions examples/sales/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@
"include": [
"lobu.config.ts",
"agents/**/*.ts",
"connectors/**/*.ts",
"reactions/**/*.ts",
"models/**/*.ts"
"**/*.connector.ts",
"**/*.reaction.ts"
]
}
Loading
Loading