LinkedIn connects/DMs are now throttled per connected account against
conservative daily/weekly caps (rolling windows, randomized jitter) enforced
by a new background scheduler so delivery keeps progressing without a
browser tab open. Email sending gets per-campaign timezone/business-hours/
interval controls set during campaign setup. Content generation can now be
stopped mid-run and resumed later without restarting.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Chat Agent: proactive website CTAs and per-conversation token usage tracking
Seth+1: Claude Sonnet 5
9889053
- Strengthen the Website Link Promotion skill section (and the code-level
CITATIONS instructions that produce the actual link) so the agent actively
surfaces a relevant indexed page as a call-to-action whenever one exists,
instead of only citing it as a passive afterthought.
- Track total LLM tokens spent on each reply (summed across every round of
the agentic tool-calling loop, or from Gemini's usage metadata on that
provider) and surface it in the admin Conversations tab: per message, per
conversation, and as an overall total across every chat for the tenant.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Chat Agent: render markdown tables properly, show web-search usage to admins, fix pricing leak
Seth+1: Claude Sonnet 5
f6dedbf
- Render GFM pipe tables as real <table> markup (with horizontal scroll) in the
Test Chat panel, Conversations transcript, and the embeddable widget, instead
of dumping raw "| a | b |" text into a narrow chat bubble.
- Track whether a reply actually used the search_the_web tool and surface a
"Used live web search" badge to admins (Test Chat + Conversations), so a
live-web-sourced answer is never mistaken for a knowledge-base answer.
- Fix a real pricing leak: a visitor comparison question ("are you cheaper than
X") caused the agent to recite actual EZOFIS pricing pulled from the tenant's
own indexed content, because the comparison-table instruction pushed the
model to fill every cell from retrieval, overriding the separate "never
disclose pricing" rule. Added a hard, code-level backstop that strips
dollar-amount/discount patterns out of retrieved chunk text before it ever
reaches a prompt, plus reinforced the comparison-table instruction itself.
- Make the Gemini fa…
Chat Agent: opt-in live web search (Gemini) with skill-editable guardrails + AI disclaimer
Seth+1: Claude Sonnet 5
9d44313
Generalizes the agent's web-lookup tool from competitor-only research into a
general search_the_web tool the agentic loop can reach for whenever the
knowledge base isn't enough, gated behind enable_web_search + a configured
Gemini key. Hard safety boundaries (never our own pricing/confidential info,
always framed as unverified) stay in code; "when it's worth searching"
guidance is now editable via the default skill's instructions. Also adds a
persistent "AI can make mistakes" disclaimer to both the embeddable widget
and the admin Test Chat panel.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Chat Agent: comprehensive EZOFIS default skill, ZIP export, Gemini fast indexing
Seth+1: Claude Sonnet 5
b5da702
- Replace the 3 small guardrail skills with one comprehensive default skill
authored from EZOFIS's real website-agent governance document: condensed
non-negotiable rules always injected via instructions, 10 topic references
searched on demand (keeps every live turn fast), 6 canned-response
templates, a real runnable compliance-checker script, and 8 eval cases
lifted from the document's own test scenarios. A migration auto-
consolidates any tenant whose skills are exactly the old 3 unmodified
defaults; tenants with custom skills are left untouched.
- Fix a real bug found while stress-testing the larger content: the eval
parser's regex was missing re.MULTILINE, so only the first eval of any
multi-eval skill ever parsed back on import.
- Elaborate each Skills section (References/Assets/Templates/Scripts/Evals)
in the Cards UI with its purpose and a worked example.
- Add a ZIP export (GET /api/chat-agent/skills/export-zip + Download ZIP
button) producing the exact ski…
Four upgrades to the Skills anatomy, aimed at making this a faithful demo of
Anthropic's Agent Skills format:
- Real YAML frontmatter (pyyaml) instead of a hand-rolled regex parser, which
broke on descriptions containing a colon/quote/comma — now round-trips
correctly via safe_dump/safe_load.
- New templates/ folder, a full sibling to assets/ throughout: schema,
migration, SKILL.md compile/parse, knowledge-base indexing/search, CRUD
routes, and a frontend section.
- A virtual file-browser view (Cards / File browser toggle in the Skills tab)
that renders the DB-backed skill anatomy as a real-looking
skills/<name>/{SKILL.md,references/,assets/,templates/,scripts/,evals/}
tree with a live preview pane, since there's no actual filesystem to browse
on this hosting.
- Admin-only sandboxed script execution: a real "Run" button that executes
Python in an isolated subprocess (secrets stripped from its environment,
timeout-bound, output capped). This is never reachable from …
Chat Agent: full Agent Skills library (SKILL.md anatomy)
Seth+1: Claude Sonnet 5
0bbe01f
Rebuilds the flat guardrail-string Skills feature into Anthropic's real
Agent Skills format: name + description + instructions (always injected
into the prompt), plus references/assets (indexed into the same
knowledge base the agentic search tool already searches), scripts
(stored/exported for documentation only — never executed, see
SKILLS-SECURITY.md), and evals (test cases graded by substring match or
an LLM judge). Skills export/import as real, portable SKILL.md files.
Also fixes a resilience gap found while testing live in the browser: an
indexing failure (e.g. the embeddings API being down) was crashing the
whole skill save with a 500 and losing the admin's text edits. The
skill's own fields now commit first, indexing runs in its own
try/except, and a failed index attempt rolls back cleanly so the next
save retries instead of getting stuck thinking it's already indexed.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Three concrete bugs found from a real transcript ("DMS vs Laserfiche"
question):
1. Hallucination: the model said "I couldn't find that in the knowledge
base, however based on general knowledge..." and then invented specific
competitor pricing. Closed the loophole explicitly in both the agentic
(OpenAI) and classic (Gemini) system prompts: an "I don't know" answer
must be the model's entire response, with no fabricated continuation --
it has no reliable general knowledge about this company's pricing,
specs, or competitors. Also nudged it to try more than one search angle
(own product + competitor name) before giving up on a comparison
question, rather than quitting after one narrow miss.
2. Repetition: the lead-capture "ask once, early" instruction relied on the
model remembering not to repeat itself, and it didn't. Now enforced in
code via already_asked_for_contact -- once any prior assistant turn
exists in history, the instruction is dropped from th…
Add in-panel Test Chat tab for the Chat Agent
Seth+1: Claude Sonnet 5
63e197a
Adds a "Test Chat" tab to Settings -> Chat Agent so the admin can try the
chat experience without embedding the widget anywhere first. It talks to
the exact same public session/message endpoints the embedded widget uses
(not a separate/authenticated test path), so knowledge base retrieval,
skills, streaming, citation links, and soft lead capture all behave exactly
as they would for a real visitor -- including creating a real CRM lead if a
name/email is shared during the test.
Verified end-to-end in-browser with a real seeded session: tab renders,
message send/receive round-trips through the streaming endpoint, citation
links render safely, and the resulting session/lead show up correctly in
the Conversations tab.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Add Chat Agent module: RAG website widget with Drive/site knowledge base and CRM lead capture
Seth+1: Claude Sonnet 5
991c079
Adds an embeddable WordPress chat widget backed by a Google Drive folder and a
site crawl, with admin-editable skills/guardrails, streaming replies, and
automatic CrmLead creation (with live transcript) for every chat that shares
a name/email.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>