diff --git a/.github/ISSUE_TEMPLATE/fork-feedback.md b/.github/ISSUE_TEMPLATE/fork-feedback.md new file mode 100644 index 0000000..b1923c1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/fork-feedback.md @@ -0,0 +1,22 @@ +--- +name: Fork Feedback +about: Tell us about your fork — what you changed, what worked, what didn't +title: "[Fork] " +labels: feedback +assignees: '' +--- + +**Your fork URL** (optional): + + +**What did you change?** + + + +**What worked well?** + + +**What was confusing or broken?** + + +**What would you add to the template?** diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..add79de --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,39 @@ +name: CI + +on: + push: + branches: + - main + - master + pull_request: + +permissions: + contents: write + +jobs: + validate-bundle: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '22' + + - name: Run CI checks + run: npm run ci + + - name: Reassemble bundle + if: github.event_name == 'push' && github.ref == 'refs/heads/main' + run: npm run assemble + + - name: Commit updated cortex.tsk + if: github.event_name == 'push' && github.ref == 'refs/heads/main' + run: | + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git add cortex.tsk + git diff --staged --quiet && echo "cortex.tsk is up to date" || git commit -m "chore: reassemble cortex.tsk [skip ci]" && git push \ No newline at end of file diff --git a/.github/workflows/publish-bundle.yml b/.github/workflows/publish-bundle.yml new file mode 100644 index 0000000..1bd65b0 --- /dev/null +++ b/.github/workflows/publish-bundle.yml @@ -0,0 +1,32 @@ +name: Publish Bundle + +on: + release: + types: [published] + +permissions: + contents: write + +jobs: + publish: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '22' + + - name: Validate + run: npm run validate + + - name: Assemble bundle + run: npm run assemble + + - name: Upload cortex.tsk to release + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: gh release upload "${{ github.event.release.tag_name }}" cortex.tsk --clobber diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..815a0d1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +dist/ +node_modules/ +.env +*.tgz diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f47d655 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Taskade Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..6b8d085 --- /dev/null +++ b/README.md @@ -0,0 +1,169 @@ +# Cortex + +**The default starter brain for Taskade Genesis.** + +Fork this repo. Import into Taskade. Get a fully wired AI workspace in 60 seconds — 5 agents, 10 projects, 6 automations, 1 app — all connected and running. + +> Cortex is not a sample app. It is a working brain. You don't learn it. You use it. Then you make it yours. + +--- + +## What's Inside + +### Intelligence — 5 Agents + +| Agent | Role | Emoji | +|-------|------|-------| +| **Strategist** | Think in tradeoffs, answer in options | ♟ | +| **Editor** | Cut 30%, keep the nerve | ✂ | +| **Researcher** | Find primary sources, cite everything | 🔍 | +| **Critic** | Argue against whatever you just said | ⚖ | +| **Builder** | Spec it, scope it, ship it | 🛠 | + +### Memory — 10 Projects + +- **Company Context** — who you are, what you sell, how you talk +- **Decision Log** — every major call, reasoning, outcome +- **5 Playbooks** — Hiring, Launch, Pricing, Fundraise, Support +- **2 Libraries** — Mental Models & Frameworks, References +- **Welcome** — onboarding guide to Cortex itself + +### Reflexes — 6 Automations + +- **Daily Standup** — morning cron that pulls tasks and summarizes blockers +- **Decision Council** — webhook triggers 3 agents to debate and synthesize +- **Weekly Review** — Friday evening scores the week and plans the next +- **Inbox Triage** — classifies incoming messages and routes to the right agent +- **Incident Response** — assembles a team and creates a war room +- **Monday Planning** — reviews goals and seeds the week's priorities + +### Interface — 1 Genesis App + +A multi-route React SPA with dashboard, council, journal, and library views — all wired to the agents and projects above. + +--- + +## Quick Start + +### Option A: Fork and Import (recommended) + +1. **Fork** this repo +2. Go to your Taskade workspace +3. **Import** → select `cortex.tsk` (or point at your fork's URL) +4. All 5 agents, 10 projects, 6 automations, and the app appear — wired and running + +### Option B: Clone and Customize + +```bash +git clone https://github.com/taskade/cortex.git +cd cortex +npm install +``` + +Edit any JSON file under `agents/`, `projects/`, `automations/`, or `apps/`. + +```bash +npm run validate # Check structural integrity +npm run summary # Print artifact counts and IDs +npm run assemble # Build cortex.tsk bundle +``` + +Then import the generated `cortex.tsk` into Taskade. + +--- + +## Repo Layout + +``` +cortex/ +├── manifest.json Bundle metadata +├── cortex.tsk One-click import bundle (generated) +│ +├── agents/ Intelligence layer +│ ├── strategist.json +│ ├── editor.json +│ ├── researcher.json +│ ├── critic.json +│ └── builder.json +│ +├── projects/ Memory layer +│ ├── company-context.json +│ ├── decision-log.json +│ ├── playbook-*.json (5 playbooks) +│ ├── library-*.json (2 libraries) +│ └── welcome.json +│ +├── automations/ Reflexes layer +│ ├── daily-standup.json +│ ├── decision-council.json +│ ├── weekly-review.json +│ ├── inbox-triage.json +│ ├── incident-response.json +│ └── monday-planning.json +│ +├── apps/ +│ └── default.json Genesis app (React SPA, must be "default") +│ +├── examples/ Blank templates for creating new artifacts +│ ├── agent-template.json +│ ├── project-template.json +│ └── automation-template.json +│ +├── docs/ Guides +│ ├── GENESIS-101.md +│ ├── AGENT-GUIDE.md +│ ├── PROJECT-GUIDE.md +│ ├── AUTOMATION-GUIDE.md +│ ├── APP-KIT-SPEC.md +│ └── FORK-AND-CUSTOMIZE.md +│ +└── scripts/ Tooling + ├── validate.mjs + ├── summary.mjs + └── assemble.mjs +``` + +--- + +## Customization + +Every JSON file is a standalone artifact. Swap any of them: + +- **Replace an agent** — copy `examples/agent-template.json` into `agents/`, write your persona prompt, delete the old one +- **Add a project** — copy `examples/project-template.json` into `projects/`, structure your content, save +- **Modify a flow** — edit trigger/action pairs in `automations/*.json` +- **Redesign the app** — edit the FileSystemTree in `apps/cortex.json` + +See [docs/FORK-AND-CUSTOMIZE.md](docs/FORK-AND-CUSTOMIZE.md) for a step-by-step guide. + +--- + +## Scripts + +| Command | What it does | +|---------|-------------| +| `npm run validate` | Structural integrity checks on all JSON artifacts | +| `npm run summary` | Print artifact counts and IDs | +| `npm run assemble` | Build `dist/workspace.json` + `cortex.tsk` | +| `npm run ci` | Run summary + validate (used in GitHub Actions) | + +--- + +## Documentation + +- [GENESIS-101](docs/GENESIS-101.md) — What is Genesis? The 4 DNA layers +- [AGENT-GUIDE](docs/AGENT-GUIDE.md) — How to write a good agent prompt +- [PROJECT-GUIDE](docs/PROJECT-GUIDE.md) — How to structure memory projects +- [AUTOMATION-GUIDE](docs/AUTOMATION-GUIDE.md) — Triggers, actions, piece library +- [APP-KIT-SPEC](docs/APP-KIT-SPEC.md) — FileSystemTree, Parade engine, SSE +- [FORK-AND-CUSTOMIZE](docs/FORK-AND-CUSTOMIZE.md) — Step-by-step customization + +--- + +## License + +[MIT](LICENSE) + +--- + +Built by [Taskade](https://taskade.com). Fork it. Make it yours. Ship it. diff --git a/agents/01KP22WA8NVMYWZ85XHAVP0RG4.json b/agents/builder.json similarity index 85% rename from agents/01KP22WA8NVMYWZ85XHAVP0RG4.json rename to agents/builder.json index a7a7328..aaaf996 100644 --- a/agents/01KP22WA8NVMYWZ85XHAVP0RG4.json +++ b/agents/builder.json @@ -30,18 +30,5 @@ "value": "🛠" }, "type": "emoji" - }, - "variables": { - "zWQheH5BoVPriUiE": { - "id": "zWQheH5BoVPriUiE", - "rank": "V", - "type": "string" - } - }, - "addToKnowledgeProjectVariables": [ - { - "id": "zWQheH5BoVPriUiE", - "type": "agent-template-variable-input-type" - } - ] + } } \ No newline at end of file diff --git a/agents/01KP22WA8N4VKKY6WB2XX4CB0A.json b/agents/critic.json similarity index 85% rename from agents/01KP22WA8N4VKKY6WB2XX4CB0A.json rename to agents/critic.json index 02ce446..b41dde2 100644 --- a/agents/01KP22WA8N4VKKY6WB2XX4CB0A.json +++ b/agents/critic.json @@ -30,18 +30,5 @@ "value": "⚖" }, "type": "emoji" - }, - "variables": { - "zWQheH5BoVPriUiE": { - "id": "zWQheH5BoVPriUiE", - "rank": "V", - "type": "string" - } - }, - "addToKnowledgeProjectVariables": [ - { - "id": "zWQheH5BoVPriUiE", - "type": "agent-template-variable-input-type" - } - ] + } } \ No newline at end of file diff --git a/agents/01KP22WA8N1S8JDRDP55D87NX5.json b/agents/editor.json similarity index 84% rename from agents/01KP22WA8N1S8JDRDP55D87NX5.json rename to agents/editor.json index b907c64..867f3d7 100644 --- a/agents/01KP22WA8N1S8JDRDP55D87NX5.json +++ b/agents/editor.json @@ -30,18 +30,5 @@ "value": "✂" }, "type": "emoji" - }, - "variables": { - "zWQheH5BoVPriUiE": { - "id": "zWQheH5BoVPriUiE", - "rank": "V", - "type": "string" - } - }, - "addToKnowledgeProjectVariables": [ - { - "id": "zWQheH5BoVPriUiE", - "type": "agent-template-variable-input-type" - } - ] + } } \ No newline at end of file diff --git a/agents/01KP22WA8NDTKXX5K4NFZE32YC.json b/agents/researcher.json similarity index 84% rename from agents/01KP22WA8NDTKXX5K4NFZE32YC.json rename to agents/researcher.json index 1e46f95..f0219e3 100644 --- a/agents/01KP22WA8NDTKXX5K4NFZE32YC.json +++ b/agents/researcher.json @@ -30,18 +30,5 @@ "value": "🔍" }, "type": "emoji" - }, - "variables": { - "zWQheH5BoVPriUiE": { - "id": "zWQheH5BoVPriUiE", - "rank": "V", - "type": "string" - } - }, - "addToKnowledgeProjectVariables": [ - { - "id": "zWQheH5BoVPriUiE", - "type": "agent-template-variable-input-type" - } - ] + } } \ No newline at end of file diff --git a/agents/01KP22WA8NPMP922SAHDKHQS8Q.json b/agents/strategist.json similarity index 85% rename from agents/01KP22WA8NPMP922SAHDKHQS8Q.json rename to agents/strategist.json index 2f7cc42..a7eb1c6 100644 --- a/agents/01KP22WA8NPMP922SAHDKHQS8Q.json +++ b/agents/strategist.json @@ -30,18 +30,5 @@ "value": "♟" }, "type": "emoji" - }, - "variables": { - "zWQheH5BoVPriUiE": { - "id": "zWQheH5BoVPriUiE", - "rank": "V", - "type": "string" - } - }, - "addToKnowledgeProjectVariables": [ - { - "id": "zWQheH5BoVPriUiE", - "type": "agent-template-variable-input-type" - } - ] + } } \ No newline at end of file diff --git a/apps/default.json b/apps/default.json index 9a4e426..25306a3 100644 --- a/apps/default.json +++ b/apps/default.json @@ -78,7 +78,7 @@ }, "theme-bridge.ts": { "file": { - "contents": "/**\n * Listen for TASKADE_THEME_UPDATE messages from the parent Taskade editor\n * and apply CSS variable overrides to the document root in real-time.\n * Also responds to TASKADE_THEME_READ requests with current CSS variable values.\n *\n * Theme overrides are injected via a