tylor-mcp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/.aws-setup.sh +25 -0
  2. package/.claude-plugin/plugin.json +22 -0
  3. package/.mcp.json +12 -0
  4. package/AGENTS.md +93 -0
  5. package/CLAUDE.md +99 -0
  6. package/CLAUDE_PLATFORM_AWS_SETUP.md +105 -0
  7. package/LICENSE +21 -0
  8. package/README.md +146 -0
  9. package/assets/tylor_logo.png +0 -0
  10. package/assets/tylor_threads_concept.png +0 -0
  11. package/bin/tylor.js +23 -0
  12. package/hooks/kill-thread-trigger.sh +7 -0
  13. package/hooks/post-tool-use-code-index.sh +7 -0
  14. package/hooks/session-checkpoint.sh +7 -0
  15. package/hooks/session-start.sh +7 -0
  16. package/install.py +401 -0
  17. package/install.sh +260 -0
  18. package/package.json +24 -0
  19. package/pytest.ini +2 -0
  20. package/registry.json +26 -0
  21. package/server/.env.example +24 -0
  22. package/server/__init__.py +0 -0
  23. package/server/config.py +89 -0
  24. package/server/main.py +93 -0
  25. package/server/personas/analyst.md +15 -0
  26. package/server/personas/ceo.md +14 -0
  27. package/server/personas/code_agent.md +15 -0
  28. package/server/personas/cto.md +14 -0
  29. package/server/provision.py +260 -0
  30. package/server/provision_opensearch.py +154 -0
  31. package/server/requirements.txt +26 -0
  32. package/server/storage/__init__.py +0 -0
  33. package/server/storage/dynamo.py +399 -0
  34. package/server/storage/json_store.py +359 -0
  35. package/server/storage/opensearch.py +194 -0
  36. package/server/storage/s3.py +96 -0
  37. package/server/storage/tests/__init__.py +0 -0
  38. package/server/storage/tests/test_dynamo.py +452 -0
  39. package/server/storage/tests/test_json_store.py +226 -0
  40. package/server/storage/tests/test_opensearch.py +270 -0
  41. package/server/storage/tests/test_s3.py +125 -0
  42. package/server/tests/__init__.py +0 -0
  43. package/server/tests/test_install.py +606 -0
  44. package/server/tests/test_isolation.py +90 -0
  45. package/server/tests/test_ui_server.py +385 -0
  46. package/server/tests/test_ui_shader_background.py +52 -0
  47. package/server/tests/test_ui_story_6_3.py +105 -0
  48. package/server/tools/__init__.py +0 -0
  49. package/server/tools/_mcp.py +4 -0
  50. package/server/tools/agents.py +160 -0
  51. package/server/tools/ecc/__init__.py +1 -0
  52. package/server/tools/ecc/data.py +35 -0
  53. package/server/tools/ecc/diagrams.py +23 -0
  54. package/server/tools/ecc/pipeline.py +24 -0
  55. package/server/tools/ecc/presentation.py +24 -0
  56. package/server/tools/ecc/web.py +23 -0
  57. package/server/tools/executor.py +880 -0
  58. package/server/tools/harness.py +330 -0
  59. package/server/tools/help.py +162 -0
  60. package/server/tools/hooks.py +357 -0
  61. package/server/tools/personas.py +110 -0
  62. package/server/tools/registry.py +195 -0
  63. package/server/tools/router.py +117 -0
  64. package/server/tools/skill_installer.py +230 -0
  65. package/server/tools/summarizer.py +168 -0
  66. package/server/tools/tests/__init__.py +0 -0
  67. package/server/tools/tests/test_agents.py +246 -0
  68. package/server/tools/tests/test_code_index.py +108 -0
  69. package/server/tools/tests/test_ecc_tools.py +51 -0
  70. package/server/tools/tests/test_executor.py +584 -0
  71. package/server/tools/tests/test_help_agent101.py +149 -0
  72. package/server/tools/tests/test_hooks.py +124 -0
  73. package/server/tools/tests/test_kill_thread.py +125 -0
  74. package/server/tools/tests/test_new_thread_list_threads.py +293 -0
  75. package/server/tools/tests/test_personas.py +52 -0
  76. package/server/tools/tests/test_recall_memory.py +55 -0
  77. package/server/tools/tests/test_registry_client.py +308 -0
  78. package/server/tools/tests/test_router.py +263 -0
  79. package/server/tools/tests/test_skill_installer.py +174 -0
  80. package/server/tools/tests/test_switch_thread.py +163 -0
  81. package/server/tools/tests/test_thread_command_skills.py +54 -0
  82. package/server/tools/tests/test_thread_resolver.py +165 -0
  83. package/server/tools/tests/test_tier1_schema.py +296 -0
  84. package/server/tools/thread_resolver.py +75 -0
  85. package/server/tools/tylor.py +374 -0
  86. package/server/tools/ui.py +38 -0
  87. package/server/ui_server.py +292 -0
  88. package/server/validate.py +237 -0
  89. package/skills/add-skill/SKILL.md +37 -0
  90. package/skills/afk-status/SKILL.md +20 -0
  91. package/skills/bmad/SKILL.md +14 -0
  92. package/skills/help-agent101/SKILL.md +48 -0
  93. package/skills/kill-thread/SKILL.md +35 -0
  94. package/skills/list-threads/SKILL.md +35 -0
  95. package/skills/new-thread/SKILL.md +35 -0
  96. package/skills/recall/SKILL.md +39 -0
  97. package/skills/run/SKILL.md +33 -0
  98. package/skills/set-sandbox/SKILL.md +38 -0
  99. package/skills/switch-thread/SKILL.md +38 -0
  100. package/ui/claude-logo.png +0 -0
  101. package/ui/index.html +1314 -0
