Agent-native backlog manager for solo-preneurs. Manage multiple projects with Claude Code via MCP.
Drift inferred · capture-to-capture
tool count over time
tools
-
pulsyr_advance
Transition an item's status (lifecycle-validated)
-
pulsyr_areas
List areas (groupings) with item counts
-
pulsyr_complete
Mark an item done: reports newly unblocked items
-
pulsyr_context
Session briefing: quick wins, blockers, unlinked Sentry errors, active threads
-
pulsyr_create
Create a backlog item; auto-creates the area if needed
-
pulsyr_doc_get
Read a management document (current or a specific version)
-
pulsyr_doc_list
List management documents (deliverables) grouped by compartment
-
pulsyr_doc_put
Create or update a management document (append-only versioning)
-
pulsyr_gantt_get
Read the project plan (3-level Gantt hierarchy)
-
pulsyr_gantt_task_remove
Remove a plan task
-
pulsyr_gantt_task_upsert
Create or update a plan task (the Gantt is edited only via MCP)
-
pulsyr_incident
Incident detail with stack trace fetched from Sentry
-
pulsyr_incident_resolve
Resolve an incident in Pulsyr (and optionally in Sentry)
-
pulsyr_incidents
List Sentry errors in the incident container
-
pulsyr_link
Add a graph edge between items (blocks / requires / conflicts / related / part_of)
-
pulsyr_list
Filtered item list (status, type, area, order)
-
pulsyr_move_area
Move an item to a different area
-
pulsyr_pending_complete
Mark a pending as done
-
pulsyr_pending_list
List project pendings (action items) with owner and status
-
pulsyr_pending_upsert
Create or update a pending
-
pulsyr_search
Full-text search across backlog items
-
pulsyr_thread
Thread detail with artifacts and linked items
-
pulsyr_thread_advance
Advance a Thread to its next stage
-
pulsyr_thread_create
Create a Thread (funnel for heavy features)
-
pulsyr_thread_link
Link an existing backlog item to a Thread
-
pulsyr_thread_list
List Threads, filter by stage or area
analyzed commit af15715 · analyzer v33 · 5d ago
skills & prompt files 1
- agent-rules rlcuevas14-PULSYR-af15715/CLAUDE.md
danger signals3
- suspicious endpoint sentry.io (telemetry)
expected for this server's purpose
rlcuevas14-PULSYR-af15715/app/webhooks/connection.py :18
DEFAULT_BASE_URL = "https://sentry.io" - suspicious endpoint sentry.io (telemetry)
expected for this server's purpose
rlcuevas14-PULSYR-af15715/tests/test_mcp.py :292
events_count=5, payload={"web_url": "https://sentry.io/i/1"}, - suspicious endpoint sentry.io (telemetry)
expected for this server's purpose
rlcuevas14-PULSYR-af15715/tests/test_sprint5.py :293
"permalink": "https://sentry.io/a", "count": "42",
code files: 213
filesystem 19
- fs rlcuevas14-PULSYR-af15715/app/i18n/__init__.py :14
from pathlib import Path - fs rlcuevas14-PULSYR-af15715/app/items/graph.py :133
"""Ids of items blocking others that are still open (🔓 badge = unblocker). - fs rlcuevas14-PULSYR-af15715/app/items/importer.py :5
from pathlib import Path - fs rlcuevas14-PULSYR-af15715/app/items/router.py :3
from pathlib import Path - fs rlcuevas14-PULSYR-af15715/app/templates_config.py :4
from pathlib import Path - fs (weak) rlcuevas14-PULSYR-af15715/scripts/check_analytics_build.py :4
from pathlib import Path - fs (weak) rlcuevas14-PULSYR-af15715/scripts/check_public_site.py :11
from pathlib import Path - fs (weak) rlcuevas14-PULSYR-af15715/scripts/check_quality_exceptions.py :9
from pathlib import Path - fs (weak) rlcuevas14-PULSYR-af15715/scripts/check_site_links.py :10
from pathlib import Path, PurePosixPath - fs (weak) rlcuevas14-PULSYR-af15715/scripts/export_route_inventory.py :5
from pathlib import Path - fs (weak) rlcuevas14-PULSYR-af15715/scripts/web_baseline.py :21
from pathlib import Path - fs (weak) rlcuevas14-PULSYR-af15715/tests/test_error_documents.py :1
from pathlib import Path - fs (weak) rlcuevas14-PULSYR-af15715/tests/test_frontend_assets.py :3
from pathlib import Path - fs (weak) rlcuevas14-PULSYR-af15715/tests/test_i18n.py :9
from pathlib import Path - fs (weak) rlcuevas14-PULSYR-af15715/tests/test_importer.py :1
from pathlib import Path - fs (weak) rlcuevas14-PULSYR-af15715/tests/test_operational_contract.py :1
from pathlib import Path - fs (weak) rlcuevas14-PULSYR-af15715/tests/test_public_site_contract.py :3
from pathlib import Path - fs (weak) rlcuevas14-PULSYR-af15715/tests/test_staging_contract.py :1
from pathlib import Path - fs (weak) rlcuevas14-PULSYR-af15715/tests/test_web_security.py :2
from pathlib import Path
network 46
- net rlcuevas14-PULSYR-af15715/app/ai/llm.py :10
import httpx - net rlcuevas14-PULSYR-af15715/app/auth/oauth.py :19
from urllib.parse import urlencode - net rlcuevas14-PULSYR-af15715/app/billing/paddle.py :13
import httpx - net rlcuevas14-PULSYR-af15715/app/main.py :5
from urllib.parse import urlparse - net rlcuevas14-PULSYR-af15715/app/webhooks/service.py :14
import httpx - net (weak) rlcuevas14-PULSYR-af15715/scripts/check_public_site.py :12
from urllib.parse import urlparse - net (weak) rlcuevas14-PULSYR-af15715/scripts/check_site_links.py :11
from urllib.error import HTTPError, URLError - net (weak) rlcuevas14-PULSYR-af15715/scripts/web_baseline.py :16
import socket - net (weak) rlcuevas14-PULSYR-af15715/tests/conftest.py :4
import httpx - net (weak) rlcuevas14-PULSYR-af15715/tests/test_access_and_setup.py :5
from httpx import AsyncClient - net (weak) rlcuevas14-PULSYR-af15715/tests/test_account_integrations.py :5
from httpx import AsyncClient - net (weak) rlcuevas14-PULSYR-af15715/tests/test_backlog_filters.py :10
from httpx import AsyncClient - net (weak) rlcuevas14-PULSYR-af15715/tests/test_billing_changes.py :6
from httpx import AsyncClient - net (weak) rlcuevas14-PULSYR-af15715/tests/test_billing_checkout.py :10
from httpx import AsyncClient - net (weak) rlcuevas14-PULSYR-af15715/tests/test_billing_history.py :12
import httpx - net (weak) rlcuevas14-PULSYR-af15715/tests/test_billing_paddle.py :5
import httpx - net (weak) rlcuevas14-PULSYR-af15715/tests/test_billing_screen.py :7
from httpx import AsyncClient - net (weak) rlcuevas14-PULSYR-af15715/tests/test_error_documents.py :3
from httpx import ASGITransport, AsyncClient - net (weak) rlcuevas14-PULSYR-af15715/tests/test_error_paths.py :15
from httpx import AsyncClient - net (weak) rlcuevas14-PULSYR-af15715/tests/test_flash.py :3
from httpx import AsyncClient - net (weak) rlcuevas14-PULSYR-af15715/tests/test_health_observability.py :5
from httpx import ASGITransport, AsyncClient - net (weak) rlcuevas14-PULSYR-af15715/tests/test_isolation.py :5
from httpx import AsyncClient - net (weak) rlcuevas14-PULSYR-af15715/tests/test_items.py :4
from httpx import AsyncClient - net (weak) rlcuevas14-PULSYR-af15715/tests/test_items_rest.py :5
from httpx import AsyncClient - net (weak) rlcuevas14-PULSYR-af15715/tests/test_llm.py :2
import httpx - net (weak) rlcuevas14-PULSYR-af15715/tests/test_management.py :12
from httpx import AsyncClient - net (weak) rlcuevas14-PULSYR-af15715/tests/test_management_ui.py :10
from httpx import AsyncClient - net (weak) rlcuevas14-PULSYR-af15715/tests/test_mcp.py :4
from httpx import AsyncClient - net (weak) rlcuevas14-PULSYR-af15715/tests/test_mcp_tools.py :6
from httpx import AsyncClient - net (weak) rlcuevas14-PULSYR-af15715/tests/test_metrics.py :6
from httpx import ASGITransport, AsyncClient - net (weak) rlcuevas14-PULSYR-af15715/tests/test_oauth.py :7
import httpx - net (weak) rlcuevas14-PULSYR-af15715/tests/test_paddle_webhook.py :14
from httpx import AsyncClient - net (weak) rlcuevas14-PULSYR-af15715/tests/test_private_indexing.py :1
from httpx import ASGITransport, AsyncClient - net (weak) rlcuevas14-PULSYR-af15715/tests/test_project_modules.py :5
from httpx import AsyncClient - net (weak) rlcuevas14-PULSYR-af15715/tests/test_request_boundary.py :5
from httpx import ASGITransport, AsyncClient - net (weak) rlcuevas14-PULSYR-af15715/tests/test_request_context.py :5
from httpx import ASGITransport, AsyncClient - net (weak) rlcuevas14-PULSYR-af15715/tests/test_routes_extra.py :5
from httpx import AsyncClient - net (weak) rlcuevas14-PULSYR-af15715/tests/test_scopes.py :4
from httpx import AsyncClient - net (weak) rlcuevas14-PULSYR-af15715/tests/test_search.py :4
from httpx import AsyncClient - net (weak) rlcuevas14-PULSYR-af15715/tests/test_sprint0.py :4
from httpx import AsyncClient - net (weak) rlcuevas14-PULSYR-af15715/tests/test_sprint2.py :4
from httpx import AsyncClient - net (weak) rlcuevas14-PULSYR-af15715/tests/test_sprint4.py :4
from httpx import AsyncClient - net (weak) rlcuevas14-PULSYR-af15715/tests/test_sprint5.py :7
from httpx import AsyncClient - net (weak) rlcuevas14-PULSYR-af15715/tests/test_ui.py :7
from httpx import AsyncClient - net (weak) rlcuevas14-PULSYR-af15715/tests/test_web_security.py :5
from httpx import ASGITransport, AsyncClient - net (weak) rlcuevas14-PULSYR-af15715/tests/test_webhooks_service.py :207
import httpx
database 83
- db rlcuevas14-PULSYR-af15715/app/accounts/members.py :4
from sqlalchemy import func, select - db rlcuevas14-PULSYR-af15715/app/accounts/models.py :4
from sqlalchemy import TIMESTAMP, Boolean, CheckConstraint, ForeignKey, String, UniqueConstraint, func - db rlcuevas14-PULSYR-af15715/app/accounts/plans.py :15
from sqlalchemy import func, select - db rlcuevas14-PULSYR-af15715/app/accounts/router.py :5
from sqlalchemy.ext.asyncio import AsyncSession - db rlcuevas14-PULSYR-af15715/app/accounts/service.py :5
from sqlalchemy import func, select - db rlcuevas14-PULSYR-af15715/app/auth/deps.py :6
from sqlalchemy.ext.asyncio import AsyncSession - db rlcuevas14-PULSYR-af15715/app/auth/models.py :5
from sqlalchemy import ( - db rlcuevas14-PULSYR-af15715/app/auth/rate_limit.py :10
from sqlalchemy import delete, text - db rlcuevas14-PULSYR-af15715/app/auth/router.py :8
from sqlalchemy import func, select - db rlcuevas14-PULSYR-af15715/app/auth/service.py :7
from sqlalchemy import func, or_, select, update - db rlcuevas14-PULSYR-af15715/app/billing/router.py :16
from sqlalchemy.ext.asyncio import AsyncSession - db rlcuevas14-PULSYR-af15715/app/database.py :3
from sqlalchemy import func - db rlcuevas14-PULSYR-af15715/app/items/graph.py :10
from sqlalchemy import text - db rlcuevas14-PULSYR-af15715/app/items/importer.py :8
from sqlalchemy import select - db rlcuevas14-PULSYR-af15715/app/items/models.py :6
from sqlalchemy import ( - db rlcuevas14-PULSYR-af15715/app/items/relationships.py :10
from sqlalchemy.ext.asyncio import AsyncSession - db rlcuevas14-PULSYR-af15715/app/items/router.py :8
from sqlalchemy import select - db rlcuevas14-PULSYR-af15715/app/items/search.py :15
from sqlalchemy import text - db rlcuevas14-PULSYR-af15715/app/items/service.py :11
from sqlalchemy import Select, func, select, text - db rlcuevas14-PULSYR-af15715/app/jobs/handlers.py :5
from sqlalchemy import select, text - db rlcuevas14-PULSYR-af15715/app/jobs/models.py :6
from sqlalchemy import JSON, TIMESTAMP, CheckConstraint, ForeignKey, Integer, Numeric, String, Text, func - db rlcuevas14-PULSYR-af15715/app/jobs/worker.py :5
from sqlalchemy import func, select, text, update - db rlcuevas14-PULSYR-af15715/app/main.py :10
from sqlalchemy import text - db rlcuevas14-PULSYR-af15715/app/management/models.py :17
from sqlalchemy import ( - db rlcuevas14-PULSYR-af15715/app/management/router.py :15
from sqlalchemy.ext.asyncio import AsyncSession - db rlcuevas14-PULSYR-af15715/app/management/service.py :13
from sqlalchemy import func, or_, select - db rlcuevas14-PULSYR-af15715/app/mcp/server.py :17
from sqlalchemy.exc import IntegrityError - db rlcuevas14-PULSYR-af15715/app/mcp/tools.py :14
from sqlalchemy import func, select, text - db rlcuevas14-PULSYR-af15715/app/metrics.py :8
from sqlalchemy import func, select - db rlcuevas14-PULSYR-af15715/app/projects/access.py :10
from sqlalchemy import select - db rlcuevas14-PULSYR-af15715/app/projects/deps.py :6
from sqlalchemy.ext.asyncio import AsyncSession - db rlcuevas14-PULSYR-af15715/app/projects/models.py :5
from sqlalchemy import ( - db rlcuevas14-PULSYR-af15715/app/projects/modules.py :11
from sqlalchemy import select - db rlcuevas14-PULSYR-af15715/app/projects/router.py :5
from sqlalchemy import select - db rlcuevas14-PULSYR-af15715/app/projects/service.py :5
from sqlalchemy import select - db rlcuevas14-PULSYR-af15715/app/scopes/models.py :5
from sqlalchemy import TIMESTAMP, Boolean, ForeignKey, Integer, String, UniqueConstraint, func - db rlcuevas14-PULSYR-af15715/app/scopes/router.py :5
from sqlalchemy import select - db rlcuevas14-PULSYR-af15715/app/scopes/service.py :6
from sqlalchemy import func, select - db rlcuevas14-PULSYR-af15715/app/threads/models.py :11
from sqlalchemy import TIMESTAMP, CheckConstraint, ForeignKey, String, Text, func - db rlcuevas14-PULSYR-af15715/app/threads/router.py :7
from sqlalchemy import select - db rlcuevas14-PULSYR-af15715/app/threads/service.py :5
from sqlalchemy import func, select - db rlcuevas14-PULSYR-af15715/app/ui/router.py :8
from sqlalchemy import func, select, text - db rlcuevas14-PULSYR-af15715/app/webhooks/connection.py :11
from sqlalchemy import func, or_, select, update - db rlcuevas14-PULSYR-af15715/app/webhooks/models.py :7
from sqlalchemy import JSON, TIMESTAMP, CheckConstraint, ForeignKey, Integer, String, Text, func - db rlcuevas14-PULSYR-af15715/app/webhooks/router.py :8
from sqlalchemy.ext.asyncio import AsyncSession - db rlcuevas14-PULSYR-af15715/app/webhooks/service.py :15
from sqlalchemy import select, text - db rlcuevas14-PULSYR-af15715/migrations/env.py :5
from sqlalchemy.ext.asyncio import create_async_engine - db rlcuevas14-PULSYR-af15715/migrations/versions/v0001_initial_schema.py :3
import sqlalchemy as sa - db (weak) rlcuevas14-PULSYR-af15715/scripts/check_query_budgets.py :11
from sqlalchemy import text - db (weak) rlcuevas14-PULSYR-af15715/tests/conftest.py :8
from sqlalchemy import text - db (weak) rlcuevas14-PULSYR-af15715/tests/test_access_and_setup.py :6
from sqlalchemy import text - db (weak) rlcuevas14-PULSYR-af15715/tests/test_account_integrations.py :78
from sqlalchemy import select - db (weak) rlcuevas14-PULSYR-af15715/tests/test_auth.py :2
from sqlalchemy.ext.asyncio import AsyncSession - db (weak) rlcuevas14-PULSYR-af15715/tests/test_backlog_filters.py :90
from sqlalchemy import select - db (weak) rlcuevas14-PULSYR-af15715/tests/test_error_paths.py :259
import sqlalchemy as sa - db (weak) rlcuevas14-PULSYR-af15715/tests/test_graph.py :4
from sqlalchemy.ext.asyncio import async_sessionmaker - db (weak) rlcuevas14-PULSYR-af15715/tests/test_importer.py :4
from sqlalchemy import func, select, text - db (weak) rlcuevas14-PULSYR-af15715/tests/test_invariants.py :11
from sqlalchemy import text - db (weak) rlcuevas14-PULSYR-af15715/tests/test_isolation.py :131
from sqlalchemy import func, select - db (weak) rlcuevas14-PULSYR-af15715/tests/test_items.py :8
from sqlalchemy import select - db (weak) rlcuevas14-PULSYR-af15715/tests/test_jobs.py :7
from sqlalchemy import func, select - db (weak) rlcuevas14-PULSYR-af15715/tests/test_management.py :193
from sqlalchemy import select - db (weak) rlcuevas14-PULSYR-af15715/tests/test_management_ui.py :11
from sqlalchemy import select - db (weak) rlcuevas14-PULSYR-af15715/tests/test_mcp.py :39
from sqlalchemy import select - db (weak) rlcuevas14-PULSYR-af15715/tests/test_mcp_parity.py :8
from sqlalchemy import select - db (weak) rlcuevas14-PULSYR-af15715/tests/test_metrics.py :7
from sqlalchemy import delete - db (weak) rlcuevas14-PULSYR-af15715/tests/test_oauth.py :9
from sqlalchemy import select - db (weak) rlcuevas14-PULSYR-af15715/tests/test_paddle_webhook.py :15
from sqlalchemy import select - db (weak) rlcuevas14-PULSYR-af15715/tests/test_plans.py :6
from sqlalchemy import select - db (weak) rlcuevas14-PULSYR-af15715/tests/test_project_modules.py :6
from sqlalchemy import delete, func, select - db (weak) rlcuevas14-PULSYR-af15715/tests/test_request_boundary.py :6
from sqlalchemy import text - db (weak) rlcuevas14-PULSYR-af15715/tests/test_routes_extra.py :6
from sqlalchemy import select - db (weak) rlcuevas14-PULSYR-af15715/tests/test_search.py :5
from sqlalchemy import select, text - db (weak) rlcuevas14-PULSYR-af15715/tests/test_sentry_connection.py :111
from sqlalchemy import select - db (weak) rlcuevas14-PULSYR-af15715/tests/test_sentry_webhook_routing.py :8
from sqlalchemy import select - db (weak) rlcuevas14-PULSYR-af15715/tests/test_services.py :5
from sqlalchemy import select - db (weak) rlcuevas14-PULSYR-af15715/tests/test_sprint0.py :8
from sqlalchemy import select - db (weak) rlcuevas14-PULSYR-af15715/tests/test_sprint1.py :4
from sqlalchemy import select - db (weak) rlcuevas14-PULSYR-af15715/tests/test_sprint2.py :8
from sqlalchemy import select - db (weak) rlcuevas14-PULSYR-af15715/tests/test_sprint4.py :8
from sqlalchemy import select - db (weak) rlcuevas14-PULSYR-af15715/tests/test_sprint5.py :97
from sqlalchemy import select - db (weak) rlcuevas14-PULSYR-af15715/tests/test_ui.py :8
from sqlalchemy import select - db (weak) rlcuevas14-PULSYR-af15715/tests/test_webhooks_service.py :89
from sqlalchemy import select
declared dependencies 20
- fastapi@>=0.115.0
- uvicorn@>=0.30.0
- sqlalchemy@>=2.0.30
- asyncpg@>=0.29.0
- alembic@>=1.13.0
- pydantic-settings@>=2.3.0
- bcrypt@>=4.1.0
- python-multipart@>=0.0.9
- jinja2@>=3.1.4
- markdown-it-py@>=3.0.0
- pgvector@>=0.3.0
- httpx@>=0.27.0
- itsdangerous@>=2.2.0
- sentry-sdk@>=2.67.1
- pytest@>=8.2.0
- pytest-asyncio@>=0.23.0
- pytest-cov@>=5.0.0
- testcontainers@>=4.7.0
- ruff@>=0.5.0
- mypy@>=1.11.0