Sign in Appearance settings {"props":{}} {"props":{"should_use_dotcom_links":true}} PlatformAI CODE CREATIONGitHub CopilotWrite better code with AIGitHub Copilot appDirect agents from issue to mergeMCP RegistryIntegrate external toolsDEVELOPER WORKFLOWSActionsAutomate any workflowCodespacesInstant dev environmentsIssuesPlan and track workCode ReviewManage code changesCode QualityEnforce quality at mergeAPPLICATION SECURITYGitHub Advanced SecurityFind and fix vulnerabilitiesCode securitySecure your code as you buildSecret protectionStop leaks before they startEXPLOREWhy GitHubDocumentationBlogChangelogMarketplaceView all featuresSolutionsBY COMPANY SIZEEnterprisesSmall and medium teamsStartupsNonprofitsBY USE CASEApp ModernizationDevSecOpsDevOpsCI/CDView all use casesBY INDUSTRYHealthcareFinancial servicesManufacturingGovernmentView all industriesView all solutionsResourcesEXPLORE BY TOPICAISoftware DevelopmentDevOpsSecurityView all topicsEXPLORE BY TYPECustomer storiesEvents & webinarsEbooks & reportsBusiness insightsGitHub SkillsSUPPORT & SERVICESDocumentationCustomer supportCommunity forumTrust centerPartnersView all resourcesOpen SourceCOMMUNITYGitHub SponsorsFund open source developersPROGRAMSSecurity LabMaintainer CommunityAcceleratorGitHub StarsArchive ProgramREPOSITORIESTopicsTrendingCollectionsEnterpriseENTERPRISE SOLUTIONSEnterprise platformAI-powered developer platformAVAILABLE ADD-ONSGitHub Advanced SecurityEnterprise-grade security featuresCopilot for BusinessEnterprise-grade AI featuresPremium SupportEnterprise-grade 24/7 supportPricing Search or jump to... Search code, repositories, users, issues, pull requests... Search Clear Search syntax tips Provide feedback We read every piece of feedback, and take your input very seriously.

