by Roy3838
Why observe computer if computer can observe for you
# Add to your Claude Code skills
git clone https://github.com/Roy3838/ObserverLast scanned: 10/17/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-10-17T08:17:44.398Z",
"npmAuditRan": true,
"pipAuditRan": true,
"promptInjectionRan": true
}See how Observer compares with popular alternatives.
Observer is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by Roy3838. Why observe computer if computer can observe for you. It has 1,652 GitHub stars.
Yes. Observer passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/Roy3838/Observer" and add it to your Claude Code skills directory (see the Installation section above).
Observer is primarily written in TypeScript. It is open-source under Roy3838 on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh Observer against similar tools.
No comments yet. Be the first to share your thoughts!
30 days in the Featured rail · terms & refunds
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
Automated security scan — not a certification.
YouTube | Tiktok | Instagram | Twitter | Discord | Reddit
Using local models, keeping your data 100% private and secure.
• When I'm distracted, call me.
• When my download finishes, SMS me.
• When my render is done, Whatsapp me.
• When this dashboard changes, email me.
• When a person is on camera, telegram me.
• When my dog finishes their food, log it.
Screen • Camera • Mic • Audio
Local LLMs
Messaging • Notifications • Recording • Memory • Code
Sends an email when the Observer logo is on screen
System Prompt (uses $SCREEN for multimodal screen input)
You are an Observer agent, watch the screen and if you see the Observer logo say OBSERVER, if you don't, say CONTINUE.
$SCREEN
Code using Email Tool if model identified an Observer logo
if(response.includes("OBSERVER")){
sendEmail("your@email.com", response, screen); //sends the screen as an attached image
}
Creating your own Observer AI consist of three things:
* Uses a whisper model with transformers.js
Agent Tools:
getMemory(agentId?)* – Retrieve stored memorysetMemory(agentId?, content)* – Replace stored memoryappendMemory(agentId?, content)* – Add to existing memorygetImageMemory(agentId?)* - Retrieve images stored in memorysetImageMemory(agentId?, images)* - Set images to memoryappendImageMemory(agentId?, images)* - Add images to memorystartAgent(agentId?)* – Starts an agentstopAgent(agentId?)* – Stops an agenttime() - Gets current timesleep(ms) - Waits that ammount of miliseconds* agentId is optional, deaults to agent running code
Notification Tools:
sendDiscord(discord_webhook, message, images?, videos?) - Directly sends a discord message to a server.sendTelegram(chat_id, message, images?, videos?) Sends a telegram message with the Observer bot. Get the chat_id messaging the bot @observer_notification_bot.sendEmail(email, message, images?, videos?) - Sends an email. Email must be the signed in email.sendPushover(user_token, message, images?, title?) - Sends a pushover notification.call(phone_number, message)* - Makes an automated phone call with text-to-speech message. Needs whitelisting.sendWhatsapp(phone_number, message, images?, videos?)* - Sends a whatsapp message with the Observer bot. Needs whitelisting.sendSms(phone_number, message, images?, videos?)* - Sends an SMS to a phone number. Due to A2P policy, blocked for US/Canada. Needs whitelisting.notify(title, options) – Send browser notification ⚠️IMPORTANT: Some browsers block notificationssound(name?, volume?) - Plays a notification sound locally. No account needed, works on web and app.* To whitelist, SMS or call +1 (863)208-5341 or whatsapp +1 (555)783-4727
Video Recording Tools:
startClip() - Starts a recording of any video media and saves it to the recording Tab.stopClip() - Stops an active recordingmarkClip(label) - Adds a label to any active recording that will be displayed in the recording Tab.getVideo() - Returns array of videos on buffer.App Tools:
ask(question, title="Confirmation") - Pops up a system confirmation dialogmessage(message, title="Agent Message") - Pops up a system messagesystem_notify(body, title="Observer AI") - Sends a system notificationoverlay(body) - Pushes a message to the overlayclick('left'|'right') - Triggers a mouse click at the current cursor position accepts either 'left' or 'right', defaults to left.celebrate() - Triggers a celebration animation in the Observer UI.The "Code" tab receives the following variables as context before running:
response - The model's response (null when using a decision model)decision - The decision model's answer (null for text models, see Decision Models)agentId - The id of the agent running the codescreen - The screen if capturedcamera - The camera if capturedimemory - The agent's current image in memoryimages - All images sent to the modelprompt - The model's promptmicrophone - Trascription from the microphone in this loopscreenAudio - Transcription from screen audio in this loopallAudio - Transcription from microphone and screen audio mixed in this loopJavaScript agents run in the browser sandbox, making them ideal for passive monitoring and notifications:
// Remove Think tags for deepseek model
const cleanedResponse = response.replace(/<think>[\s\S]*?<\/think>/g, '').trim();
// Get time
const time = time();
// Update memory with timestamp
appendMemory(`[${time}] ${cleanedResponse}`);
// Send to Telegram if the model mentions a word
if(response.includes("word")){
sendTelegram(cleanedResponse, "12345678") // Example chat_id
}
Decision models don't write text, they answer typed questions with probabilities. response is null and the result is in decision instead.
Plain-text prompt – a single yes/no (noul) question, the sensor images are the state:
Is there a person in the room? $CAMERA
decision is one answer:
// { type: 'noul', noul: 0.94, start: 0.12, dropped: false }
if (decision.noul > 0.8) {
sendTelegram("12345678", "Someone is in the room", camera);
}
noul - Probability of "yes" (0 to 1)start - Average noul over the run's first 3 iterationsdropped - true once noul has stayed well below start for 3 iterations in a row (useful for "t