Specorator

by Luis Mendez
5
4
3
2
1
Score: 57/100
Trending Plugin

Description

Spec-driven agent workspace for Obsidian — plan in Markdown, run provider-native agents, review with evidence.

Reviews

No reviews yet.

Stats

1
stars
244
downloads
0
forks
76
days
49
days
53
days
342
total PRs
3
open PRs
59
closed PRs
280
merged PRs
175
total issues
0
open issues
175
closed issues
886
commits

Latest Version

2 months ago

Changelog

What's Changed

  • chore(release): 1.3.0
  • fix(skills): generation-guard the aggregator against stale in-flight fetches
  • fix(skills): emit vaultSkill.changed after the forced catalog refresh
  • fix(library): handle reload rejection in the Skills panel event path
  • fix(skills): preserve hydrated entries when revalidation fails
  • fix(library): live-refresh the Skills panel on vaultSkill.changed
  • fix(skills): revalidate the persisted skill index on hydrate
  • refactor(cursor): extract prompt-ownership primitive + consolidate the shared ACP relay
  • Recover ACP file path from a diff content block (Cursor edits)
  • fix(cursor): re-fetch the ACP connection in the session auth-retry paths
  • Apply ACP location path seed at emit so a changed location wins
  • refactor(cursor): extract session coordinator from CursorChatRuntime
  • Address review: correctable prose names, location-only re-emit, complexity
  • Surface tool-call file paths for ACP providers (Opencode, Cursor)
  • refactor(chat): delete dead askUserQuestionRenderer, clearing the last critical
  • refactor(cursor): extract model-application collaborator from CursorChatRuntime
  • refactor(library): split the critical AgentsPanel card into child components
  • refactor(marketplace): extract skill-install panel from MarketplaceDetail
  • refactor(chat): split ToolContentLines critical template into children
  • refactor(tasks): share the note-frontmatter header across note stores
  • refactor(cursor): decompose CursorChatRuntime.query below critical
  • style(chat): compact hydration helpers to hold the LOC ratchet
  • refactor(tasks,chat): extract two critical-complexity run/hydration helpers
  • refactor(tools): lift shared tool-input normalization into core
  • refactor(cursor): extract deleteConversationSession cleanup helpers
  • fix(chat): keep model-selector template under the complexity ratchet
  • a11y(chat): restore keyboard access + ARIA on the model selector trigger
  • fix(chat): render composer model selector as plain text, not a button
  • docs(claude): correct plugin-toggle refresh comment (aggregator, not mounted Library)
  • refactor(chat): extract the bound-agent query-options builder from InputController
  • refactor(claude): drop effective-source discovery gate for plugins (simplify)
  • fix(chat): render the attached-context card for providers with empty persistedContent
  • refactor(chat): extract the instruction-refine flow out of InputController
  • fix(claude): injective plugin-skill ids + load manifest paths that are skill dirs
  • fix(claude): trust effective plugin list in skill scan; surface masked toggles; document staleness
  • fix(chat): keep InputController within its LOC ceiling after the context-card fix
  • fix(chat): refresh the user message identity so attached-context cards render on send
  • fix(claude): correct effective-enable precedence + read local settings
  • build(deps): bump fallow ^2.91.0 -> ^3.7.1
  • build(deps): bump pinia ^3.0.4 -> ^4.0.2
  • fix(claude): gate plugin discovery on effective setting sources + honor manifest skill paths
  • build(deps): bump eslint-plugin-simple-import-sort ^12.1.1 -> ^14.0.0
  • build(deps): bump @types/node ^25.5.2 -> ^26.1.1
  • build(deps): refresh within-range dependencies + npm audit fix
  • build(deps): upgrade eslint-plugin-obsidianmd 0.3.0 -> 0.4.1, enable prefer-create-el
  • feat(claude): discover and invoke skills from installed plugins
  • fix(obsidian): apply the createEl div/span shorthand the validator flags
  • marketplace: re-check the user-scope install capability at write time
  • marketplace: NFC-normalize skill file paths before the collision check
  • marketplace: reject case-insensitive file collisions and roll back a truncated marker
  • marketplace: snapshot the install source at enqueue, not after the queued wait
  • marketplace: key the skill install queue by destination folder, not item id
  • marketplace: validate the skill marker name with the strict provider slug rule
  • marketplace: serialize concurrent installs of the same skill+target
  • marketplace: re-verify a skill's marker at install to guard against catalog drift
  • marketplace: don't delete a concurrent peer's completed install on rollback
  • marketplace: cap SKILL.md size, count it toward the limit, restore ratchet
  • marketplace: enforce the skill file-count cap at parse time
  • marketplace: clean up a partial skill folder after a write failure
  • marketplace: stop peer fetch workers after the first failure
  • marketplace: bound multi-file skill downloads
  • marketplace: percent-encode URL-significant chars in skill file paths
  • marketplace: reject file/directory path collisions in a skill's files[]
  • marketplace: reject superscript Windows device names in skill paths
  • docs: add two more items to the skill-install hardening backlog
  • docs: track marketplace skill-install hardening backlog
  • chore(quality): lock reduced-duplication baseline after cursor extractions
  • Remove the project-setup skill (now maintained in the marketplace repo)
  • refactor(cursor): extract the ready-state observable from CursorChatRuntime
  • refactor(cursor): extract the ACP capture sink from CursorChatRuntime
  • ci: enumerate skill test files explicitly (Node floor lacks --test globs)
  • chore(loc): lock CursorChatRuntime LOC baseline after extractions
  • types: collapse user-scope skill hook docs to satisfy the LOC ratchet
  • refactor(cursor): extract model-selection resolution from CursorChatRuntime
  • ci: gate the project-setup skill test suite
  • refactor(cursor): extract turn-race helpers from CursorChatRuntime
  • marketplace: split user-scope skill resolve vs install (fix Codex WSL run-path regression)
  • refactor(cursor): extract error classification from CursorChatRuntime
  • marketplace: disable Codex user-scope skills in WSL
  • project-setup: gate the Yarn PnP install artifact to yarn only
  • review fixes: Yarn PnP install detection + reactive skill scope options
  • fix(providers): consume cleanup-chain rejections in race helpers
  • marketplace: hide User skill scope where the provider won't resolve it
  • fix(quality): resolve plugin-review lint findings
  • project-setup skill: two more review fixes (fresh detection, CI branch)
  • project-setup skill: fix four bootstrapping edge-case bugs
  • marketplace: reject control characters in skill path segments
  • marketplace: reject Windows-invalid segments in skill file paths
  • marketplace: reject Windows-reserved skill folder names
  • marketplace: validate skill file suffixes, reject empty path segments
  • marketplace: reject malformed skills (bad marker path, empty body)
  • Marketplace skills: re-check the network opt-in per supporting-file fetch (review)
  • Marketplace skills: recheck detail target on external skill change (review)
  • Marketplace skills: reject a skill whose declared files are unsafe (review)
  • Marketplace skills: snapshot the source for the whole install (review)
  • Marketplace skills: preflight the target before fetching the folder (review)
  • Marketplace skills: content-based binary detection in the fetch path (review)
  • Marketplace skills: refuse binary files (text-only), plugin side (review)
  • Marketplace skills: validate SKILL.md before writing the install marker (review)
  • Marketplace skills: slugify install folder + guard pre-existing dirs (review)
  • Marketplace skills: reject slashed names + invalidate caches on install (review)
  • Marketplace skills: fix install-folder dedup + live-sync gap (review)
  • Marketplace: install skills with a provider + scope chooser
  • fix(quickActions): carry attached images into quick-action + skill runs too
  • fix(marketplace): treat a whitespace-only search as empty for Home routing
  • fix(marketplace): fall a deep-linked category back to Home on hard load failure
  • fix(quickActions): carry attached files/folders into quick-action + skill runs
  • fix(marketplace): restore keyboard focus after a "See all" jump
  • Marketplace: category nav is a navigation landmark, not an ARIA tablist
  • Marketplace: fall a deep-link back to Home for a valid empty catalog
  • Marketplace: announce the initial catalog load to screen readers
  • Marketplace: focus + scroll-reset the detail view on open (a11y)
  • Marketplace: scope deep-link to the revealed leaf; popout-safe card selection
  • Marketplace: dedupe overlapping preview fetches; empty deep-link → Home
  • Library: contextual "Browse Marketplace" link that deep-links by tab
  • Marketplace: sort Home sections, keep toolbar during load, responsive grid
  • Marketplace: repaint card/detail icon reactively on metadata change
  • Tests: gate src/shared/vue coverage in the Vitest lane, not Jest
  • Docs: document the marketplace storefront UX
  • Marketplace: share the Lucide helper and hoist shared card atoms
  • Enforce eslint 10's Node range for the generic default apply
  • Marketplace: orchestrate storefront nav, home, grid, and detail
  • Marketplace: storefront nav, home, grid, and detail components
  • Marketplace: vertical storefront card that opens the detail view
  • Document the ≥22 host floor, pin test node, gate CLAUDE.md release prose
  • Marketplace: storefront view type, icon map, and i18n keys
  • Docs: marketplace storefront UX implementation plan
  • Docs: marketplace storefront UX design spec
  • Add the 1.5.7 vault-API floor; warn on stale ci.yml / release.md at opt-out
  • Reject Node 23 for Obsidian applies (jsdom's supported-range hole)
  • Warn that the generated dependabot.yml remains on GitHub opt-out
  • Generalize the Node floor to fallow, freeze plugin identity, refresh release.yml
  • Reject an unsupported host Node before the Obsidian scaffold mutates
  • Ignore src/styles.css in fallow so the base stylesheet isn't flagged unused
  • Notice on new PRDs added since last apply + ignore nano-staged in fallow
  • project-setup: cover .mts/.cts in the staged glob; narrow the pre-commit force
  • project-setup: reconcile pre-commit task on lint toggle; warn stale release.yml
  • project-setup: freeze the vue/mobile variant; force-refresh verify on re-apply
  • project-setup: guard sync-version git-add; gate /release on GitHub integration
  • project-setup: reject a minAppVersion below the Vue view's API floor
  • project-setup: key hook reconciliation on prior-run state; reject digit-lead id
  • Docs: reconcile marketplace docs with the shipped PR #494 feature
  • project-setup: reject marketplace-invalid manifest answers with guidance
  • project-setup: notice stale .fallowrc.json / .npmrc kept by skip-if-exists
  • project-setup: reconcile engine-owned Claude hooks on re-apply
  • Marketplace: refresh installed state on reuse-mount; blank-folder read guard
  • Marketplace: react to Settings-tab changes via a settings-changed event
  • project-setup: stop fallow flagging framework-called samples + the JSON peer
  • Marketplace: commit-source installs, load empty catalogs, reject empty-slug names
  • project-setup: raise the generated Node engine floor to >=22.13.0
  • project-setup: don't report a committed greeting append as failed
  • Marketplace: scope agent installed-keys to source; reject blank QA folder
  • Marketplace: identity-check quick-action payloads and dedup by install key
  • project-setup: parse .env.local CRLF-safely in the dev esbuild config
  • Marketplace: reject blank names and payload/manifest name mismatch
  • Marketplace: reset loaded when a refresh empties the catalog
  • Marketplace: reuse the loaded catalog on mount instead of re-fetching
  • Marketplace: strip provenance on clone; reject prototype-polluting ids
  • project-setup: provide obsidianmd's @eslint/json peer; cap CM6 in refresh-pins
  • project-setup: extend the greenfield E2E to a multi-package-manager matrix
  • Marketplace: sequence-guard overlapping installed-state scans
  • project-setup: add four Obsidian editor-surface samples
  • Marketplace: live-sync installed badges on external mutations
  • Marketplace: persist catalog provenance on installed agents
  • Marketplace: add a type-filter facet to the browse UI
  • project-setup: pin vite as an explicit Vue-lane dep (strict-peer installs)
  • Marketplace: generation-guard the installed-scan against concurrent reloads
  • Marketplace: validate agent bodies on install; canonicalize source cache key
  • Marketplace: canonicalize base URL; commit source+generation atomically with items
  • Marketplace: source-consistent preview fetch; guard install vs reload; fix coverage plumbing
  • Marketplace: roll back warning flag on save failure; validate note payloads on install
  • Marketplace: generation-guard preview writes; document redirect SSRF residual
  • Marketplace: fix coverage gate (exclude Vue island from jest) + await warning before load
  • project-setup: steer existing-manifest repos out of greenfield Obsidian mode
  • Marketplace: warn on settings-tab opt-in; invalidate previews on catalog reload
  • project-setup: review-pass fixes — re-apply idempotency, release edges, doc accuracy
  • Marketplace review + polish pass: fix dead settings tab, sanitize source, harden fetch
  • project-setup: dev-watch stylesheet reload; Vue island + activateView hardening
  • Marketplace: enforce network opt-in at the I/O boundary; install the reviewed body
  • docs: correct quality-baseline note — feature adds more than presets removed
  • docs: ADR 0007 + CLAUDE.md — remote Marketplace replaces bundled presets
  • project-setup: pre-commit skips eslint when lint is off; fix BRAT beta manifest
  • Remove bundled starter presets; the Marketplace replaces them
  • project-setup: greenfield polish — LOC counts .vue, safer settings/vault services
  • Marketplace view: a dedicated Vue island to browse + install
  • project-setup: add a manual env-gated greenfield E2E scaffold test
  • project-setup: refocus Obsidian mode on greenfield, drop brownfield adoption
  • Marketplace settings opt-in + i18n
  • Marketplace foundation: catalog fetch, cache, and installer
  • fix(tasks): warn instead of silently clearing an all-blank chain config
  • project-setup: greenfield polish — fix npm-init test gate + doc drift
  • project-setup: pin obsidian to its lint-plugin peer; skip non-source CSS trees; gate the quality hook
  • project-setup: re-throw real append failures; clear stale extracted CSS before build
  • project-setup: beta manifest desktop flag, first-append atomicity, JSX for tsx entries
  • project-setup: prefer main.* entry in Obsidian mode; catch clear-greeting failures
  • project-setup: keep @eslint/js in obsidianmd's peer range; lint every test extension
  • project-setup: harden Obsidian scaffold (css guard, error routing, atomic append, desktop-only)
  • project-setup: warn on pre-0.17 esbuild; discover .mts/.cts tests
  • project-setup: make Obsidian verify coverage-clean; warn on sub-5 TypeScript
  • docs(tasks): document work-order chaining
  • feat(tasks): show a chain indicator on workflow work-order cards
  • fix(tasks): retry successor creation on a lost filename path race
  • project-setup: address Codex review on the Obsidian scaffold
  • feat(tasks): template editor declares a default successor chain
  • project-setup: product-vision questionnaire seeds docs/prds/
  • obsidian scaffold: coverage covers module extensions; reconcile kept minAppVersion
  • fix(tasks): chain UI review fixes — reopen sync, trigger chip, tests, id collision, LOC extract
  • obsidian scaffold: serialize settings writes; prefer main entry; flag test collision
  • obsidian scaffold: menu/timers/vault-event services + brownfield gate fixes
  • obsidian scaffold: ErrorService + typecheck/lint coverage of all source extensions
  • obsidian scaffold: ribbon + status-bar services; close 4 brownfield-entry gaps
  • feat(tasks): chain config UI — ChainConfigModal + "Next step" detail-modal chip
  • docs: record chain vs commit-on-accept ordering limitation (follow-up)
  • docs: broaden agent-availability chain limitation (template + deleted inline agent)
  • obsidian scaffold: Tier 3 UI samples + fix hooks/version/vitest defects
  • feat(tasks): i18n keys for work-order chaining UI
  • docs: record agent-only-template chained-successor limitation (follow-up)
  • fix(tasks): extract work-order coordinator wiring; frontmatter-only chain audit
  • project-setup: opt-in hooks, publishing story, Dependabot, pre-commit, slash commands
  • docs: chain audit is frontmatter-only + wiring extracted from main.ts
  • project-setup: lint the real source root; own the tsconfig in greenfield
  • project-setup: never treat the build artifact main.js as a source entry
  • project-setup: adopt root-entry repos as brownfield; warn on npmrc tag prefix
  • project-setup: lint JS sources and reject parent-directory entries
  • project-setup: reconcile versions.json, zone the real entry, fix Yarn release
  • project-setup: close five Obsidian edge cases (JS adopt, versions, reserved names)
  • project-setup: upgrade marked generic configs when converting to Obsidian mode
  • docs: add check:loc/check:css to per-task conventions (LOC ratchet is shrink-only)
  • feat(tasks): wire WorkOrderChainCoordinator at plugin level
  • project-setup: harden brownfield adoption + release-tag safety
  • docs: Task 7 integration test covers depth-cap + missing-template (Task 6 review follow-up)
  • project-setup: keep scaffolds lint-clean and package-manager honest
  • feat(tasks): WorkOrderChainCoordinator + pure buildSuccessorPlan
  • docs: fix Task 5 test path casing to real TemplateNoteStore.test.ts
  • docs: Task 10 — lock template-chain preservation across an editor round-trip
  • fix(skills): render esbuild entry as an explicitly-relative path
  • docs: Task 7 test — cover resolveSeedChain precedence (Task 5 review follow-up)
  • fix(skills): robust brownfield detection + verify-script collision notice
  • feat(tasks): templates declare a default successor, inherited on instantiation
  • feat(skills): add verify script, SessionStart hook, i18n scaffold + brownfield entry/version fixes
  • docs: Task 6 harness awaits coordinator handle directly (fix microtask race)
  • feat(skills): add Logger, SettingsService, VaultService, RequestService + onload error boundary
  • docs: make Task 7 integration test cover createWorkOrderFromSeed titleOverride precedence
  • docs: spec — workOrderResolution.ts is edited for chain forwarding (not untouched)
  • feat(tasks): thread chain config, provenance, and titleOverride through creation
  • fix(skills): brownfield-safe obsidian adoption + address Codex P1/P2 review
  • docs: fix plan writeChainContext duplicate next_action artifact
  • fix(tasks): multiline-safe chain context + extract applyChainFields
  • docs: Task 3 follow-ups — multiline-safe next_action, complexity extraction, test gap
  • docs: add plan frontmatter; fix Task 3 test path casing + superfluous import
  • feat(tasks): TaskNoteStore chain field + writeChainLink + writeChainContext
  • docs: preserve agent-only backend for inline chain successors
  • chore: sync package-lock.json version with package.json (1.1.0 -> 1.2.2)
  • feat(tasks): add agentBoardMaxChainDepth setting (default 25)
  • feat(skills): fold Obsidian/Vue best-practice research into the scaffold
  • docs: fix chain coordinator concurrency (reserve-after-trigger + atomic predecessor write)
  • feat(tasks): work-order chain config model (parse/serialize)
  • docs: address chaining plan review — objective-only chip label + activity-modal wiring
  • feat(skills): add core services layer + CommandsService, lean main.ts to orchestration
  • docs: chaining plan + fix successor-creation race (single seeded write)
  • docs: address chaining spec review — objective-only configs + template-branch seeding
  • docs: work-order chaining design spec
  • fix(skills): address Codex review on obsidian mode
  • feat(skills): teach project-setup to scaffold a complete Obsidian plugin workspace
  • docs: ADR 0006 — settings and modals stay Obsidian-native; Vue island set closed
  • refactor(chat): sever the subagent pipeline's dead DOM writes into the detached currentContentEl
  • refactor(chat): side-panels follow-ups — shared title-result policy, memoized icon refs, projection dedupe
  • refactor(chat): post-review polish pass for the side-panels migration
  • fix(chat): restore StatusPanel bash auto-scroll on data updates
  • chore(chat): re-lock LOC + quality ratchets after side-panels migration
  • fix(chat): restore history new-tab parity + guard clipboard copy
  • docs(chat): record side-panels Vue migration (ADR 0005 sub-project 4)
  • test(chat): lock the side-panels cross-surface DOM contract
  • feat(chat): cut over NavOverlay scroll-host binding; delete NavigationSidebar.ts
  • feat(chat): add teleported NavOverlay + useTabNavigation composable
  • feat(chat): mount the tab-chrome island into the tab lifecycle; delete StatusPanel.ts
  • docs(chat): add required YAML frontmatter to the side-panels plan
  • feat(chat): scaffold the tab-chrome Vue island + StatusPanel (unwired)
  • fix(chat): re-project history dropdown on auto-title status changes
  • feat(chat): add engine-side BashOutputStore (LRU-50 bang-bash owner)
  • test(chat): migrate history window perf guard to the Vitest lane
  • fix(chat): close history dropdown after context-menu navigation
  • feat(chat): migrate conversation history dropdown to Vue (windowing preserved)
  • feat(chat): migrate WorkOrderActivityDropdown to a native Vue component
  • fix(chat): surface a Notice when history title regeneration fails
  • feat(chat): migrate GitActionButton to a native Vue header component
  • feat(chat): add side-panel ChatShellCallbacks delegators (unwired)
  • feat(chat): project conversations/workOrder/git slices + subscribe providers
  • feat(chat): fan conversations/workOrder/git through ChatShellSnapshot
  • feat(chat): add conversations/workOrder/git slices to chatShellStore
  • docs(chat): plan review fixes — history Rename menu item, work-order open reset, popout-safe click-away
  • docs(chat): side panels + header remnants Vue migration plan (sub-project 4)
  • docs(chat): side panels + header remnants Vue migration design (sub-project 4)
  • chore(chat): trim setAgentService comment to hold the 500-LOC cap
  • fix(chat): use coordinator-aware visibility when swapping mention agent service
  • refactor(chat): drop dead composer store slices (streaming/inputMode/draftMeta)
  • chore(chat): re-lock LOC + quality ratchets after composer Vue migration
  • fix(chat): scope dropdown hide to owner; repaint v-if'd icons; contain submenu clicks
  • test(chat): lock the composer DOM contract; document sub-project 3
  • refactor(chat): delete production-dead ResumeSessionDropdown DOM render
  • refactor(chat): drop imperative chat dropdown DOM; keep shared component for inline-edit
  • feat(chat): restore mention/resume dropdown icons + mention name-color parity
  • feat(chat): render composer slash/mention/resume dropdowns in Vue
  • fix(chat): dispose edited-files document listeners on composer unmount
  • refactor(chat): drop dead dropdown-coordinator bridge methods; freeze empty state
  • feat(chat): project composer dropdown state via a chat dropdown coordinator
  • chore(chat): composer textarea test/comment polish
  • fix(chat): recompute context-row visibility after Vue chip patch
  • feat(chat): render the composer textarea in Vue (engine-driven, no v-model)
  • chore(chat): composer migration polish — stale comments, unused CSS, edited-files a11y
  • fix(chat): re-project composer toolbar on conversation restore
  • feat(chat): host selection indicators + render edited-files bar in Vue
  • feat(chat): render composer file/image chips as reactive Vue components
  • test(chat): lower Jest global coverage floors after composer toolbar migration
  • fix(chat): surface toolbar action failures; paint composer icons popout-safe
  • fix(chat): address Task 11 review — chip emit, image-src, shared path labels
  • feat(chat): project composer chips + edited files; add chip removal API
  • feat(chat): render the composer toolbar as Vue widgets; delete imperative toolbar
  • feat(chat): add composer Mcp/ExternalContext/ContextUsage/Send Vue widgets
  • feat(chat): add composer PermissionToggle + PlanModeToggle Vue widgets
  • feat(chat): add composer ThinkingBudgetSelector + ServiceTierToggle Vue widgets
  • feat(chat): add composer ModelSelector + ModeSelector Vue widgets
  • chore(chat): bump tabUi LOC ceiling for the composer toolbar-projection extraction
  • feat(chat): project the composer toolbar slice + action delegators
  • feat(chat): host the imperative composer inside the Vue island (seam only)
  • chore(chat): re-lock quality baseline for mountComposer island bootstrap (intermediate)
  • feat(chat): mount composer island shell hosting the imperative composer DOM
  • docs(chat): fold round-9 review into the composer plan (retain selector APIs + one-item active icon)
  • chore(chat): re-lock quality baseline for the composer island seam (intermediate)
  • feat(chat): add composer projection source + callbacks contract + event routing
  • fix(tasks): board UX feedback — overlay no-slots hint, conversation always in ⋯ menu, readable Stop
  • fix(chat): reconcile composer store with round-8 review (provider-icon descriptor + reasoning routing)
  • docs(chat): fold round-8 review into the composer plan (reasoning routing, provider icon, ext-context opener)
  • feat(chat): scaffold composer Vue island store + injection keys
  • docs(chat): fold round-7 review into the composer plan (async ext-context emit + image open)
  • docs(chat): preserve image-thumbnail open + external-context async emit timing
  • docs(chat): composer Vue migration implementation plan (20 tasks, 6 phases)
  • docs(chat): add effort-level callback, dropdown keyboard bridge, image chip by id
  • docs(chat): preserve trigger-mode classes, current-note/open, MCP + edited-files actions
  • docs(chat): fold in folder chips, external-context actions, plan-mode class; drop SendButton
  • docs(chat): lock chip-wrapper visibility classes in the composer DOM contract
  • docs(chat): register the selection-indicator elements as engine-driven handles
  • docs(chat): cover the queued-message row in the composer seam
  • docs(chat): composer + input toolbar Vue migration design (sub-project 3)
  • fix(tasks): address board UX review — collapsed-lane attention jump, context-menu key guard
  • feat(tasks): agent board UX pass — attention routing, keyboard access, empty states, motion
  • docs: agent board UX pass design spec
  • Move assistant action bar to its own row below the response

Full Changelog: https://github.com/Luis85/specorator/compare/1.2.2...1.3.0

README file from

Github

Specorator

Plan the work, run it, review what came back, keep the record. All in your vault.

Specorator preview

You're already using AI for serious work. Drafting emails. Planning trips. Comparing options. Reading the long report you don't want to read yourself. The conversations help, but the moment you close the tab, the work is gone. Tomorrow you start again from scratch.

Specorator brings that work inside your Obsidian vault. The drafts, plans, summaries, and edits land in notes you keep. Conversations are saved too, so you can pick one up tomorrow instead of starting fresh. It runs real provider-native agents — Claude Code, Codex, Opencode, Cursor Agent — with your vault as their working directory: file read/write, search, bash, and multi-step workflows all work out of the box.

What it solves

  • Typing the same prompts every day. Save any prompt as a vault note and fire it from a one-tap picker.
  • Being locked into one tool's UI for one provider. Use whichever providers you have access to, in one workspace.
  • AI work scattering across thirty open tabs. A board tracks every handoff from inbox to done.
  • The agent quietly changing your notes. Preview every edit before it lands, or flip on YOLO mode when you trust the run.

What's inside

Feature What it is
Co-Worker — Chat A workspace beside your notes that already knows what you're looking at and what you've highlighted.
Multi Provider Support Different engines for different jobs. Pick the one that fits the moment.
Quick Actions Your most-used prompts, one tap away. Stored as vault notes you own.
Agent Kanban Board A board for things you have handed off. Inbox to done, never lost in chat history.

Start in chat for fast foreground work, then move durable handoffs to the board when they need priority, acceptance criteria, background-style running, or review.

Everyday surfaces:

  • Inline Edit — Select text or start at the cursor + hotkey to edit directly in notes with word-level diff preview.
  • Slash Commands & Skills — Type / or $ for reusable prompt templates or Skills from user- and vault-level scopes.
  • @mention — Type @ to mention vault files, subagents, MCP servers, or files in external directories.
  • Plan Mode — Toggle via Shift+Tab. The agent explores and designs before implementing, then presents a plan for approval.
  • Instruction Mode (#) — Refined custom instructions added from the chat input.
  • MCP Servers — Connect external tools via Model Context Protocol (stdio, SSE, HTTP).
  • Multi-Tab & Conversations — Multiple chat tabs, conversation history, fork, resume, and compact.

What this is not

  • Not a code-only tool. The plugin is for anyone who works in notes — writers, planners, researchers, students, small-business owners, anyone keeping track of thinking in their vault.
  • Not a hosted service. Your notes live on your computer. No account is required.
  • Not a single-provider lock-in. Use whichever providers you have access to. If you only have one, that is fine.
  • Not magic. You decide the level of oversight. Preview every change before you accept it, or flip on YOLO mode and let the agent run on its own.
  • If you leave Specorator, your notes are still ordinary Markdown.

Requirements

Install

Specorator is available in the official Obsidian community plugin directory:

  1. In Obsidian, open Settings → Community plugins → Browse.
  2. Search for Specorator and click Install.
  3. Enable Specorator under Settings → Community plugins.

Or open it directly in the directory: Specorator on the Obsidian plugin directory.

Prefer pre-release builds? The Beta Reviewers Auto-update Tool (BRAT) still works: Add Beta PluginLuis85/specorator. If you previously installed via BRAT, switching to the community-plugin install keeps your settings — they live in your vault, not in the plugin folder.

Already installed? Open Settings → Specorator to point it at the providers you have, then open the chat sidebar from the ribbon or the command palette.

Privacy, network use, and data handling

Specorator is a local plugin with no telemetry and no analytics — it never collects usage data or phones home. What leaves your machine is only what you send to the AI provider you choose, and only when you send it.

  • Remote services. When you run a turn, the prompt plus any context you attach (selected text, mentioned files, images) is sent to the provider that powers that conversation: Anthropic (Claude), OpenAI (Codex), Cursor, or Opencode. If you configure MCP servers, the data you route to them is sent to those endpoints too. Review each provider's own privacy policy and terms — your usage is governed by them. No provider is contacted until you trigger a turn against it.
  • No account with us. Specorator has no backend and no Specorator account. Provider authentication is handled by each provider's own CLI/credentials.
  • Credentials. Provider API keys, MCP auth headers, and MCP env vars are stored in your OS keychain via Obsidian SecretStorage, not in plain-text vault config files. (This is why minAppVersion is 1.11.5.)
  • Filesystem access beyond the vault. Specorator reads provider transcript directories outside your vault — ~/.claude/, ~/.codex/, and ~/.cursor/ — to hydrate conversation history. The agents it runs use your vault as their working directory, but because they are real provider-native CLIs they can read, write, and execute anywhere your user account can. See Security model below.

Security model

Specorator runs real provider-native agent CLIs as subprocesses, which means the agent can edit files and run shell commands. Treat it with the same caution you would the underlying CLI in a terminal.

  • Preview before apply (default). File writes and edits surface a word-level diff you approve before anything lands in your notes.
  • YOLO mode is opt-in. Turning it on lets a run apply edits and run tools without per-step approval. Only enable it for runs you trust.
  • Scoped subprocess environment. Child processes receive an allowlisted environment, not your full shell environment, so host secrets are not leaked wholesale into spawned CLIs.
  • External binaries required. Specorator does not bundle the agents; it drives the CLIs you install yourself (see Requirements). It contains no auto-update mechanism — updates come through Obsidian.

Where it's heading

Specorator v1.0.0 is today's feature set — Chat, Multi-Provider, Quick Actions, Agent Board — shipped as a standalone plugin. The post-1.0 roadmap layers an agent harness on top: terminal-free setup, one-click revert, a vault-aware assistant, and tap-to-configure workflows. The plan is the Specorator Agent Harness PRD.

Origins

Specorator combines two project lines: an evolved provider-native agent plugin that began as a fork of the original Claudian Obsidian plugin by Yishen Tu, and earlier Specorator work around spec-driven Obsidian workflows. See CREDITS.md for the full provenance and acknowledgements.