google-chat
Skill646 starsChanged 5 months agoApache-2.0View on GitHub
CRITICAL: You MUST activate this skill BEFORE sending, reading, or managing Google Chat messages. Always trigger this skill as the first step when the user mentions "chat", "google chat", "message a space", "DM", or sending a chat message. Contains strict formatting mandates that override default messaging behavior.
3 other projects use a version of this.
Adopted by
Most recently taken up by
- antoniolg/agent-kittheir own version, first seen Nov 8, 2026
- sanjay3290/ai-skillstheir own version, first seen Jul 6, 2026
- pbc-os/smb-starter-kittheir own version, first seen Apr 8, 2026
Other versions3 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 3
- sanjay3290/ai-skills★ 452same name
- antoniolg/agent-kit★ 100same name
- pbc-os/smb-starter-kit★ 10same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository5 other files it gives its agents.
- gmailSkill
- google-calendarSkill
- google-docsSkill
- google-sheetsSkill
- google-slidesSkill
The file
We split this skill into the rules it gives an agent
7 rules. 0 are common, 1 is distinctive, and 6 are very specific to this project.
0
Common
Most of the 3 edited versions we read keep these.
1
Distinctive
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 18
When composing messages (via chat.sendMessage or chat.sendDm), always use Google Chat's supported markdown syntax.
- Distinctive: line 38
Always convert these before sending a message to Chat:
- Very specific: line 126
List threads: Use chat.listThreads to discover threads in a space.
- Very specific: line 129
Get thread messages: Use chat.getMessages with the threadName parameter to get all messages in a specific thread.
- Very specific: line 154
Use unreadOnly: true on chat.getMessages to filter for unread messages only.
- Very specific: line 164
If no lastReadTime is found, all messages are returned (treats everything as unread)
- Very specific: line 184
Use chat.setUpSpace to create a new named space with members:
“Common” is measured: kept by at least 6 in 10 of the 3 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Google Chat Expert
You are an expert at messaging and managing conversations through the Google Chat API. Follow these guidelines when helping users with chat tasks.
Chat Message Formatting
When composing messages (via chat.sendMessage or chat.sendDm), always use
Google Chat's supported markdown syntax. Google Chat uses a specific subset of
markdown that differs from standard markdown. You MUST convert any unsupported
syntax before sending.
Supported Formatting
| Syntax | Renders As | Example |
*text* | bold | *Important update* |
_text_ | italic | _Please review_ |
~text~ | ~no longer relevant~ | |
`code` | inline code | `git status` |
``` | code block | ```\ncode\n``` |
* or - | bulleted list | * Item one\n* Item two |
<url|text> | hyperlink | <https://example.com|Click> |
<users/{userId}> | @mention | <users/12345678> |
Unsupported Syntax (Convert These)
Always convert these before sending a message to Chat:
| Unsupported Syntax | Convert To |
**bold** (double *) | *bold* (single *) |
[text](url) markdown link | <url|text> Chat link format |
# Heading | *Heading* (bold text) |
| Nested lists | Flatten to a single-level list. |
> blockquote | Preserve the > character as-is |
Message Formatting Examples
Status Update
*Project Status Update*
_Sprint 14 Summary:_
* Completed 12 of 15 story points
* ~Deferred analytics dashboard~ (moved to Sprint 15)
* Key PR: <https://github.com/org/repo/pull/42|#42 - Auth refactor>
Next steps: `deploy-staging` pipeline runs tonight.Code Snippet
Found the bug. The issue is in the handler:
```
func handleRequest(ctx context.Context) error {
// Missing nil check here
if ctx == nil {
return ErrNilContext
}
return process(ctx)
}
```
<users/12345678> can you review this fix?Spaces vs. Direct Messages
Google Chat has two main messaging contexts. Use the right tool for each:
Spaces (Group Conversations)
Spaces are shared group conversations with a display name.
| Action | Tool | Key Parameter |
| Find a space | chat.findSpaceByName | displayName |
| List all spaces | chat.listSpaces | (none) |
| Send a message | chat.sendMessage | spaceName, message |
| Create a new space | chat.setUpSpace | displayName, userNames |
Direct Messages (1:1)
DMs are private conversations between two users, identified by email.
| Action | Tool | Key Parameter |
| Find a DM space | chat.findDmByEmail | email |
| Send a DM | chat.sendDm | email, message |
Note:
chat.sendDmandchat.findDmByEmailboth usespaces.setupunder the hood. If no DM space exists with the user, one is automatically created. There is no need to create a DM space separately.
Limitation: DM tools only support 1:1 conversations. For group conversations (3+ people), use
chat.setUpSpaceto create a named space instead.
Threading
Threads keep related messages grouped together within a space. Use the
threadName parameter to reply in an existing thread.
How Threading Works
- Start a new thread: Send a message without
threadName. The response will include athread.nameyou can use for replies. - Reply to a thread: Pass
threadNamewhen callingchat.sendMessageorchat.sendDm. The API usesREPLY_MESSAGE_FALLBACK_TO_NEW_THREAD— if the thread doesn't exist, a new thread is created. - List threads: Use
chat.listThreadsto discover threads in a space. It returns the most recent message of each unique thread in reverse chronological order. - Get thread messages: Use
chat.getMessageswith thethreadNameparameter to get all messages in a specific thread.
Thread Example Workflow
1. chat.listThreads({ spaceName: "spaces/AAAAN2J52O8" })
→ Returns threads with thread.name values
2. chat.getMessages({
spaceName: "spaces/AAAAN2J52O8",
threadName: "spaces/AAAAN2J52O8/threads/IAf4cnLqYfg"
})
→ Returns all messages in that thread
3. chat.sendMessage({
spaceName: "spaces/AAAAN2J52O8",
message: "Thanks for the update!",
threadName: "spaces/AAAAN2J52O8/threads/IAf4cnLqYfg"
})
→ Replies in the same threadUnread Messages
Use unreadOnly: true on chat.getMessages to filter for unread messages only.
How It Works
The unread filter:
- Looks up the authenticated user's ID via the People API
- Finds the user's membership in the space
- Uses the
lastReadTimefrom the membership to filter messages created after that timestamp - If no
lastReadTimeis found, all messages are returned (treats everything as unread)
Combining Filters
You can combine unreadOnly with threadName to get unread messages in a
specific thread. The filters are joined with AND:
chat.getMessages({
spaceName: "spaces/AAAAN2J52O8",
threadName: "spaces/AAAAN2J52O8/threads/IAf4cnLqYfg",
unreadOnly: true
})Space Management
Creating a Space
Use chat.setUpSpace to create a new named space with members:
chat.setUpSpace({
displayName: "Q1 Planning",
userNames: ["users/12345678", "users/87654321"]
})Important: The
userNamesparameter expects user resource names in the formatusers/{userId}, not email addresses. Usepeople.getUserProfileto look up user IDs and convert thepeople/{id}resource name tousers/{id}.
Resource Name Formats
Google Chat uses structured resource names. Here is a quick reference:
| Resource | Format | Example |
| Space | spaces/{spaceId} | spaces/AAAAN2J52O8 |
| Message | spaces/{spaceId}/messages/{messageId} | spaces/AAAAN2J52O8/messages/abc123 |
| Thread | spaces/{spaceId}/threads/{threadId} | spaces/AAAAN2J52O8/threads/IAf4cnLqYfg |
| User | users/{userId} | users/12345678 |
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

