letz-cli 0.3.0__tar.gz → 0.3.1__tar.gz

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: letz-cli
3
- Version: 0.3.0
3
+ Version: 0.3.1
4
4
  Summary: Letz Brain CLI - pull campaigns from the Letz platform, draft email sequences locally with Claude, and push them back staged for review.
5
5
  Project-URL: Homepage, https://sam.weareletz.com
6
6
  Author: Letz
@@ -28,13 +28,15 @@ the [Letz](https://sam.weareletz.com) platform staged for review, and let the cl
28
28
  ## 60-second start
29
29
 
30
30
  ```bash
31
- pip install letz-cli # or: pipx install letz-cli
32
- export LETZ_API_URL="https://your-letz-instance.example.com"
31
+ pip install letz-cli # or: pipx install letz-cli
33
32
  export LETZ_API_KEY="letz_sk_..." # create one in Settings → Claude Code Tools → API Keys
34
- letz campaigns # list your campaigns + ids
35
- letz prompt <CAMPAIGN_ID> # print the playbook for Claude
33
+ letz campaigns # list your campaigns + ids
34
+ letz prompt <CAMPAIGN_ID> # print the playbook for Claude
36
35
  ```
37
36
 
37
+ The CLI talks to the Letz cloud by default. Self-hosted or local instance? Point it
38
+ elsewhere with `export LETZ_API_URL="https://your-instance.example.com"` or `--api`.
39
+
38
40
  Paste the output of `letz prompt` into a [Claude Code](https://docs.claude.com/en/docs/claude-code/overview)
39
41
  session signed in with a **Claude Pro or Max subscription** (not a metered API key — the
40
42
  subscription is what makes generation free). Claude runs the whole loop below for you,
@@ -7,13 +7,15 @@ the [Letz](https://sam.weareletz.com) platform staged for review, and let the cl
7
7
  ## 60-second start
8
8
 
9
9
  ```bash
10
- pip install letz-cli # or: pipx install letz-cli
11
- export LETZ_API_URL="https://your-letz-instance.example.com"
10
+ pip install letz-cli # or: pipx install letz-cli
12
11
  export LETZ_API_KEY="letz_sk_..." # create one in Settings → Claude Code Tools → API Keys
13
- letz campaigns # list your campaigns + ids
14
- letz prompt <CAMPAIGN_ID> # print the playbook for Claude
12
+ letz campaigns # list your campaigns + ids
13
+ letz prompt <CAMPAIGN_ID> # print the playbook for Claude
15
14
  ```
16
15
 
16
+ The CLI talks to the Letz cloud by default. Self-hosted or local instance? Point it
17
+ elsewhere with `export LETZ_API_URL="https://your-instance.example.com"` or `--api`.
18
+
17
19
  Paste the output of `letz prompt` into a [Claude Code](https://docs.claude.com/en/docs/claude-code/overview)
18
20
  session signed in with a **Claude Pro or Max subscription** (not a metered API key — the
19
21
  subscription is what makes generation free). Claude runs the whole loop below for you,
@@ -2,4 +2,4 @@
2
2
  sequences locally with Claude, and push them back staged for review.
3
3
  Nothing sends until a human clicks Activate.
4
4
  """
5
- __version__ = "0.3.0"
5
+ __version__ = "0.3.1"
@@ -23,12 +23,12 @@ import sys
23
23
 
24
24
  try:
25
25
  from . import __version__
26
- from .api import LetzAPI, LetzAPIError
26
+ from .api import DEFAULT_API_URL, LetzAPI, LetzAPIError
27
27
  from .gauntlet import audit_sequence
28
28
  except ImportError: # allow running as a plain script: python cli/letz/__main__.py
29
29
  sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
30
30
  from letz import __version__
31
- from letz.api import LetzAPI, LetzAPIError
31
+ from letz.api import DEFAULT_API_URL, LetzAPI, LetzAPIError
32
32
  from letz.gauntlet import audit_sequence
33
33
 
34
34
 
@@ -239,7 +239,8 @@ def cmd_status(args):
239
239
  def main(argv=None):
240
240
  p = argparse.ArgumentParser(prog="letz", description="Letz Brain CLI — off-platform generation, persist, click send.")
241
241
  p.add_argument("--version", action="version", version=f"%(prog)s {__version__}")
242
- p.add_argument("--api", default=os.environ.get("LETZ_API_URL", "http://localhost:8000"), help="platform base URL")
242
+ p.add_argument("--api", default=os.environ.get("LETZ_API_URL") or DEFAULT_API_URL,
243
+ help="platform base URL (default: the Letz cloud; override via $LETZ_API_URL)")
243
244
  p.add_argument("--key", default=os.environ.get("LETZ_API_KEY", ""), help="API key (or $LETZ_API_KEY) — create one in Settings → API Keys")
244
245
  p.add_argument("--work", default=None, help="work dir (default ./letz_work)")
245
246
  sub = p.add_subparsers(dest="cmd", required=True)
@@ -16,8 +16,11 @@ class LetzAPIError(Exception):
16
16
  super().__init__(f"HTTP {status}: {str(body)[:300]}")
17
17
 
18
18
 
19
+ DEFAULT_API_URL = "https://letz-auto-sdr-production.up.railway.app"
20
+
21
+
19
22
  class LetzAPI:
20
- def __init__(self, base_url: str = "http://localhost:8000", timeout: int = 120,
23
+ def __init__(self, base_url: str = DEFAULT_API_URL, timeout: int = 120,
21
24
  api_key: str = ""):
22
25
  self.base = base_url.rstrip("/")
23
26
  self.timeout = timeout
File without changes
File without changes
File without changes
File without changes