{"id":50371563,"url":"https://github.com/string-os/apps","last_synced_at":"2026-05-30T07:03:55.811Z","repository":{"id":356499613,"uuid":"1231932907","full_name":"string-os/apps","owner":"string-os","description":"Production-grade String apps for AI agents — installable via /install or git clone. translate, websearch, weather, github, youtube, humanizer, docx, whisper, notion, google, gh-kanban, appkit.","archived":false,"fork":false,"pushed_at":"2026-05-20T06:31:55.000Z","size":51,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-20T10:07:37.061Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/string-os.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-07T12:30:11.000Z","updated_at":"2026-05-20T06:32:00.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/string-os/apps","commit_stats":null,"previous_names":["string-os/apps"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/string-os/apps","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/string-os%2Fapps","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/string-os%2Fapps/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/string-os%2Fapps/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/string-os%2Fapps/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/string-os","download_url":"https://codeload.github.com/string-os/apps/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/string-os%2Fapps/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33682998,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-30T02:00:06.278Z","response_time":92,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-30T07:03:54.859Z","updated_at":"2026-05-30T07:03:55.806Z","avatar_url":"https://github.com/string-os.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# String Apps\n\nA curated collection of production-grade String apps for the [String](https://github.com/string-os/string) runtime. Each app is a self-contained markdown document (or directory) the agent installs once and uses through `/open` and `/act`.\n\nThis is the source repo. Apps published from here also appear in the [StringHub marketplace](https://stringhub.org) under the `stringhub` namespace.\n\n---\n\n## What's in this repo\n\n| App | What it does | Key dependencies | Auth |\n|---|---|---|---|\n| [translate](./apps/translate/) | Translate text between languages (MyMemory API) | none | none |\n| [websearch](./apps/websearch/) | Search Wikipedia, Hacker News, DuckDuckGo | none | none |\n| [weather](./apps/weather/) | Current weather, forecast, city lookup (Open-Meteo) | none | none |\n| [github](./apps/github/) | Issues, PRs, repos, notifications via `gh` CLI | `gh` | `gh auth login` (one-time, human) |\n| [youtube](./apps/youtube/) | Video metadata + transcript via `yt-dlp` | `yt-dlp` | none |\n| [humanizer](./apps/humanizer/) | Detect AI-writing patterns and suggest fixes | `python3` | none |\n| [docx](./apps/docx/) | Word/PDF read/write, format conversion via `pandoc` | `pandoc` (+ optional `wkhtmltopdf`, `pdftotext`, `libreoffice`) | none |\n| [whisper](./apps/whisper/) | Local speech-to-text with OpenAI Whisper | `whisper`, `ffmpeg` | none |\n| [notion](./apps/notion/) | Search, read, write, comment on pages; query databases | `curl`, `python3` | `$NOTION_TOKEN` |\n| [google](./apps/google/) | Gmail, Calendar, Drive via gcloud ADC + REST APIs | `gcloud` | `gcloud auth login` (one-time, human) |\n| [gh-kanban](./apps/gh-kanban/) | View a GitHub Projects v2 board as text | `gh` | `gh auth login` + `OWNER`/`PROJECT_NUMBER` |\n| [appkit](./apps/appkit/) | Scaffold, validate, and learn to write String apps | none | none |\n\nEvery app has a `requirements.md` that spells out exactly what to install and how to authenticate. Agents should read it before running any action.\n\n---\n\n## Install\n\nThe easy way (from the StringHub marketplace):\n\n```\n/install https://stringhub.org/api/install/stringhub/\u003capp-name\u003e\n```\n\nFor example:\n\n```\n/install https://stringhub.org/api/install/stringhub/translate\n/open app:translate\n/act.translate --text \"Hello, world\" --from en --to ko\n```\n\nThe local way (cloning this repo and installing from disk):\n\n```bash\ngit clone https://github.com/string-os/apps.git\ncd apps\n```\n\nThen in your String session:\n\n```\n/install ./apps/translate\n/open app:translate\n```\n\nLocal install is useful when you want to fork an app, edit it, and try the change without going through publish.\n\n---\n\n## Anatomy of an app\n\nEach app under `apps/\u003cname\u003e/` has at minimum:\n\n```\napps/translate/\n├── string.md          ← entry point — opens with /open app:translate\n└── requirements.md    ← dependencies, auth, setup steps (read before use)\n```\n\nThe setup doc must be named `requirements.md` (plural): the runtime auto-detects a sibling by that name and surfaces it (`Setup: /open requirements.md`) on a missing-env warning or an action error. For the hosted/marketplace path, also declare it explicitly with a `[!requirements](./requirements.md)` directive near the top of `string.md`.\n\nMulti-page apps add more `.md` files alongside (and optionally a `nav/main.md`):\n\n```\napps/github/\n├── string.md\n├── requirements.md\n├── nav/main.md\n├── repos.md\n├── issues.md\n├── prs.md\n└── actions.md\n```\n\nFor the SFMD format itself, see the [spec](https://github.com/string-os/string/tree/main/docs/sfmd).\nFor runtime semantics (how `/open`, `/act`, `/install` work), see the [runtime docs](https://github.com/string-os/string/tree/main/docs/runtime).\n\n---\n\n## Frontmatter conventions used here\n\n```yaml\n---\nname: translate              # local registry key (after /install)\nnamespace: stringhub         # publisher — collision detection identity\nversion: 1.0.0\ntype: app                    # or \"tool\" — decides app: vs tool: lookup\ndescription: ...\ntags: [...]\ndefault: \u003caction-id\u003e         # auto-runs on /open, /refresh, /back — only if it takes no required args (optional)\nrequires: [NOTION_TOKEN]     # required env vars — runtime warns \"[!] Missing required env\" if unset (optional)\nenv:                         # human-readable descriptions of those vars; documentation only (optional)\n  - name: NOTION_TOKEN\n    description: ...\n---\n```\n\n`(namespace, name)` is the canonical identity. Two apps that share `name` but differ in `namespace` install side-by-side; the same `(namespace, name)` re-installs in place.\n\nNote: only `requires:` triggers the missing-env warning. An `env:` block alone is descriptive and does **not** surface a warning — list the var in `requires:` too if it's mandatory.\n\n---\n\n## Contributing a new app\n\n1. Make a directory under `apps/\u003cname\u003e/` with a `string.md` and `requirements.md`.\n2. Set `namespace` to your own publisher handle (not `stringhub`) and pick a `name`.\n3. Test locally: `/install ./apps/\u003cname\u003e` then run every action.\n4. Open a PR. We'll review for: dependencies clearly stated, every action returns useful output, no destructive operations without explicit user confirmation.\n\nIf your app needs human-driven OAuth (browser login), `requirements.md` MUST tell the AI to ask the human to run the login command — agents can't complete OAuth flows themselves.\n\n---\n\n## License\n\nMIT. See [LICENSE](./LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstring-os%2Fapps","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstring-os%2Fapps","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstring-os%2Fapps/lists"}