Appearance settings {"props":{}} Resetting focus You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert {{ message }} Promyer / stellar-inbox Public Notifications You must be signed in to change notification settings Fork 0 Star 0 Code Issues 0 Pull requests 0 Actions Projects Security and quality 0 Insights Additional navigation options Code Issues Pull requests Actions Projects Security and quality Insights {"payload":{"codeViewRepoRoute":{"path":"/","refInfo":{"name":"main","listCacheKey":"v0:1785432136.0","canEdit":false,"refType":"branch","currentOid":"8ce59f12e643e407859f7685d004b6b010b6b2da"},"tree":{"items":[{"name":".agents/skills/email-reader","path":".agents/skills/email-reader","contentType":"directory","hasSimplifiedPath":true},{"name":"email_reader","path":"email_reader","contentType":"directory"},{"name":".env.example","path":".env.example","contentType":"file"},{"name":".gitignore","path":".gitignore","contentType":"file"},{"name":"LICENSE","path":"LICENSE","contentType":"file"},{"name":"README.md","path":"README.md","contentType":"file"},{"name":"pyproject.toml","path":"pyproject.toml","contentType":"file"},{"name":"uv.lock","path":"uv.lock","contentType":"file"}],"totalCount":8,"templateDirectorySuggestionUrl":null,"readme":null,"showBranchInfobar":false},"userNameDisplayConfiguration":null,"treeExpanded":false,"symbolsExpanded":false,"copilotSWEAgentEnabled":false,"copilotAccessAllowed":false,"isOverview":true,"overview":{"banners":{"shouldRecommendReadme":false,"isPersonalRepo":false,"showUseActionBanner":false,"actionSlug":null,"actionId":null,"showProtectBranchBanner":false,"requiredCustomPropertyValuesMissingCount":0,"transactionalMessageBanner":null,"publishBannersInfo":{"dismissActionNoticePath":"/settings/dismiss-notice/publish_action_from_repo","releasePath":"/Promyer/stellar-inbox/releases/new?marketplace=true","showPublishActionBanner":false},"interactionLimitBanner":null,"showInvitationBanner":false,"inviterName":null,"actionsMigrationBannerInfo":{"releaseTags":[],"showImmutableActionsMigrationBanner":false,"initialMigrationStatus":null},"copilotSurveyBanner":null,"showSpammyBanner":false,"blockedContributorsBanner":null},"codeButton":{"contactPath":"/contact","isEnterprise":false,"local":{"protocolInfo":{"httpAvailable":true,"sshAvailable":null,"httpUrl":"https://github.com/Promyer/stellar-inbox.git","showCloneWarning":null,"sshUrl":null,"sshCertificatesRequired":null,"sshCertificatesAvailable":null,"ghCliUrl":"gh repo clone Promyer/stellar-inbox","defaultProtocol":"http","newSshKeyUrl":"/settings/ssh/new","setProtocolPath":"/users/set_protocol?protocol_type=clone"},"platformInfo":{"cloneUrl":"https://desktop.github.com","showVisualStudioCloneButton":false,"visualStudioCloneUrl":"https://windows.github.com","showXcodeCloneButton":false,"xcodeCloneUrl":"xcode://clone?repo=https%3A%2F%2Fgithub.com%2FPromyer%2Fstellar-inbox","zipballUrl":"/Promyer/stellar-inbox/archive/refs/heads/main.zip"}},"newCodespacePath":"/codespaces/new?hide_repo_select=true\u0026repo=1317517750"},"popovers":{"rename":null,"renamedParentRepo":null},"commitCount":"2","overviewFiles":[{"displayName":"README.md","repoName":"stellar-inbox","refName":"main","path":"README.md","preferredFileType":"readme","tabName":"README","richText":"\u003carticle class=\"markdown-body entry-content container-lg\" itemprop=\"text\"\u003e\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eStellar Inbox\u003c/h1\u003e\u003ca id=\"user-content-stellar-inbox\" class=\"anchor\" aria-label=\"Permalink: Stellar Inbox\" href=\"#stellar-inbox\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eCodex skill for reading a configured Gmail newsletter and passing its raw decoded text MIME parts to the model. The skill contains a local read-only Gmail daemon as an implementation detail; users normally invoke the skill with a specific date or date range rather than interacting with the daemon directly.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThe skill starts the daemon, requests all messages from the configured sender for the requested period, passes all decoded \u003ccode\u003etext/plain\u003c/code\u003e and \u003ccode\u003etext/html\u003c/code\u003e MIME parts to the model, and uses \u003ccode\u003e.agents/skills/email-reader/LINK_FILTERING_INSTRUCTIONS.md\u003c/code\u003e for report selection, formatting, and feedback collection.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eUse with Codex\u003c/h2\u003e\u003ca id=\"user-content-use-with-codex\" class=\"anchor\" aria-label=\"Permalink: Use with Codex\" href=\"#use-with-codex\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eInvoke the skill with a date or date range:\u003c/p\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"$email-reader 2026-06-27\n$email-reader 2026-06-01 2026-06-27\"\u003e\u003cpre lang=\"text\" class=\"notranslate\"\u003e\u003ccode\u003e$email-reader 2026-06-27\n$email-reader 2026-06-01 2026-06-27\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe skill runs \u003ccode\u003e.agents/skills/email-reader/scripts/fetch_messages.py\u003c/code\u003e, which returns message metadata and raw decoded text MIME parts. The model interprets those parts when composing the report; the fetcher does not select, clean, or rewrite their content. Generated reports keep per-link feedback in browser \u003ccode\u003elocalStorage\u003c/code\u003e and can export it as \u003ccode\u003eReport.feedback.json\u003c/code\u003e for later preference updates.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eConfigure\u003c/h2\u003e\u003ca id=\"user-content-configure\" class=\"anchor\" aria-label=\"Permalink: Configure\" href=\"#configure\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eCreate \u003ccode\u003e.env\u003c/code\u003e in the project root:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-dotenv notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"ALLOWED_SENDER=sender@example.com\nGMAIL_OAUTH_CREDENTIALS_PATH=gmail_client_secret.json\nHOST=127.0.0.1\nPORT=4873\"\u003e\u003cpre\u003e\u003cspan class=\"pl-v\"\u003eALLOWED_SENDER\u003c/span\u003e\u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003esender@example.com\u003c/span\u003e\n\u003cspan class=\"pl-v\"\u003eGMAIL_OAUTH_CREDENTIALS_PATH\u003c/span\u003e\u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003egmail_client_secret.json\u003c/span\u003e\n\u003cspan class=\"pl-v\"\u003eHOST\u003c/span\u003e\u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e127.0.0.1\u003c/span\u003e\n\u003cspan class=\"pl-v\"\u003ePORT\u003c/span\u003e\u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e4873\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eGet the OAuth client file:\u003c/p\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003eOpen \u003ccode\u003ehttps://console.cloud.google.com\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eCreate or select a project.\u003c/li\u003e\n\u003cli\u003eEnable \u003ccode\u003eAPIs \u0026amp; Services -\u0026gt; Library -\u0026gt; Gmail API\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eConfigure \u003ccode\u003eGoogle Auth Platform -\u0026gt; OAuth consent screen -\u0026gt; Branding\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAdd your Gmail account to test users if the app is in test mode.\u003c/li\u003e\n\u003cli\u003eCreate \u003ccode\u003eGoogle Auth Platform -\u0026gt; Clients -\u0026gt; Create client\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eSelect application type \u003ccode\u003eDesktop app\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDownload the JSON file.\u003c/li\u003e\n\u003cli\u003eRename it to \u003ccode\u003egmail_client_secret.json\u003c/code\u003e and put it in the project root.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp dir=\"auto\"\u003eThis must be an OAuth client JSON for an installed desktop app. Do not use an API key or a service account JSON.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThe scope in code is:\u003c/p\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"https://www.googleapis.com/auth/gmail.readonly\"\u003e\u003cpre lang=\"text\" class=\"notranslate\"\u003e\u003ccode\u003ehttps://www.googleapis.com/auth/gmail.readonly\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eLocal daemon\u003c/h2\u003e\u003ca id=\"user-content-local-daemon\" class=\"anchor\" aria-label=\"Permalink: Local daemon\" href=\"#local-daemon\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eInstall the locked dependencies first:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"uv sync --locked\"\u003e\u003cpre\u003euv sync --locked\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe daemon can also be started directly for local development:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"UV_CACHE_DIR=/tmp/uv-cache uv run --locked python -m email_reader\"\u003e\u003cpre\u003eUV_CACHE_DIR=/tmp/uv-cache uv run --locked python -m email_reader\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eOn the first \u003ccode\u003e/messages\u003c/code\u003e request, the daemon opens the OAuth authorization URL in the default browser. Finish Google authorization; the local OAuth token is saved to \u003ccode\u003e.gmail_token.json\u003c/code\u003e. If Google rejects an old or revoked token, the daemon automatically starts authorization again and keeps the old token as a backup.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eIf Google shows \u003ccode\u003eAccess blocked: this app has not completed the Google verification process\u003c/code\u003e, wait and try again later. It can take up to 24 hours for new OAuth app settings and test-user changes to become available.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThe API is available at \u003ccode\u003e/messages\u003c/code\u003e:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"curl 'http://127.0.0.1:4873/messages?start_date=2026-06-01\u0026amp;end_date=2026-06-27'\"\u003e\u003cpre\u003ecurl \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003ehttp://127.0.0.1:4873/messages?start_date=2026-06-01\u0026amp;end_date=2026-06-27\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003e\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003c/article\u003e","loaded":true,"timedOut":false,"errorMessage":null,"headerInfo":{"toc":[{"level":1,"text":"Stellar Inbox","anchor":"stellar-inbox","htmlText":"Stellar Inbox"},{"level":2,"text":"Use with Codex","anchor":"use-with-codex","htmlText":"Use with Codex"},{"level":2,"text":"Configure","anchor":"configure","htmlText":"Configure"},{"level":2,"text":"Local daemon","anchor":"local-daemon","htmlText":"Local daemon"}],"siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2FPromyer%2Fstellar-inbox"}},{"displayName":"LICENSE","repoName":"stellar-inbox","refName":"main","path":"LICENSE","preferredFileType":"license","tabName":"MIT","richText":null,"loaded":false,"timedOut":false,"errorMessage":null,"headerInfo":{"toc":null,"siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2FPromyer%2Fstellar-inbox"}}],"overviewFilesProcessingTime":0,"copilotSWEAgentEnabled":false}},"codeViewLayoutRoute":{"repo":{"id":1317517750,"defaultBranch":"main","name":"stellar-inbox","ownerLogin":"Promyer","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2026-07-30T17:22:13.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/20537191?v=4","public":true,"private":false,"isOrgOwned":false},"currentUser":null,"uploadToken":"wIiKRNnUMNvkymqk8SsUSuY3dC5jbyPNMJrTJ2Nja2HO7qVMt83mlUs5UT6eW0hZrn2d6SgSnUhxwAa9vXxhEw","allShortcutsEnabled":false,"treeExpanded":true,"path":"/","symbolsExpanded":false,"refInfo":{"name":"main","listCacheKey":"v0:1785432136.0","canEdit":false,"currentOid":"8ce59f12e643e407859f7685d004b6b010b6b2da"},"helpUrl":"https://docs.github.com","findFileWorkerPath":"/assets-cdn/worker/find-file-worker-335389ad12f5e105.js","findInFileWorkerPath":"/assets-cdn/worker/find-in-file-worker-865b73163ef9cf93.js","githubDevUrl":null},"sidebarAbout":{"description":"An AI skill for filtering and reading newsletters","formattedDescription":"An AI skill for filtering and reading newsletters","topics":[{"name":"hackernews"},{"name":"newsletters"},{"name":"skill"}],"showInsights":true,"stargazerCount":0,"watcherCount":0,"forksCount":0,"stargazersPath":"/Promyer/stellar-inbox/stargazers","watchersPath":"/Promyer/stellar-inbox/watchers","forkNetworkPath":"/Promyer/stellar-inbox/forks","activityPath":"/Promyer/stellar-inbox/activity","reportPath":"/contact/report-content?content_url=https%3A%2F%2Fgithub.com%2FPromyer%2Fstellar-inbox\u0026report=Promyer+%28user%29","canEditMetadata":false,"ownerLogin":"Promyer","repoName":"stellar-inbox","isOrg":false,"sections":{"releases":false,"sponsors":false,"deployments":false,"packages":false,"usedBy":false,"contributors":true,"languages":true,"cta":false,"suggestedWorkflows":false},"hasCitation":false,"repo":{"ownerAvatarUrl":"https://avatars.githubusercontent.com/u/20537191?s=60\u0026v=4","ownerId":20537191,"isPrivate":false,"isTemplate":false,"isFork":false,"isMirror":false,"isArchived":false,"visibilityLabel":"Public","license":{"spdxId":"MIT","name":"MIT License"},"isAdvisoryWorkspace":false},"star":{"viewerHasStarred":false,"canStar":false},"fork":{"canFork":false,"forkabilityError":"not_logged_in"},"pin":{"canPin":false,"isPinned":true,"isOrgOwned":false,"pinItemsRemaining":3},"watch":{"canWatch":false,"watchData":{"repositoryId":"1317517750","repositoryName":"Promyer/stellar-inbox","watchersCount":0,"subscriptionType":"none","subscribableThreadTypes":[{"name":"Issue","enabled":true,"subscribed":false},{"name":"PullRequest","enabled":true,"subscribed":false},{"name":"Release","enabled":true,"subscribed":false},{"name":"Discussion","enabled":false,"subscribed":false},{"name":"SecurityAlert","enabled":true,"subscribed":false}],"showLabelSubscriptions":false,"subscribedLabels":[]}},"viewer":{"isLoggedIn":false,"isSiteAdmin":false,"emuContributionBlocked":false},"showSponsorButton":false,"showTemplateButton":false,"showDemoNotification":false},"csrf_tokens":{"/Promyer/stellar-inbox/branches":{"post":"gCseu9zzIuk9xolXUPruZtDwZTnpqIUCrIyf3wrykiz7lzUcGbbfQcRykRsBXgyYntMWtYyQ9AnOso_cij6LJQ"}}},"title":"GitHub - Promyer/stellar-inbox: An AI skill for filtering and reading newsletters","appPayload":{},"meta":{"title":"GitHub - Promyer/stellar-inbox: An AI skill for filtering and reading newsletters"}} mainBranchesTagsGo to fileCodeOpen more actions menuFolders and filesNameNameLast commit messageLast commit dateLatest commit History2 Commits2 Commits.agents/skills/email-reader.agents/skills/email-reader  email_readeremail_reader  .env.example.env.example  .gitignore.gitignore  LICENSELICENSE  README.mdREADME.md  pyproject.tomlpyproject.toml  uv.lockuv.lock  View all filesRepository files navigationREADMEMIT licenseMore itemsStellar Inbox Codex skill for reading a configured Gmail newsletter and passing its raw decoded text MIME parts to the model. The skill contains a local read-only Gmail daemon as an implementation detail; users normally invoke the skill with a specific date or date range rather than interacting with the daemon directly.

The skill starts the daemon, requests all messages from the configured sender for the requested period, passes all decoded text/plain and text/html MIME parts to the model, and uses .agents/skills/email-reader/LINK_FILTERING_INSTRUCTIONS.md for report selection, formatting, and feedback collection.

$email-reader 2026-06-27 $email-reader 2026-06-01 2026-06-27 The skill runs .agents/skills/email-reader/scripts/fetch_messages.py, which returns message metadata and raw decoded text MIME parts. The model interprets those parts when composing the report; the fetcher does not select, clean, or rewrite their content. Generated reports keep per-link feedback in browser localStorage and can export it as Report.feedback.json for later preference updates.

ALLOWED_SENDER=sender@example.com GMAIL_OAUTH_CREDENTIALS_PATH=gmail_client_secret.json HOST=127.0.0.1 PORT=4873 Get the OAuth client file:

This article was aggregated automatically by CyberWire Daily's newsfeed engine. Original reporting: github.com.