Transcript
00:00:00Hello, everyone.
00:00:19Welcome to another Vercel community session.
00:00:22This week I am joined by Malta and Matt, and I just want to remind everyone, if you are
00:00:27participating in the chat, please follow the code of conduct, but we are welcoming any and
00:00:31all questions about Chat SDK.
00:00:34Welcome guys.
00:00:35Awesome.
00:00:36Thank you for having us.
00:00:37Hi, everybody.
00:00:38I'm Matt.
00:00:39I'm joined today by Malta, and we are going to talk all things Chat SDK.
00:00:45If you're not familiar with it, it is an open TypeScript library we've built so that you
00:00:50can bring your agent to your users no matter what platform they are on.
00:00:55And to get started, I want to hear the origin story.
00:00:58So where did this all come from?
00:01:00Yeah.
00:01:01So, hey again, my name is Malta.
00:01:03I'm both the CTO for Sel, but also the author of Chat SDK.
00:01:07So I'm in that role here today.
00:01:11Don't ask any strategy questions.
00:01:14The origin story of Chat SDK came together over essentially all of 2025.
00:01:23We were investing more and more into, especially Slack bots.
00:01:26And there was always this question, can we ship this to other platforms besides Slack?
00:01:32And the ultimate answer was always no, because it would be quite a bit of work and only some
00:01:39incremental value.
00:01:40And then we wouldn't dock for it ourselves, which would be so much more difficult.
00:01:44And so we never really did it.
00:01:46And as I was looking at these apps, I was always thinking, can we make a nice way of
00:01:53building this in one shot?
00:01:57But then I looked at all these APIs and was very, very afraid, really, of building on top
00:02:04of them because they seem so daunting and multifaceted.
00:02:10Now fast forward to the very, very end of last year, Opus 4.5 came out and I was like, this
00:02:16is my time.
00:02:17And it was the holidays.
00:02:18It was the holidays.
00:02:19Yeah.
00:02:20And I'm saying, hey, Malte, what does this look like?
00:02:23How are we going to do this?
00:02:25And you came back with not an answer, but an actual library to answer my question.
00:02:31Yeah.
00:02:32Yeah.
00:02:33So I was hacking around.
00:02:37And the thing is about this type of thing is that it actually is still very painful to build
00:02:43because there's real APIs and they're not really in the training data.
00:02:46And so you still have to do a lot of figuring things out.
00:02:50At least some of the majority of the work was taken over.
00:02:55And so, yeah, I still decided to give it a go and over the holidays build the initial
00:03:01version of Chat SDK.
00:03:02It took us another month or so to get it ready for shipping.
00:03:07But that's the origin story.
00:03:08So I think it was obvious that this was needed, but it was also too daunting to build.
00:03:12And then AI helped us push it over the edge.
00:03:15Yes.
00:03:16Everyone at Vercel is a builder.
00:03:17So Amy, do you want to kick us off with our first question?
00:03:20Yeah.
00:03:21You know, anytime we have a new open source project, I think one of the most common questions
00:03:26that I see is how open is it?
00:03:29Like is this locked down to just Vercel?
00:03:32Do we need to use Vercel's AI infrastructure or can I use this anywhere?
00:03:37Definitely.
00:03:38I think especially with the Chat SDK, it is just a TypeScript library and it's not even
00:03:44tied to a front end or back end framework.
00:03:48You can use this in any JavaScript application.
00:03:53You can host anywhere that you can host JavaScript.
00:03:55You can use the Chat SDK and it's not tied to any other primitives of the cloud other
00:04:03than just a serverless function to handle a webhook event.
00:04:07What do you think, Malta?
00:04:08Yeah, exactly.
00:04:09We're not even the service function, right?
00:04:10Like it's literally like it's really just a library.
00:04:13It's like React, like, you know, where you can just, you know, you can use it wherever
00:04:19it's not tied in any way whatsoever to the structure.
00:04:23You can think of it as just it's not Chat SDK is not the agent.
00:04:27It's just the layer to take a webhook event and give the context to an agent that you've
00:04:33built with any framework that you've chosen.
00:04:38And then I think a really great example of this is recently, you know, we built the first
00:04:42version of the Teams adapter and now Microsoft Teams team has taken ownership of that as well.
00:04:52Yeah, that's right.
00:04:53I was actually super, super blessed by this because it's, I mean, yeah, I was fighting
00:05:00getting teams to work and they not only did they take over maintenance, they rewrote the
00:05:05adapter because they currently shipped a new API and they essentially just ported the existing
00:05:13implementation to the new API, which I think is a win for them.
00:05:15So they get distribution on the new API, hopefully fewer users than the old stuff.
00:05:20And I mean, we very much appreciate it because there is quite a bit of effort getting this
00:05:25to be great on every platform that we support.
00:05:27And a huge win for developers because they didn't have to go learn the new Microsoft Teams
00:05:32API, but their application or agent now benefits from the new adapter.
00:05:37No code changes needed on there.
00:05:38Yeah.
00:05:39And this is actually completely back for compatible things.
00:05:41So like you have to do nothing at all except upgrade Chat SDK and you get to take advantage
00:05:47of the new API.
00:05:48And, you know, I mean, they might have had a few edge cases or whatever, like, you know,
00:05:51since they're the actual Teams team there, they know best how to use their API.
00:05:56But as the user of Chat SDK, you don't necessarily need to know this.
00:06:00By the way, it's actually something I think one of the value of Chat SDK is obviously it's
00:06:05meant to be used in this like multi-platform fashion.
00:06:08But I would actually not be surprised if most users actually don't use it that way.
00:06:11Just use it for one platform at the same time.
00:06:16But, you know, all these APIs are so like they're often they're kind of they're either badly
00:06:23documented or they were not designed to be used in an idiomatic fashion and like a TypeScript
00:06:28ecosystem.
00:06:29So people are just like having an easier time using Chat SDK, even if it's only for one of
00:06:35the adapters.
00:06:36Yeah.
00:06:37And that's what we did with v0.
00:06:38We built v0 for Slack with the Chat SDK.
00:06:41And I think the best part is if we choose to go to another platform, it's a very easy engineering
00:06:47effort to go to that new platform.
00:06:51The next question I hear a lot about, and then we'll go to the live chat, JSX.
00:06:56So I built a lot of Slack agents prior to Chat SDK and I had to use BlockKit and I was used
00:07:04to React and I love JSX.
00:07:06And that was probably one of the biggest benefits and something I was so excited about with Chat
00:07:11SDK was bringing JSX.
00:07:13So what was that like?
00:07:15Yeah, I think the evolution of Chat SDK was that.
00:07:22I obviously wanted to have support for interactive elements, and so I was first thinking about
00:07:28how to properly abstract this inside of the Chat SDK.
00:07:36And the two things that were kind of going on in my mind was that, first of all, there
00:07:42should be great markdown support because obviously Chat SDK can be used for non-AI applications,
00:07:48but it's really meant to be used in this fashion where you hook it to an agent.
00:07:53So for that, markdown was really important.
00:07:55And the other thing was that I wanted a regular TypeScript job was to have a really good time.
00:08:01And so the idea was essentially to say, okay, we do have this internal representation of
00:08:08the UI that can be rendered to the different chatbots.
00:08:16And then map that intermediate representation to underlying APIs, like BlockIt.
00:08:22And then have, on the other hand, essentially quote unquote front ends, which are the representation
00:08:30that you as an engineer use.
00:08:32And reusable.
00:08:33That could be markdown, for example.
00:08:35You parse the markdown to an AST, then you render it to BlockIt, or you have the JSX,
00:08:42which is more or less directly mapped to the intermediate representation.
00:08:47And maybe for folks who don't know as well how JSX works, so JSX is essentially syntactic
00:08:55sugar for a function call.
00:08:58And this function call is a function call create element, which takes as the first argument
00:09:03the name of the element and then the props back.
00:09:07And this is a H1, H2 paragraph.
00:09:10Exactly.
00:09:11This is H4, right?
00:09:12But in reality, you can do anything you want, right?
00:09:17Because it's just a function call.
00:09:18And so you can overwrite that create element function to be whatever you like, including
00:09:28creating the elements from the intermediate representation of chat SDK.
00:09:33The only thing that actually makes this somewhat complicated to build is that this is supposed
00:09:37to work inside of existing React applications.
00:09:41And because JSX is not a namespace thing, you don't import it in any way, right?
00:09:47You have to make sure that you don't break, like say Next.js or Remix, right?
00:09:55But then also it's supposed to be used in applications that might have no idea what React is and what
00:09:59JSX is.
00:10:00And so it supports both these cases.
00:10:02It both plays well with existing JSX applications and it introduces JSX as syntax where that's
00:10:08not so far supported.
00:10:11If I could challenge the community, I would love to see Shad CN for chat platforms with
00:10:18JSX.
00:10:20That is something I know someone out there is probably already building and I can't wait
00:10:24to see that.
00:10:27And first community question, which platform specific edge cases do we as developers need
00:10:34to be aware of when implementing the SDK?
00:10:37And I think this is a great question with JSX as well is because Slack block kit has a lot
00:10:44of rich interactive UI and other platforms don't have the exact same native rendering.
00:10:52And I know that when we built this, we supported really good fallbacks.
00:10:57So if you use the chat SDK in a way that another platform may not support this, we have created
00:11:04awesome defaults and fallbacks for you as a developer.
00:11:08Yeah, exactly.
00:11:10So I think there's multiple elements, right?
00:11:13One of them is the rendering layer.
00:11:16I think actually the starkest difference though is that originally chat SDK was very much designed
00:11:23for platforms that have threats.
00:11:28Now obviously even within them, not everyone actually uses those threats, right?
00:11:33And so you do have to kind of consider that a little bit, but it was very much designed
00:11:37to be used in that fashion.
00:11:39But then people really wanted WhatsApp and Telegram and will add probably iMessage and
00:11:43everything else in the future.
00:11:46And so for that world, you have to understand that there are different paradigms of using
00:11:55a chat app and this cannot be properly abstracted at the chat SDK layer because again, you have
00:12:01to support both, right?
00:12:05So if you work on WhatsApp, you have to understand that these kind of messages are more or less
00:12:11context free.
00:12:14That is one thing.
00:12:15And so a chat SDK overall isn't meant to be like completely favoring overall differences.
00:12:21And then on the UI, it's definitely the case where I was trying to have a feedback so that
00:12:26you can write the same code and that kind of does make sense everywhere.
00:12:31And I think in practice, it works really well, right?
00:12:37Like in practice, the things you actually want to have supported is supported really well
00:12:43and so I think to some degree, you will have to do manual testing and see if everything
00:12:50kind of works out the way you want to, but we haven't really seen a case where people
00:12:57are really struggling with the cross platform site.
00:12:59And also a great case for open source because the community is going to help us show what
00:13:04in practice really means.
00:13:06Exactly.
00:13:07So I think you will find issues here and there, please report them and we'll fix them.
00:13:15Yes.
00:13:16Our next question.
00:13:18It seems that chat SDK by being lightweight and stack agnostic in its paradigms is separating
00:13:24the chat from the rest of the agent's harness.
00:13:28Do you see a future where with advances in other modalities, something like video chat
00:13:34SDK will be possible?
00:13:36Pretty interesting question.
00:13:38I'll start by saying you're correct and this is something that I've had to repeat a couple
00:13:45of times is chat SDK is not AI SDK and AI SDK is not chat SDK.
00:13:51They are AI SDK helps you build agents.
00:13:55Chat SDK helps you bring that agent to multiple platforms.
00:13:59So it is a lightweight and stack agnostic type of paradigm.
00:14:05What do you think of video chat SDK?
00:14:09I think it's really interesting.
00:14:13I think before we get video chat SDK, we'll get audio chat SDK.
00:14:19And usually my take is that you only add abstractions like chat SDK that make building a classification
00:14:31that's really nice after you've done it a few times.
00:14:36We've never built a video chat.
00:14:38Actually, I need to think back.
00:14:44It's not time yet.
00:14:45And especially as you have to be very close to the metal.
00:14:50I actually see most of the challenges for something like this on the communication with the AI
00:14:55models and not so much the communication to the front end, the user who's communicating
00:15:02in real time.
00:15:03Awesome.
00:15:04Okay.
00:15:05Our next question, can I train it with Opus 4.6 with stock answers and then have it produce
00:15:11answers for free with no cost?
00:15:13So I think this question highlights, you know, what is chat SDK and what it's not.
00:15:20And you would never train chat SDK.
00:15:24You're not having to write prompts for the chat SDK to create its responses from.
00:15:30That is what AI SDK or other agent frameworks are for.
00:15:36And so the agent framework is where you write tools, you write prompts, you create workflows
00:15:44and chat SDK is only the layer between the platform and your agent.
00:15:51So hopefully that helps answer that.
00:15:54Our next one from YouTube, can chat SDK be used to track and manage functionalities between
00:16:00Slack and JIRA?
00:16:02Yeah, this is a really good question.
00:16:04We do like since JIRA is in here, we do have a linear adapter.
00:16:09We don't have a JIRA adapter right now.
00:16:11Wouldn't be opposed to adding it.
00:16:13High community.
00:16:14But what I do want to add is because there were some questions around linear as well and
00:16:20GitHub for that matter, which is kind of in a similar vein, the chat SDK is for chatting.
00:16:28And so linear and JIRA are, if you really think about it, kind of chat applications that render
00:16:33them in a different format.
00:16:37And so that's what this is for.
00:16:40What you absolutely can do is you can use chat SDK to listen to people talking on Slack and
00:16:49then map that into JIRA API calls to do whatever you want on JIRA.
00:16:58But chat SDK does not care about you doing things on JIRA, right?
00:17:04Because those are, I mean, obviously sometimes you would post a message, but you might also
00:17:07like, I don't know, add a label or change the status of a tab.
00:17:11Assign it to the right person.
00:17:12Right.
00:17:13And so all of these things are not a thing you can do in chat SDK because it's really
00:17:16just for the communication, you just use the native API of the platform if you want to make
00:17:20like complicated things on it.
00:17:23Yes.
00:17:24Awesome.
00:17:25Okay.
00:17:26So does it, our next question is, does it support Facebook messenger?
00:17:32What's this?
00:17:33I think there's a PR maybe, or since we've, since we've launched, we've had a lot of interest,
00:17:39a lot of amazing pull requests, and maybe this is a good time to talk about what is the difference
00:17:46between a community adapter and the adapters that we've chosen to build and support.
00:17:53Yeah.
00:17:54That's a good question.
00:17:56And we have a third category, which is a vendor official.
00:17:59Yes.
00:18:00So the, in general, the way we think about the things that kind of ship with chat SDK,
00:18:07it should be kind of the billion user products, like Slack, Discord, what's that?
00:18:15Maybe we'll put it at a hundred million users, but like, you know, like very large, like broadly
00:18:20applicable type of, type of platforms.
00:18:23And so Facebook messenger would fully fall into that.
00:18:26I also don't really expect them to give us a vendor official, you know, but if Facebook
00:18:31would like to do this, it'd be nice, right?
00:18:32Like we would welcome it.
00:18:36So Facebook will fall into this.
00:18:39Then what we also, what we see a lot are, for example, are companies that do some kind
00:18:45of messaging service or like context management.
00:18:49I've seen a couple.
00:18:50That would be another one.
00:18:51Yeah.
00:18:52We can talk about that separately, but like let's say you, you have your own iMessage service.
00:18:56Right.
00:18:57Sendblue.
00:18:58Sendblue.
00:18:59They would make a vendor official one, right?
00:19:01Where we kind of say, okay, this actually is by Sendblue for Sendblue, which is, comes
00:19:07with a bit of a commitment to actually maintain this over time.
00:19:10Right.
00:19:11And then the third category is everyone here can just make an adapter.
00:19:15You know, spend a couple bucks on whatever, right?
00:19:19Like it's absolutely difficult and you can connect to whatever you want, right?
00:19:23And maybe that will be some like random small applications that, you know, wouldn't make
00:19:29the a hundred million user cutoff for the main, for the main chat escape.
00:19:35Or maybe also like maybe there's a feature that for some reason we're not adding to chat
00:19:41SDK teams adapter.
00:19:44You can, you know, no one's really stopping you from forking it and making your own, right?
00:19:48Like cause the adapters are fully loosely coupled and so you can just make your own version.
00:19:52And I think this is a good time to talk about, okay, I want to get started.
00:19:56How do, maybe I'm new to open source.
00:19:58I've never opened a pull request to an open source library, but I want to build an adapter.
00:20:04How do I get started?
00:20:06Yeah.
00:20:07I think for adapters, it's really worth thinking about the categories, right?
00:20:11So if you, if it's this like a hundred million user product that you want to support, then
00:20:16the right thing is to open a pull request to the chat SDK.
00:20:20If it's for, for something more niche, then you would, you know, literally just go to GitHub,
00:20:27see in your repository, tell your agent to look at the chat SDK repository, how you built
00:20:33an adapter and, and essentially do make one, right?
00:20:37And all these adapters are basically, they inherit from a base class and then they implement,
00:20:43let's say a post message function, which like ultimately would always be like some API call
00:20:49to that, to the platform that you want to support using whatever native SDK or maybe even just
00:20:55straight up fetches to their API.
00:20:58That makes sense.
00:20:59Awesome.
00:21:00We have a few more minutes here.
00:21:04So the next one I want to cover is things could get complex with project using multiple
00:21:09providers and apps.
00:21:11Sometimes humans need to be involved in a decision.
00:21:15How does human in the loop look with chat SDK?
00:21:19So I did a AMA on Reddit and I answered this with the AI SDK.
00:21:25Let's say that we're building with the AI SDK.
00:21:28It has a parameter called needs approval.
00:21:32And if you create a tool that needs human approval, you will listen to that stream.
00:21:38It will come back with a type that says, you know, needs approval.
00:21:42And that's when the chat SDK becomes helpful because you can write the UI needed to get
00:21:49the approval using JSX and that JSX component will render on whichever platform.
00:21:57So if you, you build the UI to get the approval once and you can use that with any platform,
00:22:04I think this is probably a question I get a lot because whenever you're building an agent,
00:22:11it's how do I, how do I give it enough power, but still allow the human to decide when things
00:22:17happen.
00:22:18Right.
00:22:19So there's a, I can give you an answer that's like very practical and very general and then
00:22:27maybe it's one that's a little bit more aspirational, but so that the, the general way, how do you
00:22:32implement human loop on chat SDK is that you delegate to your, to your agent that it wants
00:22:43to be, that it wants this, this, this, this tool called, well, to, to, to, to whatever
00:22:50answer the question.
00:22:51Right.
00:22:52And again, at some point the agent gets into the state where it says, okay, I need your
00:22:55approval.
00:22:56The agent will respond on essentially post a message to the Slack that selects, right.
00:23:02Or whatever you're working on.
00:23:03Hey, this user you know, the agent would like to perform this action.
00:23:08Do you approve?
00:23:09And you can use, for example, two JSX buttons for yes and no.
00:23:14And I think we have a pull request for callback URL.
00:23:17Yes.
00:23:18I don't know if that one merged yet.
00:23:19It hasn't, it hasn't merged yet, but so that's the, the more inspirational answer.
00:23:22Yes.
00:23:23So for now, you know, you just get the callback.
00:23:27And you, you on the server side, say, okay, no, no, it's approved.
00:23:31And you, you resume the agent operation at that moment.
00:23:34So that's the, that's the, that's, that's the generally like the general pattern is that
00:23:38you can draw these UIs to the, to the chat chat side, there are people can interact, they
00:23:45can kind of get for approval and then you proceed work.
00:23:48What we're currently working on, so it hasn't shipped yet, is that we are integrating this
00:23:54in general with the ability for every time you click a button that it calls a web hook.
00:23:58Right.
00:23:59And obviously that could be used in a very, very general fashion, whatever you have some
00:24:03kind of web hook system, but more specifically another thing for folks to kind of take a look
00:24:08at is the notion of web hooks in the workflow deficit.
00:24:14Yes.
00:24:15So I don't want to like do another whole five minutes spiel on workflow deficit, but workflow
00:24:20deficit is for sales system for writing durable compute, for writing, for allowing you to write
00:24:27agents that take work for hours.
00:24:30And one of the extremely elegant things in workflow deficit is that you can literally
00:24:35write something, you make a web hook and you send that web hook somewhere else and then
00:24:39you await the web hook, which seems like a crazy thing to do because it might take, let's
00:24:44say, five weeks until a user clicks it, right?
00:24:47But you can actually do that in workflow.
00:24:51And so you would then take this web hook and that's what you put into the JSX and chat SDK.
00:24:57And so whenever the user decides to actually click it, that magic await, it resolves and
00:25:03then it precedes the agent.
00:25:05I think the first time I saw that magic was, you know, it's very typical, the first interaction
00:25:10you have with an agent, it says, okay, you need to sign in.
00:25:13And when I first tried this out, I had to pull and wait and see, has there been a successful
00:25:18sign in?
00:25:19Very ugly, a lot of bugs, but with a web hook, I just waited for a successful sign in and
00:25:25it could wait 30 seconds, a day, weeks.
00:25:28And it was magical.
00:25:29It just worked.
00:25:30And that was probably one of the best like web hook callback type of situations I've run
00:25:34into.
00:25:36Okay.
00:25:37That's about time.
00:25:38Is there anything you want to say before we wrap?
00:25:44I don't have anything in particular, but like, I mean, basically like this is just an open
00:25:49source library.
00:25:51We made it because we needed it ourselves.
00:25:55From the reaction we've seen that there's a lot of demand.
00:25:58We definitely appreciate contributions, especially again for under like, we have to like fill
00:26:05out our like large scale adapter kind of repertoire.
00:26:11Like we I'm not sure we can do iMessage, but we also would love to do our C messaging, WeChat,
00:26:21you know, whatever your country preferred.
00:26:25Anywhere there's a thread.
00:26:26Well, no, we don't need threads anymore.
00:26:29Anywhere there's a conversation.
00:26:30Anywhere there's a conversation.
00:26:32Well thank you guys.
00:26:34I appreciate your time and I'm really excited to see what you build with the chat SDK.
00:26:39Thank you all.
00:26:41Thank you guys for being here.
00:26:44There's lots of interest in the chat.
00:26:46So please everyone who's trying it out, give us your feedback.
00:26:50We want to know more and let us know what adapters you want to add, what you want to add to it.
00:26:57Open those pull requests.
00:26:58We want to see it.
00:26:59Thank you all.
Community Posts
No posts yet. Be the first to write about this video!
Write about this video