package/.aws-setup.sh ADDED
@@ -0,0 +1,25 @@
1
+ #!/bin/bash
2
+ # Claude Platform on AWS Setup for agent101
3
+
4
+ # AWS Credentials Configuration
5
+ # Using existing credentials in ~/.aws/credentials
6
+ export AWS_PROFILE=default
7
+ export AWS_REGION=us-east-1
8
+
9
+ # Claude Platform on AWS Configuration
10
+ export CLAUDE_CODE_USE_ANTHROPIC_AWS=1
11
+ export ANTHROPIC_AWS_WORKSPACE_ID=wrkspc_01C19h6yMnj1V4X6Uo3VUrjj
12
+ export ANTHROPIC_AWS_BASE_URL=https://aws-external-anthropic.us-east-1.api.aws
13
+
14
+ # Model versions (optional - uses latest if not set)
15
+ # export ANTHROPIC_DEFAULT_OPUS_MODEL=claude-opus-4-7
16
+ # export ANTHROPIC_DEFAULT_SONNET_MODEL=claude-sonnet-4-6
17
+ # export ANTHROPIC_DEFAULT_HAIKU_MODEL=claude-haiku-4-5
18
+
19
+ # Refresh credentials if they expire
20
+ export AWS_AUTH_REFRESH="aws sso login --profile ${AWS_PROFILE}"
21
+
22
+ echo "βœ“ Claude Platform on AWS environment configured"
23
+ echo " Workspace ID: $ANTHROPIC_AWS_WORKSPACE_ID"
24
+ echo " Region: $AWS_REGION"
25
+ echo " Auth method: AWS credentials (SigV4)"
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "tylor",
3
+ "version": "0.1.0",
4
+ "description": "Tylor β€” the tailor to your threads. Eliminates Claude session death with persistent named threads, silent code indexing, a live thread visualizer, agent personas, and AFK autonomous execution.",
5
+ "author": {
6
+ "name": "GunjanGrunge"
7
+ },
8
+ "repository": "https://github.com/GunjanGrunge/tylor",
9
+ "license": "MIT",
10
+ "keywords": [
11
+ "claude",
12
+ "claude-code",
13
+ "mcp",
14
+ "plugin",
15
+ "threads",
16
+ "memory",
17
+ "persistence",
18
+ "agents",
19
+ "session"
20
+ ],
21
+ "homepage": "https://github.com/GunjanGrunge/tylor#readme"
22
+ }
package/.mcp.json ADDED
@@ -0,0 +1,12 @@
1
+ {
2
+ "mcpServers": {
3
+ "agent101": {
4
+ "type": "stdio",
5
+ "command": "sh",
6
+ "args": [
7
+ "-c",
8
+ "_P=\"${CLAUDE_PLUGIN_ROOT:-}\"; if [ -z \"$_P\" ]; then for _D in \"$HOME/.claude/plugins/GunjanGrunge/tylor\" \"$HOME/.claude/plugins/cache/GunjanGrunge/tylor/\"[0-9]*/ \"$HOME/.claude/plugins/cache/gunjangrunge/tylor/\"[0-9]*/; do [ -f \"$_D/server/main.py\" ] && { _P=\"$_D\"; break; }; done; fi; [ -n \"$_P\" ] || { echo 'Tylor: plugin root not found' >&2; exit 1; }; _VENV=\"$HOME/.tylor/venv\"; if [ ! -f \"$_VENV/bin/python3\" ] && [ ! -f \"$_VENV/Scripts/python3.exe\" ] && [ ! -f \"$_VENV/Scripts/python.exe\" ]; then python3 -m venv \"$_VENV\" && \"$_VENV/bin/pip\" install -q -r \"$_P/server/requirements.txt\" 2>&1 | tail -2; fi; _PY=\"$_VENV/bin/python3\"; [ -f \"$_PY\" ] || _PY=\"$_VENV/Scripts/python3.exe\"; [ -f \"$_PY\" ] || _PY=\"$_VENV/Scripts/python.exe\"; cd \"$_P\" && exec \"$_PY\" -m server.main"
9
+ ]
10
+ }
11
+ }
12
+ }
package/AGENTS.md ADDED
@@ -0,0 +1,93 @@
1
+ <claude-mem-context>
2
+ # Memory Context
3
+
4
+ # [agent101] recent context, 2026-05-13 8:41pm GMT+5:30
5
+
6
+ Legend: 🎯session πŸ”΄bugfix 🟣feature πŸ”„refactor βœ…change πŸ”΅discovery βš–οΈdecision 🚨security_alert πŸ”security_note
7
+ Format: ID TIME TYPE TITLE
8
+ Fetch details: get_observations([IDs]) | Search: mem-search skill
9
+
10
+ Stats: 50 obs (17,754t read) | 464,852t work | 96% savings
11
+
12
+ ### May 12, 2026
13
+ S72 Run BMAD Implementation Readiness Check for agent101 project (May 12 at 5:08 PM)
14
+ S73 BMAD Implementation Readiness Check β€” Epic Coverage Validation Results for agent101 (May 12 at 5:12 PM)
15
+ S74 Execute /bmad-create-architecture command to design and validate complete system architecture for agent101 project with 100% feature requirement coverage. (May 12 at 5:16 PM)
16
+ S75 Story 2.6 model router 3-tier fallback β†’ Story 2.7 kill_thread async Bedrock Opus summarizer implementation (May 12 at 5:25 PM)
17
+ 251 10:02p βœ… sprint-status.yaml updated: story 2-7 moved from in-progress to review
18
+ S76 Story 2.8 implementation β€” Claude Code lifecycle hooks (SessionStart, Stop, PostToolUse) for agent101 thread management plugin (May 12 at 10:02 PM)
19
+ 252 10:33p πŸ”΅ Thread Management Epic Stories 2.9 & 2.10 Reviewed
20
+ 253 " πŸ”΅ agent101 install.sh Full Implementation Reviewed
21
+ 254 10:34p 🟣 Story 2.8 Implementation Artifact Created
22
+ 255 " βœ… Story 2.8 Sprint Status Advanced from Backlog to In-Progress
23
+ 256 " 🟣 Story 2.8 Hook Tests Written (TDD)
24
+ 257 10:35p πŸ”΅ Story 2.8 Tests Confirmed Red β€” Implementation Files Not Yet Created
25
+ 258 " 🟣 server/tools/hooks.py Implemented
26
+ 259 10:36p 🟣 Three Claude Code Hook Shell Scripts Created
27
+ 260 " 🟣 Story 2.8 Hook Tests All Green β€” Implementation Complete
28
+ 261 " πŸ”΅ Hook Shell Scripts Pass Syntax Check; Full Regression Suite Running Clean
29
+ 262 " 🟣 Full Regression Suite Passes β€” 163/163 Tests Green
30
+ 263 10:37p 🟣 Story 2.8 Complete β€” All Tasks Done, Status Advanced to Review
31
+ 264 " βœ… Sprint Status Updated β€” Story 2.8 Marked Review
32
+ S77 Story 2.9: Thread Management Slash Commands β€” implement 5 SKILL.md files for /new-thread, /switch-thread, /kill-thread, /list-threads, /recall (May 12 at 10:37 PM)
33
+ 265 10:43p πŸ”΅ Thread Management Skill Specs in epics.md
34
+ 266 " πŸ”΅ agent101 BMAD Skill Library Structure
35
+ 267 " πŸ”΅ agent101 Architecture: Two-Tier MCP Tool System with Sprint Status
36
+ 268 10:44p βœ… Story 2.9 Implementation Artifact Created, Sprint Status Set to In-Progress
37
+ 269 " 🟣 Test Suite Created for Story 2.9 Thread Command Skill Files
38
+ 270 " πŸ”΅ TDD Red Phase Confirmed: All 5 Thread Command SKILL.md Files Missing
39
+ 271 10:45p 🟣 All 5 Thread Management SKILL.md Files Created
40
+ 272 " πŸ”΄ One Test Failing: Case-Sensitivity Mismatch on "recovery" Phrase Check
41
+ 273 " πŸ”΄ All 5 Story 2.9 Tests Pass: "recovery" Phrase Added to All SKILL.md Error Sections
42
+ 274 " 🟣 Full Regression Suite Green: 56 Tests Pass After Story 2.9
43
+ 275 " 🟣 Story 2.9 Complete: Full Server Test Suite 168/168 Passing
44
+ 276 10:46p βœ… Story 2.9 Moved to Review Status with Full Completion Record
45
+ 277 " βœ… Sprint Status YAML Confirmed: Story 2.9 at "review"
46
+ S78 Code review of Story 2.9: Thread Management Slash Commands using bmad-code-review skill (May 12 at 10:47 PM)
47
+ 278 10:56p πŸ”΅ bmad-code-review Skill Architecture Revealed
48
+ 279 " πŸ”΅ bmad-code-review Workflow Config: Minimal Customization Active
49
+ 280 " πŸ”΅ bmad-code-review Step-01: 5-Tier Review Target Resolution Cascade
50
+ 281 10:57p 🟣 Story 2.9: Thread Management Slash Commands Implemented
51
+ 282 " πŸ”΅ agent101 Architecture: WebSocket UI, Lifecycle Hooks, and Thread Visualizer
52
+ 283 " πŸ”΅ /recall Skill Depends on OpenSearch and Bedrock for Semantic Memory
53
+ 284 " πŸ”΅ bmad-code-review Step-02: Parallel Adversarial Review Layer Architecture
54
+ S79 Code review of Story 2.9 (Thread Management Slash Commands) β€” one bug found and fixed (May 12 at 10:58 PM)
55
+ 285 11:00p πŸ”΄ Fixed /kill-thread Misleading Confirmation Wording
56
+ 286 " πŸ”΄ kill-thread Fix Verified: 5/5 Tests Pass After Wording Change
57
+ S80 Implementation and completion of Story 2.10 (Fuzzy Thread Name Matching) following Story 2.9 code review (May 12 at 11:00 PM)
58
+ 287 11:01p πŸ”΅ Story 2.10: Fuzzy Thread Name Matching β€” Next Sprint Story
59
+ 288 " πŸ”΅ tylor.py MCP Tool Implementations and Story 2.10 Gap Confirmed
60
+ 289 11:02p βœ… Story 2.10 Implementation Artifact Created, Sprint Status Set to In-Progress
61
+ 290 " 🟣 Story 2.10: Thread Resolver Tests Written (TDD RED Phase)
62
+ 291 11:03p πŸ”΅ Story 2.10 TDD RED Confirmed: 5 Failures, MCP Error Code Verified
63
+ 292 " 🟣 server/tools/thread_resolver.py Implemented
64
+ 293 " 🟣 switch_thread_by_name MCP Tool Wired into tylor.py
65
+ 294 " 🟣 Story 2.10 TDD GREEN: All 5 Resolver Tests Pass
66
+ 295 11:04p βœ… test_tier1_schema.py Updated to Include switch_thread_by_name
67
+ 296 " βœ… skills/switch-thread/SKILL.md Updated for Fuzzy Query Flow
68
+ 297 " 🟣 Story 2.10 Complete: Full Regression Suite Passes at 174 Tests
69
+ 298 11:05p βœ… Story 2.10 Implementation Artifact Finalized, Status Set to Review
70
+ ### May 13, 2026
71
+ 299 10:46a 🟣 Story 4.1 ECC Tool Modules β€” Artifact Created and RED Tests Written
72
+ 300 " πŸ”΅ agent101 Project Sprint Status Snapshot
73
+ S81 Continue with next story β€” Story 4.1: ECC Tool Modules Initial 5 Categories (Epic 4, agent101 project) (May 13 at 10:48 AM)
74
+ **Investigated**: Sprint status YAML and backlog to determine next story; Story 4.1 acceptance criteria for ECC lazy-loadable tool categories; existing registry.py stub; FastMCP tool registration patterns; McpError/INVALID_PARAMS error handling conventions already used in the codebase.
75
+
76
+ **Learned**: - ECC tool categories (ecc/web, ecc/data, ecc/presentation, ecc/diagrams, ecc/pipeline) are implemented as importlib-loaded Python modules under server/tools/ecc/, each registering tools via @mcp.tool() on the shared mcp singleton.
77
+ - load_skill_tools() validates category keys against ECC_GROUPS dict, raises McpError(ErrorData(INVALID_PARAMS, ...)) for unknown groups, then calls importlib.import_module() and returns {tool_group, status: "loaded", tools: sorted(list)}.
78
+ - list_registry() remains a ToolError stub, deferred to Story 4.2.
79
+ - sprint-status.yaml reads were showing a cached "backlog" value (Chunk ID: 1376f9) even after successful patches β€” a tool-level read cache artifact; actual disk file was correctly updated.
80
+
81
+ **Completed**: - Created story artifact: _bmad-output/implementation-artifacts/4-1-ecc-tool-modules-initial-5-categories.md
82
+ - Updated sprint-status.yaml: epic-4 and 4-1-ecc-tool-modules-initial-5-categories both moved from backlog β†’ in-progress β†’ review
83
+ - Created server/tools/ecc/__init__.py, web.py, data.py, presentation.py, diagrams.py, pipeline.py with lightweight MCP-registered tool stubs
84
+ - Updated server/tools/registry.py: replaced ToolError stub with real ECC_GROUPS dispatch + importlib loading
85
+ - Created server/tools/tests/test_ecc_tools.py: 6 tests (5 parametrized group loads + 1 unknown category error)
86
+ - TDD RED→GREEN complete: all 6 ECC tests pass; full suite 201/201 pass
87
+ - Story artifact updated with completion notes, file list, dev log, all tasks checked, status set to review
88
+
89
+ **Next Steps**: Story 4.1 is fully complete and in review. Next story is Story 4.2: Two-Tier Tool Manifest and Skill Registry Client β€” implementing list_registry() with registry.json reading and expanding load_skill_tools() for external skill groups beyond the hardcoded ECC_GROUPS.
90
+
91
+
92
+ Access 465k tokens of past work via get_observations([IDs]) or mem-search skill.
93
+ </claude-mem-context>
package/CLAUDE.md ADDED
@@ -0,0 +1,99 @@
1
+ # agent101 β€” Claude Code Plugin (TYLOR Thread Manager)
2
+
3
+ ## Project Overview
4
+
5
+ agent101 is a Claude Code plugin β€” Personal Cognitive Infrastructure β€” that eliminates session death by giving Claude persistent, isolated, named context scopes called **threads**. Built as a FastMCP Python server with a local Thread Visualizer UI.
6
+
7
+ ## Architecture
8
+
9
+ ```
10
+ Claude Code (terminal)
11
+ └── FastMCP server (server/main.py, stdio transport)
12
+ β”œβ”€β”€ Tier 1 tools: new_thread, switch_thread, kill_thread, list_threads, recall_memory
13
+ β”œβ”€β”€ Tier 2 tools (lazy): ECC skill modules (ecc/*/tools.py)
14
+ β”œβ”€β”€ aiohttp UI server (localhost:8765) β€” Thread Visualizer
15
+ └── Storage: DynamoDB single-table (Personal) or local JSON (Project mode)
16
+
17
+ Claude Code hooks (hooks/)
18
+ β”œβ”€β”€ session-start.sh β†’ surfaces active thread context on session open
19
+ β”œβ”€β”€ session-checkpoint.sh β†’ checkpoints thread state on Stop
20
+ └── kill-thread-trigger.sh β†’ dispatches Bedrock Opus summarization on KillThread
21
+
22
+ Thread Visualizer (ui/)
23
+ └── D3.js force graph, glassmorphism bubbles, silk SVG bezier curves, Vanta.js bg
24
+ ```
25
+
26
+ ## Directory Structure
27
+
28
+ ```
29
+ agent101/
30
+ β”œβ”€β”€ server/ # FastMCP Python server
31
+ β”‚ β”œβ”€β”€ main.py # Entry point β€” co-starts FastMCP + aiohttp
32
+ β”‚ β”œβ”€β”€ config.py # pydantic-settings (reads .env)
33
+ β”‚ β”œβ”€β”€ ui_server.py # aiohttp web server (localhost:8765)
34
+ β”‚ β”œβ”€β”€ tools/ # MCP tool modules
35
+ β”‚ β”‚ β”œβ”€β”€ tylor.py # Thread lifecycle tools (new/switch/kill/recall/list)
36
+ β”‚ β”‚ β”œβ”€β”€ ui.py # open_threads_ui tool
37
+ β”‚ β”‚ β”œβ”€β”€ agents.py # spawn_agent, list_personas
38
+ β”‚ β”‚ β”œβ”€β”€ registry.py # load_skill_tools, list_registry
39
+ β”‚ β”‚ β”œβ”€β”€ executor.py # sandboxed bash execution
40
+ β”‚ β”‚ └── router.py # 3-tier model router
41
+ β”‚ β”œβ”€β”€ storage/ # Storage clients
42
+ β”‚ β”‚ β”œβ”€β”€ dynamo.py # DynamoDB single-table client
43
+ β”‚ β”‚ β”œβ”€β”€ json_store.py # Project JSON mode (zero-infra)
44
+ β”‚ β”‚ β”œβ”€β”€ s3.py # S3 blob storage (>400KB)
45
+ β”‚ β”‚ └── opensearch.py # Vector search (Titan Embeddings v2)
46
+ β”‚ └── personas/ # Agent persona definitions
47
+ β”œβ”€β”€ ui/ # Thread Visualizer (served by aiohttp)
48
+ β”‚ └── index.html # D3.js force graph + WebSocket client
49
+ β”œβ”€β”€ hooks/ # Claude Code lifecycle hook scripts
50
+ β”œβ”€β”€ skills/ # Claude Code slash commands
51
+ β”‚ β”œβ”€β”€ new-thread/
52
+ β”‚ β”œβ”€β”€ switch-thread/
53
+ β”‚ β”œβ”€β”€ kill-thread/
54
+ β”‚ β”œβ”€β”€ list-threads/
55
+ β”‚ β”œβ”€β”€ recall/
56
+ β”‚ β”œβ”€β”€ add-skill/
57
+ β”‚ └── help-agent101/
58
+ β”œβ”€β”€ ecc/ # ECC tool modules (lazy-loaded Tier 2)
59
+ β”‚ β”œβ”€β”€ web/, data/, presentation/, diagrams/, pipeline/
60
+ β”œβ”€β”€ install.sh # One-command install
61
+ β”œβ”€β”€ registry.json # Installed skill index
62
+ └── pytest.ini # Test config (asyncio_mode = auto)
63
+ ```
64
+
65
+ ## Starting the Server
66
+
67
+ ```bash
68
+ cd server
69
+ python3 -m venv .venv && source .venv/bin/activate
70
+ pip install -r requirements.txt
71
+ python3 -m server.main # starts FastMCP on stdio + aiohttp on :8765
72
+ ```
73
+
74
+ ## Environment Setup
75
+
76
+ Copy `.env` to `server/.env`. Required keys:
77
+ - `AWS_REGION`, `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`
78
+ - `DYNAMO_TABLE` (default: agent101)
79
+ - `OPENSEARCH_HOST`, `OPENSEARCH_PORT`
80
+ - `BEDROCK_REGION` (default: us-east-1)
81
+
82
+ ## Storage Modes
83
+
84
+ - **Project mode** (default): threads stored at `{cwd}/.agent101/threads.json` β€” zero AWS required
85
+ - **Personal mode**: DynamoDB-backed, cross-project, cross-machine
86
+
87
+ ## Key Conventions
88
+
89
+ - All MCP tools use explicit `thread_id` parameter β€” never hidden server-side state
90
+ - All errors raised as `McpError` β€” never return error dicts
91
+ - DynamoDB items include mandatory fields: `PK`, `SK`, `CreatedAt`, `UpdatedAt`, `Version`
92
+ - MCP tool names: `verb_noun` snake_case β€” immutable once registered
93
+ - Status colors in UI: cyan=active, amber=awaiting, purple=running, dim=idle
94
+
95
+ ## Running Tests
96
+
97
+ ```bash
98
+ python3 -m pytest server/tests/ -v
99
+ ```
@@ -0,0 +1,105 @@
1
+ # Claude Platform on AWS Setup Guide
2
+
3
+ You've successfully configured agent101 to use Claude Platform on AWS. Here's what was set up:
4
+
5
+ ## βœ“ Completed Setup
6
+
7
+ ### 1. AWS Credentials
8
+ - **Status**: Active βœ“
9
+ - **Profile**: `default` (from `~/.aws/credentials`)
10
+ - **User**: `bedrock_agent` in account `751289209169`
11
+ - **Region**: `us-east-1`
12
+
13
+ ### 2. Environment Variables Configured
14
+
15
+ Added to `server/.env`:
16
+ ```bash
17
+ CLAUDE_CODE_USE_ANTHROPIC_AWS=1
18
+ ANTHROPIC_AWS_WORKSPACE_ID=wrkspc_01C19h6yMnj1V4X6Uo3VUrjj
19
+ ANTHROPIC_AWS_BASE_URL=https://aws-external-anthropic.us-east-1.api.aws
20
+ AWS_PROFILE=default
21
+ AWS_REGION=us-east-1
22
+ ```
23
+
24
+ ### 3. Authentication Method
25
+ - **Type**: AWS SigV4 (recommended for teams)
26
+ - **Credentials location**: `~/.aws/credentials`
27
+ - **Workspace**: `wrkspc_01C19h6yMnj1V4X6Uo3VUrjj`
28
+
29
+ ## πŸš€ Next Steps
30
+
31
+ ### Option A: Run Claude Code CLI with AWS
32
+
33
+ ```bash
34
+ # 1. Source the setup script
35
+ source .aws-setup.sh
36
+
37
+ # 2. Verify Claude Code can see AWS
38
+ code /status
39
+
40
+ # 3. Start your project
41
+ code "your question here"
42
+ ```
43
+
44
+ ### Option B: Run agent101 FastMCP Server
45
+
46
+ ```bash
47
+ # 1. Navigate to server directory
48
+ cd server
49
+
50
+ # 2. Load AWS environment
51
+ source ../.aws-setup.sh
52
+
53
+ # 3. Install dependencies (if not already done)
54
+ python3 -m venv .venv
55
+ source .venv/bin/activate
56
+ pip install -r requirements.txt
57
+
58
+ # 4. Start the FastMCP server
59
+ python3 -m server.main
60
+ ```
61
+
62
+ ### Option C: Use Agent SDK
63
+
64
+ Your FastMCP server can now use Claude Platform on AWS by reading these environment variables:
65
+
66
+ ```python
67
+ import os
68
+ from anthropic import Anthropic
69
+
70
+ # These are automatically read from .env
71
+ client = Anthropic(
72
+ api_key=os.getenv("ANTHROPIC_AWS_API_KEY") or None, # Falls back to AWS SigV4
73
+ base_url="https://aws-external-anthropic.us-east-1.api.aws"
74
+ )
75
+ ```
76
+
77
+ ## πŸ“‹ Troubleshooting
78
+
79
+ ### If you see "403 Forbidden" or "AccessDenied"
80
+ - Check IAM permissions for your user in AWS Console
81
+ - Verify role has `aws-external-anthropic:InvokeModel` permission
82
+ - Check that workspace ID is correct
83
+
84
+ ### If Claude Code is still hitting `api.anthropic.com`
85
+ - Verify `CLAUDE_CODE_USE_ANTHROPIC_AWS=1` is set (not 0 or blank)
86
+ - Check that `CLAUDE_CODE_USE_BEDROCK` and `CLAUDE_CODE_USE_FOUNDRY` are not set
87
+ - Run `code /status` to confirm resolved provider
88
+
89
+ ### If credentials expire
90
+ - Re-run the setup script or manually re-export variables
91
+ - Credentials from `~/.aws/credentials` should work without refresh needed
92
+
93
+ ## πŸ“š Additional Resources
94
+
95
+ - [Claude Platform on AWS docs](https://platform.claude.com/docs/en/build-with-claude/claude-platform-on-aws)
96
+ - [IAM action reference](https://platform.claude.com/docs/en/api/claude-platform-on-aws-iam-actions)
97
+ - [Claude models overview](https://platform.claude.com/docs/en/about-claude/models/overview)
98
+ - [Prompt caching](https://platform.claude.com/docs/en/build-with-claude/prompt-caching)
99
+
100
+ ## πŸ” Security Notes
101
+
102
+ - Your API key is in `server/.env` (Git ignored)
103
+ - AWS credentials come from `~/.aws/credentials`
104
+ - Keep workspace ID confidential
105
+ - Rotate API keys periodically if using that method instead of SigV4
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Gunjan Sarkar
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,146 @@
1
+ <div align="center">
2
+ <img src="assets/tylor_logo.png" alt="Tylor Logo" width="150">
3
+ <h1>Tylor</h1>
4
+ <p><strong>The Tailor to Your Threads</strong></p>
5
+ <p><em>Give Claude Code persistent memory, laser-focused context, and an autonomous team of specialists.</em></p>
6
+
7
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
8
+ [![Platform: Windows | macOS | Linux | WSL](https://img.shields.io/badge/Platform-Cross--Platform-success)](#)
9
+ [![Claude Code](https://img.shields.io/badge/Integration-Claude_Code-orange)](#)
10
+ [![GitHub Copilot](https://img.shields.io/badge/Integration-GitHub_Copilot-blue)](#)
11
+ [![Antigravity](https://img.shields.io/badge/Integration-Antigravity-blueviolet)](#)
12
+ </div>
13
+
14
+ ---
15
+
16
+ Tylor transforms your Claude Code experience from a single-shot terminal interaction into a **persistent, intelligent workspace**.
17
+
18
+ Every time you open Claude Code, you normally start from zero. Tylor fixes that. It organizes your work into **threads**β€”isolated, named workspaces that survive restarts and reboots. It remembers every decision, every line of code, and every discussion, so you never have to repeat yourself.
19
+
20
+ **No database. No cloud account. No configuration. Just install and go.**
21
+
22
+ ---
23
+
24
+ ## 🎨 How It Works
25
+
26
+ <div align="center">
27
+ <img src="assets/tylor_threads_concept.png" alt="Tylor Threads Architecture" width="800">
28
+ <p><em>Tylor weaves parallel, persistent memory threads and orchestrates specialist sub-agents.</em></p>
29
+ </div>
30
+
31
+ ---
32
+
33
+ ## ✨ Features
34
+
35
+ ### 🧠 Persistent Memory
36
+ Tylor completely eliminates the "context reset." Shut down your computer, close your terminal, and come back a week laterβ€”Claude will pick up exactly where you left off.
37
+
38
+ ### πŸ—‚οΈ Context Isolation (Threads)
39
+ Work in parallel without context bleed. Discuss frontend components in a `Frontend` thread and database schemas in a `Backend` thread. By isolating context, token usage stays low, and Claude's focus stays incredibly sharp.
40
+
41
+ ### πŸ€– Intelligent Orchestration
42
+ You don't need to micromanage. Claude acts as the orchestrator. If you ask it to review architecture, it will dynamically load its `cto` persona. If you ask it to write a PRD, it natively invokes the `bmad` skill framework to get the job done.
43
+
44
+ ### πŸ”Œ Infinite Extensibility (Lazy-Loading)
45
+ Tylor is built on a production-hardened ADK-pattern harness. You can register hundreds of domain-specific ECC skills (like `ecc/web`, `ecc/data`) via the `/add-skill` command. Tylor **lazy-loads** only the tools required for the current prompt, giving you massive capability scaling without ever blowing up Claude's token context window.
46
+
47
+ ### πŸ—οΈ Autonomous AFK Sandboxing
48
+ Declare a sandbox for your thread and let Claude work autonomously. Assign large, complex tasks and let Claude execute them while you step away from the keyboard.
49
+
50
+ ### πŸ“Š Visual Dashboard
51
+ Monitor your entire workspace through a beautiful, locally hosted web UI. Track active threads, review past conversations, and watch autonomous agent progress in real-time.
52
+
53
+ ---
54
+
55
+ ## πŸš€ Installation
56
+
57
+ Tylor installs seamlessly into your Claude Code, Claude Desktop, GitHub Copilot, Antigravity, or VSCode Claude extension environment. Requires Python 3.8+.
58
+
59
+ ### ⚑ Option 1: The One-Line Installer (Recommended)
60
+
61
+ If you have Node.js installed, you can configure Tylor instantly across all your clients without manually cloning the repository. Simply run:
62
+
63
+ ```bash
64
+ npx tylor-mcp
65
+ ```
66
+
67
+ ### πŸ’» Option 2: Manual Git Clone
68
+
69
+ **macOS / Linux / WSL:**
70
+ ```bash
71
+ git clone https://github.com/GunjanGrunge/tylor ~/.claude/plugins/GunjanGrunge/tylor
72
+ python3 ~/.claude/plugins/GunjanGrunge/tylor/install.py
73
+ ```
74
+
75
+ **Windows:**
76
+ ```powershell
77
+ git clone https://github.com/GunjanGrunge/tylor %USERPROFILE%\.claude\plugins\GunjanGrunge\tylor
78
+ python %USERPROFILE%\.claude\plugins\GunjanGrunge\tylor\install.py
79
+ ```
80
+
81
+ ### Step 3: Verify
82
+
83
+ 1. Restart your Claude, GitHub Copilot, or Antigravity client completely (close the terminal/app and reopen it).
84
+ 2. Type `/help-agent101` in your prompt (or use Copilot Chat / `/mcp show`).
85
+ 3. If you see the capability index, Tylor is fully operational!
86
+
87
+ ---
88
+
89
+ ## πŸ•ΉοΈ Quick Start
90
+
91
+ Creating your first persistent workflow is incredibly simple:
92
+
93
+ ```text
94
+ /new-thread Authentication ← Create a persistent workspace
95
+ /run we need to implement JWT based authentication
96
+
97
+ /new-thread Dashboard UI ← Create an isolated UI thread
98
+ /run build a react dashboard with a sidebar
99
+
100
+ /switch-thread Authentication ← Instantly switch context back to Auth
101
+ /run add refresh token logic
102
+
103
+ /list-threads ← View your workspace status
104
+ /open-threads-ui ← Launch the visual dashboard
105
+ ```
106
+
107
+ ---
108
+
109
+ ## πŸ› οΈ Command Reference
110
+
111
+ Tylor exposes a suite of powerful commands directly within Claude:
112
+
113
+ | Command | Description |
114
+ |---|---|
115
+ | `/new-thread <name>` | Create a named thread and seamlessly switch future work into it. |
116
+ | `/switch-thread <name>` | Switch context to an existing thread (fuzzy matching supported). |
117
+ | `/list-threads` | Show all available threads alongside their status and activity. |
118
+ | `/kill-thread <name>` | Close a thread and dispatch asynchronous summarization. |
119
+ | `/recall` | Search through the deep semantic memory of your active thread. |
120
+ | `/add-skill` | Install a new skill package dynamically. |
121
+ | `/open-threads-ui` | Open the live, local thread visualizer UI in your browser. |
122
+ | `/set-sandbox <path>` | Declare specific filesystem roots for secure, autonomous execution. |
123
+ | `/afk-status` | Get real-time progress reports on current autonomous background tasks. |
124
+
125
+ > **Pro Tip:** You can also use shorthand aliases like `CT <name>` to create a thread or `SwThread <name>` to switch.
126
+
127
+ ---
128
+
129
+ ## 🎭 Sub-Agents & Personas
130
+
131
+ Tylor comes pre-equipped with specialist sub-agents. Claude will **automatically invoke** these personas based on the nature of your queryβ€”no manual intervention required.
132
+
133
+ * **`cto`**: System architecture, tradeoffs, platform strategy, and engineering standards.
134
+ * **`code_agent`**: Senior software engineer laser-focused on shipping robust code and tests.
135
+ * **`analyst`**: Market research, data synthesis, and technical decision support.
136
+ * **`ceo`**: Product strategy, roadmap prioritization, and stakeholder framing.
137
+
138
+ ---
139
+
140
+ ## πŸ“„ License
141
+
142
+ This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.
143
+
144
+ <div align="center">
145
+ <p><em>Tylor β€” Tailoring the future of AI development.</em></p>
146
+ </div>
Binary file
Binary file
package/bin/tylor.js ADDED
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env node
2
+ const { spawnSync } = require('child_process');
3
+ const path = require('path');
4
+
5
+ const installPy = path.join(__dirname, '..', 'install.py');
6
+ const args = process.argv.slice(2);
7
+
8
+ console.log("πŸ‘” Running Tylor Installer...");
9
+
10
+ // Try `python` first (standard on Windows and some Unix systems)
11
+ let result = spawnSync('python', [installPy, ...args], { stdio: 'inherit' });
12
+
13
+ // Fallback to `python3` if `python` fails (standard on macOS/Linux)
14
+ if (result.error || result.status !== 0) {
15
+ result = spawnSync('python3', [installPy, ...args], { stdio: 'inherit' });
16
+
17
+ if (result.error) {
18
+ console.error("❌ Failed to launch the Tylor installer. Please ensure Python 3.8+ is installed on your system.");
19
+ process.exit(1);
20
+ }
21
+ }
22
+
23
+ process.exit(result.status);
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ PLUGIN_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
5
+ cd "$PLUGIN_DIR"
6
+
7
+ exec python3 -m server.tools.hooks kill-thread-trigger "$@"
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ PLUGIN_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
5
+ cd "$PLUGIN_DIR"
6
+
7
+ exec python3 -m server.tools.hooks post-tool-use-code-index
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ PLUGIN_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
5
+ cd "$PLUGIN_DIR"
6
+
7
+ exec python3 -m server.tools.hooks session-checkpoint
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ PLUGIN_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
5
+ cd "$PLUGIN_DIR"
6
+
7
+ exec python3 -m server.tools.hooks session-start